mirror of
https://github.com/bitwarden/browser
synced 2025-12-11 05:43:41 +00:00
* wip * feat: refactor how we react to tab changes * feat: always begin me emitting all active tabs * feat: only calculate autofill for active tabs * fix: bug not properly listening to reloads * wip * fix: clean up * fix: clean up
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { BehaviorSubject } from "rxjs";
|
|
|
|
import { BadgeBrowserApi, RawBadgeState, Tab } from "../badge-browser-api";
|
|
|
|
export class MockBadgeBrowserApi implements BadgeBrowserApi {
|
|
private _activeTabsUpdated$ = new BehaviorSubject<Tab[]>([]);
|
|
activeTabsUpdated$ = this._activeTabsUpdated$.asObservable();
|
|
|
|
specificStates: Record<number, RawBadgeState> = {};
|
|
generalState?: RawBadgeState;
|
|
tabs: number[] = [];
|
|
activeTabs: number[] = [];
|
|
|
|
getActiveTabs(): Promise<Tab[]> {
|
|
return Promise.resolve(
|
|
this.activeTabs.map(
|
|
(tabId) =>
|
|
({
|
|
tabId,
|
|
url: `https://example.com/${tabId}`,
|
|
}) satisfies Tab,
|
|
),
|
|
);
|
|
}
|
|
|
|
setActiveTabs(tabs: number[]) {
|
|
this.activeTabs = tabs;
|
|
this._activeTabsUpdated$.next(
|
|
tabs.map((tabId) => ({ tabId, url: `https://example.com/${tabId}` })),
|
|
);
|
|
}
|
|
|
|
setState = jest.fn().mockImplementation((state: RawBadgeState, tabId?: number): Promise<void> => {
|
|
if (tabId !== undefined) {
|
|
this.specificStates[tabId] = state;
|
|
} else {
|
|
this.generalState = state;
|
|
}
|
|
|
|
return Promise.resolve();
|
|
});
|
|
|
|
getTabs(): Promise<number[]> {
|
|
return Promise.resolve(this.tabs);
|
|
}
|
|
}
|