mirror of
https://github.com/bitwarden/browser
synced 2024-12-22 16:12:07 +01:00
7899b25ab3
* Move URI matching logic into uriView * Fix url parsing: always assign default protocol, otherwise no protocol with port is parsed incorrectly * Codescene: refactor domain matching logic
84 lines
2.9 KiB
TypeScript
84 lines
2.9 KiB
TypeScript
// eslint-disable-next-line no-restricted-imports
|
|
import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute";
|
|
import { BehaviorSubject, firstValueFrom } from "rxjs";
|
|
|
|
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
|
|
import { EncryptService } from "@bitwarden/common/abstractions/encrypt.service";
|
|
import { ContainerService } from "@bitwarden/common/services/container.service";
|
|
import { SettingsService } from "@bitwarden/common/services/settings.service";
|
|
import { StateService } from "@bitwarden/common/services/state.service";
|
|
|
|
describe("SettingsService", () => {
|
|
let settingsService: SettingsService;
|
|
|
|
let cryptoService: SubstituteOf<CryptoService>;
|
|
let encryptService: SubstituteOf<EncryptService>;
|
|
let stateService: SubstituteOf<StateService>;
|
|
let activeAccount: BehaviorSubject<string>;
|
|
let activeAccountUnlocked: BehaviorSubject<boolean>;
|
|
|
|
const mockEquivalentDomains = [
|
|
["example.com", "exampleapp.com", "example.co.uk", "ejemplo.es"],
|
|
["bitwarden.com", "bitwarden.co.uk", "sm-bitwarden.com"],
|
|
["example.co.uk", "exampleapp.co.uk"],
|
|
];
|
|
|
|
beforeEach(() => {
|
|
cryptoService = Substitute.for();
|
|
encryptService = Substitute.for();
|
|
stateService = Substitute.for();
|
|
activeAccount = new BehaviorSubject("123");
|
|
activeAccountUnlocked = new BehaviorSubject(true);
|
|
|
|
stateService.getSettings().resolves({ equivalentDomains: mockEquivalentDomains });
|
|
stateService.activeAccount$.returns(activeAccount);
|
|
stateService.activeAccountUnlocked$.returns(activeAccountUnlocked);
|
|
(window as any).bitwardenContainerService = new ContainerService(cryptoService, encryptService);
|
|
|
|
settingsService = new SettingsService(stateService);
|
|
});
|
|
|
|
afterEach(() => {
|
|
activeAccount.complete();
|
|
activeAccountUnlocked.complete();
|
|
});
|
|
|
|
describe("getEquivalentDomains", () => {
|
|
it("returns all equivalent domains for a URL", async () => {
|
|
const actual = settingsService.getEquivalentDomains("example.co.uk");
|
|
const expected = new Set([
|
|
"example.com",
|
|
"exampleapp.com",
|
|
"example.co.uk",
|
|
"ejemplo.es",
|
|
"exampleapp.co.uk",
|
|
]);
|
|
expect(actual).toEqual(expected);
|
|
});
|
|
|
|
it("returns an empty set if there are no equivalent domains", () => {
|
|
const actual = settingsService.getEquivalentDomains("asdf");
|
|
expect(actual).toEqual(new Set());
|
|
});
|
|
});
|
|
|
|
it("setEquivalentDomains", async () => {
|
|
await settingsService.setEquivalentDomains([["test2"], ["domains2"]]);
|
|
|
|
stateService.received(1).setSettings(Arg.any());
|
|
|
|
expect((await firstValueFrom(settingsService.settings$)).equivalentDomains).toEqual([
|
|
["test2"],
|
|
["domains2"],
|
|
]);
|
|
});
|
|
|
|
it("clear", async () => {
|
|
await settingsService.clear();
|
|
|
|
stateService.received(1).setSettings(Arg.any(), Arg.any());
|
|
|
|
expect(await firstValueFrom(settingsService.settings$)).toEqual({});
|
|
});
|
|
});
|