diff --git a/extensions/matrix/src/matrix/sdk/crypto-bootstrap.test.ts b/extensions/matrix/src/matrix/sdk/crypto-bootstrap.test.ts index accacfb7ecc..cd637b6fbeb 100644 --- a/extensions/matrix/src/matrix/sdk/crypto-bootstrap.test.ts +++ b/extensions/matrix/src/matrix/sdk/crypto-bootstrap.test.ts @@ -90,6 +90,35 @@ function expectSecretStorageRepairRetry( expect(bootstrapCrossSigning).toHaveBeenCalledTimes(2); } +function createForcedResetHarness(bootstrapCrossSigning: ReturnType) { + return createBootstrapperHarness({ + bootstrapCrossSigning, + isCrossSigningReady: vi.fn(async () => true), + userHasCrossSigningKeys: vi.fn(async () => true), + getDeviceVerificationStatus: vi.fn(async () => createVerifiedDeviceStatus()), + }); +} + +function expectForcedResetCrossSigningCalls( + bootstrapCrossSigning: ReturnType, + params: { setupNewCall: number; totalCalls: number }, +) { + expect(bootstrapCrossSigning).toHaveBeenCalledTimes(params.totalCalls); + expect(bootstrapCrossSigning).toHaveBeenNthCalledWith( + params.setupNewCall, + expect.objectContaining({ + setupNewCrossSigning: true, + authUploadDeviceSigningKeys: expect.any(Function), + }), + ); + expect(bootstrapCrossSigning).toHaveBeenNthCalledWith( + params.totalCalls, + expect.objectContaining({ + authUploadDeviceSigningKeys: expect.any(Function), + }), + ); +} + async function bootstrapWithVerificationRequestListener(overrides?: { deps?: Partial>; crypto?: Partial; @@ -345,12 +374,7 @@ describe("MatrixCryptoBootstrapper", () => { .fn<() => Promise>() .mockRejectedValueOnce(new Error("getSecretStorageKey callback returned falsey")) .mockResolvedValueOnce(undefined); - const { deps, crypto, bootstrapper } = createBootstrapperHarness({ - bootstrapCrossSigning, - isCrossSigningReady: vi.fn(async () => true), - userHasCrossSigningKeys: vi.fn(async () => true), - getDeviceVerificationStatus: vi.fn(async () => createVerifiedDeviceStatus()), - }); + const { deps, crypto, bootstrapper } = createForcedResetHarness(bootstrapCrossSigning); await bootstrapper.bootstrap(crypto, { strict: true, @@ -365,30 +389,15 @@ describe("MatrixCryptoBootstrapper", () => { forceNewSecretStorage: true, }, ); - expect(bootstrapCrossSigning).toHaveBeenCalledTimes(3); - expect(bootstrapCrossSigning).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ - setupNewCrossSigning: true, - authUploadDeviceSigningKeys: expect.any(Function), - }), - ); - expect(bootstrapCrossSigning).toHaveBeenNthCalledWith( - 3, - expect.objectContaining({ - authUploadDeviceSigningKeys: expect.any(Function), - }), - ); + expectForcedResetCrossSigningCalls(bootstrapCrossSigning, { + setupNewCall: 2, + totalCalls: 3, + }); }); it("re-exports cross-signing keys after forced reset creates secret storage", async () => { const bootstrapCrossSigning = vi.fn(async () => {}); - const { deps, crypto, bootstrapper } = createBootstrapperHarness({ - bootstrapCrossSigning, - isCrossSigningReady: vi.fn(async () => true), - userHasCrossSigningKeys: vi.fn(async () => true), - getDeviceVerificationStatus: vi.fn(async () => createVerifiedDeviceStatus()), - }); + const { deps, crypto, bootstrapper } = createForcedResetHarness(bootstrapCrossSigning); await bootstrapper.bootstrap(crypto, { strict: true, @@ -402,20 +411,10 @@ describe("MatrixCryptoBootstrapper", () => { allowSecretStorageRecreateWithoutRecoveryKey: true, }, ); - expect(bootstrapCrossSigning).toHaveBeenCalledTimes(2); - expect(bootstrapCrossSigning).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ - setupNewCrossSigning: true, - authUploadDeviceSigningKeys: expect.any(Function), - }), - ); - expect(bootstrapCrossSigning).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ - authUploadDeviceSigningKeys: expect.any(Function), - }), - ); + expectForcedResetCrossSigningCalls(bootstrapCrossSigning, { + setupNewCall: 1, + totalCalls: 2, + }); }); it("fails in strict mode when cross-signing keys are still unpublished", async () => {