After successful device registration (state.configPushed = true), the wizard now opens vault.html in a new tab and closes the setup tab. Both create-new and attach-existing flows funnel through the same finishSetup() handler. Closing the setup tab is best-effort -- chrome.tabs.remove failures don't block the vault open. Add src/__stubs__/relicario_wasm.stub.ts + vitest.config alias so setup.ts can be imported in unit tests without the runtime WASM file. Exclude the stubs dir from the webpack/tsc build in tsconfig.json.
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { finishSetup } from '../setup';
|
|
|
|
describe('finishSetup', () => {
|
|
beforeEach(() => {
|
|
(global as any).chrome = {
|
|
tabs: {
|
|
create: vi.fn(() => Promise.resolve({ id: 999 })),
|
|
getCurrent: vi.fn(() => Promise.resolve({ id: 42 })),
|
|
remove: vi.fn(() => Promise.resolve()),
|
|
},
|
|
runtime: {
|
|
getURL: vi.fn((p: string) => `chrome-extension://abc/${p}`),
|
|
},
|
|
};
|
|
});
|
|
|
|
it('opens vault.html in a new tab', async () => {
|
|
await finishSetup();
|
|
expect(chrome.runtime.getURL).toHaveBeenCalledWith('vault.html');
|
|
expect(chrome.tabs.create).toHaveBeenCalledWith({
|
|
url: 'chrome-extension://abc/vault.html',
|
|
});
|
|
});
|
|
|
|
it('closes the current setup tab after opening the vault tab', async () => {
|
|
await finishSetup();
|
|
expect(chrome.tabs.getCurrent).toHaveBeenCalled();
|
|
expect(chrome.tabs.remove).toHaveBeenCalledWith(42);
|
|
});
|
|
|
|
it('still opens the vault tab even if closing the setup tab fails', async () => {
|
|
(chrome.tabs.remove as any).mockRejectedValueOnce(new Error('no permission'));
|
|
await expect(finishSetup()).resolves.not.toThrow();
|
|
expect(chrome.tabs.create).toHaveBeenCalled();
|
|
});
|
|
});
|