import { ManualPairingCodeCodec } from "@matter/main/types"; import { describe, expect, it } from "vitest"; import { parsePairingCode } from "../src/commissioning.js"; describe("parsePairingCode", () => { const validCode = ManualPairingCodeCodec.encode({ discriminator: 3840, passcode: 20202021 }); it("parses a valid 11-digit manual code", () => { const parsed = parsePairingCode(validCode); expect(parsed.passcode).toBe(20202021); expect(parsed.shortDiscriminator).toBe(3840 >> 8); }); it("accepts hyphens and whitespace", () => { const withHyphens = `${validCode.slice(0, 4)}-${validCode.slice(4, 7)}-${validCode.slice(7)}`; expect(parsePairingCode(` ${withHyphens} `).passcode).toBe(20202021); }); it("rejects empty input", () => { expect(() => parsePairingCode("")).toThrow(/empty/); expect(() => parsePairingCode(" ")).toThrow(/empty/); }); it("rejects codes of the wrong length", () => { expect(() => parsePairingCode("12345")).toThrow(/11 or 21 digits/); expect(() => parsePairingCode("123456789012")).toThrow(/11 or 21 digits/); }); it("rejects codes with an invalid checksum", () => { const corrupted = validCode.slice(0, -1) + ((Number(validCode.at(-1)) + 1) % 10).toString(); expect(() => parsePairingCode(corrupted)).toThrow(); }); });