import { expect, test } from 'bun:test'; import { checkReferenceReleases, type ReleaseObservation, type ReleaseSource } from '../src/lib/server/reference-release'; test('source metadata check uses only HEAD and detects independent changes with opaque ETags', async () => { const previous: Partial> = {}; let count = 0; const fetcher = (async (_url: unknown, init?: RequestInit) => { expect(init?.method).toBe('HEAD'); expect(init?.redirect).toBe('error'); count++; return new Response(null, { headers: { etag: '"opaque-not-a-checksum"', 'content-length': '1000', 'last-modified': 'Fri, 18 Sep 2026 12:00:00 GMT' } }); }) as typeof fetch; const first = await checkReferenceReleases({ fetch: fetcher }); for (const result of first) { expect(result.status).toBe('checked'); if (result.status === 'checked') { expect(result.observation.integrity).toBe('not_downloaded'); expect(result.observation.changed).toBe(true); previous[result.source] = result.observation; } } const second = await checkReferenceReleases({ fetch: fetcher, previous }); expect(count).toBe(4); expect(second.every(r => r.status === 'checked' && !r.observation.changed)).toBe(true); }); test('one metadata failure does not hide the other source, and 304 requires known metadata', async () => { const results = await checkReferenceReleases({ fetch: (async (url: unknown) => String(url).includes('hoboleaks') ? new Response(null, { status: 503 }) : new Response(null, { headers: { etag: 'ref-v2' } })) as typeof fetch }); expect(results.map(r => r.status)).toEqual(['checked', 'failed']); const unknown304 = await checkReferenceReleases({ fetch: (async (_url: unknown) => new Response(null, { status: 304 })) as typeof fetch }); expect(unknown304.every(r => r.status === 'failed')).toBe(true); });