// apps/hq/test/settings-sharing.test.ts import { describe, it, expect } from 'vitest' import { openDb } from '../src/db' import { createClient } from '../src/repos-clients' import { createModule, setPrice } from '../src/repos-modules' import { createDraft } from '../src/repos-documents' import { mintShare } from '../src/repos-shares' async function setup() { const db = openDb(':memory:') await db.run(`INSERT INTO setting (key, value) VALUES ('company.state_code','32')`) await db.run(`INSERT INTO tax_class (class_code, rate_pct_bp, effective_from) VALUES ('GST18', 1800, '2017-07-01')`) const c = await createClient(db, 'u1', { name: 'Acme', stateCode: '32' }) const m = await createModule(db, 'u1', { code: 'POS', name: 'POS Billing' }) await setPrice(db, 'u1', { moduleId: m.id, kind: 'yearly', pricePaise: 10_000_00, effectiveFrom: '2026-04-01' }) const doc = await createDraft(db, 'u1', { docType: 'QUOTATION', clientId: c.id, lines: [{ moduleId: m.id, qty: 1, kind: 'yearly' }] }) return { db, c, m, doc } } describe('mintShare default expiry (share.default_expiry_days setting)', () => { it('no setting row: defaults to +30d', async () => { const { db, doc } = await setup() const s = await mintShare(db, 'u1', doc.id) expect(s.expiresAt).not.toBeNull() const days = (new Date(s.expiresAt!).getTime() - Date.now()) / 86_400_000 expect(days).toBeGreaterThan(29) expect(days).toBeLessThan(31) }) it("setting '7': defaults to +7d", async () => { const { db, doc } = await setup() await db.run(`INSERT INTO setting (key, value) VALUES ('share.default_expiry_days', '7')`) const s = await mintShare(db, 'u1', doc.id) expect(s.expiresAt).not.toBeNull() const days = (new Date(s.expiresAt!).getTime() - Date.now()) / 86_400_000 expect(days).toBeGreaterThan(6) expect(days).toBeLessThan(8) }) it("setting 'never': expiresAt is null", async () => { const { db, doc } = await setup() await db.run(`INSERT INTO setting (key, value) VALUES ('share.default_expiry_days', 'never')`) const s = await mintShare(db, 'u1', doc.id) expect(s.expiresAt).toBeNull() }) it('explicit opts.expiresDays always wins over the setting (including explicit null)', async () => { const { db, doc } = await setup() await db.run(`INSERT INTO setting (key, value) VALUES ('share.default_expiry_days', '7')`) const s1 = await mintShare(db, 'u1', doc.id, { expiresDays: 3 }) expect(s1.expiresAt).not.toBeNull() const days1 = (new Date(s1.expiresAt!).getTime() - Date.now()) / 86_400_000 expect(days1).toBeGreaterThan(2) expect(days1).toBeLessThan(4) const s2 = await mintShare(db, 'u1', doc.id, { expiresDays: null }) expect(s2.expiresAt).toBeNull() }) it("garbage setting 'abc': falls back to +30d", async () => { const { db, doc } = await setup() await db.run(`INSERT INTO setting (key, value) VALUES ('share.default_expiry_days', 'abc')`) const s = await mintShare(db, 'u1', doc.id) expect(s.expiresAt).not.toBeNull() const days = (new Date(s.expiresAt!).getTime() - Date.now()) / 86_400_000 expect(days).toBeGreaterThan(29) expect(days).toBeLessThan(31) }) })