UNPKG

@accounter/server

Version:
77 lines (58 loc) 2.54 kB
import { describe, expect, it } from 'vitest'; import { makeUUID } from '../helpers/deterministic-uuid.js'; import { UUID5_REGEX } from '../../shared/constants.js'; describe('deterministic-uuid', () => { describe('makeUUID', () => { it('generates same UUID for same inputs', () => { const uuid1 = makeUUID('business', 'acme-consulting-llc'); const uuid2 = makeUUID('business', 'acme-consulting-llc'); expect(uuid1).toBe(uuid2); expect(uuid1).toMatch(UUID5_REGEX); }); it('generates different UUIDs for different names', () => { const uuid1 = makeUUID('business', 'acme-llc'); const uuid2 = makeUUID('business', 'acme-corp'); expect(uuid1).not.toBe(uuid2); }); it('generates different UUIDs for different namespaces', () => { const businessUUID = makeUUID('business', 'acme'); const chargeUUID = makeUUID('charge', 'acme'); expect(businessUUID).not.toBe(chargeUUID); }); it('includes namespace in composite key', () => { // Same name, different namespace types const bizUUID = makeUUID('business', 'test-entity'); const transactionUUID = makeUUID('transaction', 'test-entity'); const documentUUID = makeUUID('document', 'test-entity'); expect(bizUUID).not.toBe(transactionUUID); expect(bizUUID).not.toBe(documentUUID); expect(transactionUUID).not.toBe(documentUUID); }); it('generates valid UUID v5 format', () => { const uuid = makeUUID('charge', 'monthly-invoice-2024-11'); // UUID v5 format: xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx // where y is one of [8, 9, a, b] expect(uuid).toMatch(UUID5_REGEX); }); it('handles kebab-case names correctly', () => { const uuid1 = makeUUID('business', 'us-supplier-acme-llc'); const uuid2 = makeUUID('business', 'us-supplier-acme-llc'); expect(uuid1).toBe(uuid2); }); it('handles numeric components in names', () => { const uuid1 = makeUUID('charge', 'invoice-2024-11-15'); const uuid2 = makeUUID('charge', 'invoice-2024-11-15'); expect(uuid1).toBe(uuid2); }); it('is case-sensitive for names', () => { const uuid1 = makeUUID('business', 'acme-llc'); const uuid2 = makeUUID('business', 'ACME-LLC'); expect(uuid1).not.toBe(uuid2); }); it('is case-sensitive for namespaces', () => { const uuid1 = makeUUID('business', 'acme'); const uuid2 = makeUUID('Business', 'acme'); expect(uuid1).not.toBe(uuid2); }); }); });