From 2eebf890b5b1cfbf5cb7d1395ed921897d0417fd Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 5 Dec 2023 18:32:49 +0100 Subject: [PATCH] [PM-4273] Add tests for TotpService (#7058) Adds tests for the TOTP service in preparation for migrating it to the SDK. --- .../src/vault/services/totp.service.spec.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 libs/common/src/vault/services/totp.service.spec.ts diff --git a/libs/common/src/vault/services/totp.service.spec.ts b/libs/common/src/vault/services/totp.service.spec.ts new file mode 100644 index 0000000000..71e3ce80b1 --- /dev/null +++ b/libs/common/src/vault/services/totp.service.spec.ts @@ -0,0 +1,63 @@ +import { mock } from "jest-mock-extended"; + +import { LogService } from "../../platform/abstractions/log.service"; +import { WebCryptoFunctionService } from "../../platform/services/web-crypto-function.service"; + +import { TotpService } from "./totp.service"; + +describe("TotpService", () => { + let totpService: TotpService; + + const logService = mock(); + + beforeEach(() => { + totpService = new TotpService(new WebCryptoFunctionService(global), logService); + + // TOTP is time-based, so we need to mock the current time + jest.useFakeTimers({ + now: new Date("2023-01-01T00:00:00.000Z"), + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); + }); + + it("should return null if key is null", async () => { + const result = await totpService.getCode(null); + expect(result).toBeNull(); + }); + + it("should return a code if key is not null", async () => { + const result = await totpService.getCode("WQIQ25BRKZYCJVYP"); + expect(result).toBe("194506"); + }); + + it("should handle otpauth keys", async () => { + const key = "otpauth://totp/test-account?secret=WQIQ25BRKZYCJVYP"; + const result = await totpService.getCode(key); + expect(result).toBe("194506"); + + const period = totpService.getTimeInterval(key); + expect(period).toBe(30); + }); + + it("should handle otpauth different period", async () => { + const key = "otpauth://totp/test-account?secret=WQIQ25BRKZYCJVYP&period=60"; + const result = await totpService.getCode(key); + expect(result).toBe("730364"); + + const period = totpService.getTimeInterval(key); + expect(period).toBe(60); + }); + + it("should handle steam keys", async () => { + const key = "steam://HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ"; + const result = await totpService.getCode(key); + expect(result).toBe("7W6CJ"); + + const period = totpService.getTimeInterval(key); + expect(period).toBe(30); + }); +});