Sifa professional network API (Fastify, AT Protocol, Jetstream) sifa.id/
at main 57 lines 1.9 kB view raw
1import { describe, expect, it } from 'vitest'; 2 3import { 4 FEATURED_TEMPLATES, 5 pickTemplate, 6 renderTemplate, 7} from '../../src/lib/featured-templates.js'; 8 9describe('FEATURED_TEMPLATES', () => { 10 it('has at least 30 unique templates', () => { 11 const unique = new Set(FEATURED_TEMPLATES); 12 expect(unique.size).toBeGreaterThanOrEqual(30); 13 }); 14 15 it('every template contains {displayName}', () => { 16 for (const template of FEATURED_TEMPLATES) { 17 expect(template).toContain('{displayName}'); 18 } 19 }); 20}); 21 22describe('pickTemplate', () => { 23 it('is deterministic — same date returns same index', () => { 24 const idx1 = pickTemplate('2026-03-19'); 25 const idx2 = pickTemplate('2026-03-19'); 26 expect(idx1).toBe(idx2); 27 }); 28 29 it('returns a valid index', () => { 30 const idx = pickTemplate('2026-03-19'); 31 expect(idx).toBeGreaterThanOrEqual(0); 32 expect(idx).toBeLessThan(FEATURED_TEMPLATES.length); 33 }); 34 35 it('varies across different dates', () => { 36 const dates = ['2026-01-01', '2026-01-02', '2026-06-15', '2026-12-31', '2027-03-19']; 37 const indices = dates.map((d) => pickTemplate(d)); 38 const unique = new Set(indices); 39 // With 5 dates and 35 templates, we expect at least 2 different indices 40 expect(unique.size).toBeGreaterThanOrEqual(2); 41 }); 42}); 43 44describe('renderTemplate', () => { 45 it('replaces {displayName} correctly', () => { 46 const template = 'Meet {displayName} on Sifa'; 47 const result = renderTemplate(template, 'Alice Johnson', 'alice.bsky.social'); 48 expect(result).toBe('Meet Alice Johnson on Sifa'); 49 }); 50 51 it('works with actual templates from the array', () => { 52 const template = FEATURED_TEMPLATES[0] ?? ''; 53 const result = renderTemplate(template, 'Bob Smith', 'bob.bsky.social'); 54 expect(result).toContain('Bob Smith'); 55 expect(result).not.toContain('{displayName}'); 56 }); 57});