1
0
mirror of https://github.com/bitwarden/browser synced 2026-01-04 17:43:39 +00:00

[PM-17635] [PM-18601] Simplifying mocking and usage of the sdk (#14287)

* feat: add our own custom deep mocker

* feat: use new mock service in totp tests

* feat: implement userClient mocking

* chore: move mock files

* feat: replace existing manual sdkService mocking

* chore: rename to 'client'

* chore: improve docs

* feat: refactor sdkService to never return undefined BitwardenClient
This commit is contained in:
Andreas Coroiu
2025-05-28 15:00:30 +02:00
committed by GitHub
parent 4fcc4793bb
commit d1fb37d696
9 changed files with 444 additions and 54 deletions

View File

@@ -132,15 +132,13 @@ describe("DefaultSdkService", () => {
);
keyService.userKey$.calledWith(userId).mockReturnValue(userKey$);
const subject = new BehaviorSubject<Rc<BitwardenClient> | undefined>(undefined);
service.userClient$(userId).subscribe(subject);
await new Promise(process.nextTick);
const userClientTracker = new ObservableTracker(service.userClient$(userId), false);
await userClientTracker.pauseUntilReceived(1);
userKey$.next(undefined);
await new Promise(process.nextTick);
await userClientTracker.expectCompletion();
expect(mockClient.free).toHaveBeenCalledTimes(1);
expect(subject.value).toBe(undefined);
});
});

View File

@@ -71,7 +71,7 @@ export class DefaultSdkService implements SdkService {
private userAgent: string | null = null,
) {}
userClient$(userId: UserId): Observable<Rc<BitwardenClient> | undefined> {
userClient$(userId: UserId): Observable<Rc<BitwardenClient>> {
return this.sdkClientOverrides.pipe(
takeWhile((clients) => clients[userId] !== UnsetClient, false),
map((clients) => {
@@ -88,6 +88,7 @@ export class DefaultSdkService implements SdkService {
return this.internalClient$(userId);
}),
takeWhile((client) => client !== undefined, false),
throwIfEmpty(() => new UserNotLoggedInError(userId)),
);
}
@@ -112,7 +113,7 @@ export class DefaultSdkService implements SdkService {
* @param userId The user id for which to create the client
* @returns An observable that emits the client for the user
*/
private internalClient$(userId: UserId): Observable<Rc<BitwardenClient> | undefined> {
private internalClient$(userId: UserId): Observable<Rc<BitwardenClient>> {
const cached = this.sdkClientCache.get(userId);
if (cached !== undefined) {
return cached;