Something went wrong. Try again.
Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152import { describe, expect, test } from 'bun:test'import { parsePreviewHook, previewHookRecord, previewHookRkey, previewRows, toTangledRepos } from './previews'import { validateWebhookCreateInput } from './webhook-policy'
const BOT = 'https://preview-bot.wisp.place'const DID = 'did:plc:3rwz3xfw2crswgifqgc3g7zh'const REPO_DID = 'did:plc:kya7uhnwkpq7zfngkebpxl6i'
describe('toTangledRepos', () => { test('names a repo by its record key when the record has no name', () => { const repos = toTangledRepos([ { uri: `at://${DID}/sh.tangled.repo/wisp-preview-test`, value: { spindle: 'spindle.tangled.sh', repoDid: REPO_DID, knot: 'knot1.tangled.sh' }, }, { uri: `at://${DID}/sh.tangled.repo/3mlfedz5snx22`, value: { name: 'sister-radio', knot: 'knot1.tangled.sh', source: 'did:plc:ahjoatghq3cdpizm3lrf5k27' }, }, ]) expect(repos).toEqual([ { rkey: 'wisp-preview-test', name: 'wisp-preview-test', spindle: 'spindle.tangled.sh', repoDid: REPO_DID, knot: 'knot1.tangled.sh', fork: false, }, { rkey: '3mlfedz5snx22', name: 'sister-radio', spindle: undefined, repoDid: undefined, knot: 'knot1.tangled.sh', fork: true, }, ]) })
test('drops records it cannot read and spindles that are not plain hostnames', () => { const repos = toTangledRepos([ null, { uri: 5, value: {} }, { uri: `at://${DID}/sh.tangled.repo/a`, value: { spindle: 'https://evil.example/x', repoDid: REPO_DID } }, ]) expect(repos).toEqual([ { rkey: 'a', name: 'a', spindle: undefined, repoDid: REPO_DID, knot: undefined, fork: false }, ]) })})
describe('preview hook records', () => { test("watch the owner's site records and wake the bot for one repo and claim", () => { const record = previewHookRecord(BOT, DID, 'wisp-preview-test', 'null') expect(record).toEqual({ scopeAturi: `at://${DID}/place.wisp.fs`, url: `${BOT}/v1/hook?repo=wisp-preview-test&claim=null`, events: ['create', 'update'], enabled: true, }) expect(previewHookRkey('wisp-preview-test')).toBe('preview-wisp-preview-test') expect(validateWebhookCreateInput(record, { allowLoopbackDev: false }).ok).toBe(true) })
test('are recognised by their bot url and nothing else', () => { const url = `${BOT}/v1/hook?repo=blog&claim=alice` expect(parsePreviewHook(BOT, 'preview-blog', { url })).toEqual({ rkey: 'preview-blog', repo: 'blog', claim: 'alice', owner: null, }) expect(parsePreviewHook(BOT, 'preview-blog', { url: `${url}&owner=${REPO_DID}` })?.owner).toBe(REPO_DID) expect(parsePreviewHook(BOT, 'x', { url: 'https://example.com/v1/hook?repo=blog&claim=alice' })).toBeNull() expect(parsePreviewHook(BOT, 'x', { url: `${BOT}/v1/hook?repo=blog` })).toBeNull() expect(parsePreviewHook(BOT, 'x', { url: `${BOT}/v1/hook?repo=blog&claim=Not%20A%20Claim` })).toBeNull() expect(parsePreviewHook(BOT, 'x', {})).toBeNull() })})
describe('previewRows', () => { const repos = toTangledRepos([ { uri: `at://${DID}/sh.tangled.repo/blog`, value: { spindle: 'spindle.tangled.sh', repoDid: REPO_DID } }, { uri: `at://${DID}/sh.tangled.repo/notes`, value: { repoDid: REPO_DID } }, { uri: `at://${DID}/sh.tangled.repo/old`, value: { spindle: 'spindle.tangled.sh' } }, ])
test('marks enabled repos with their claim and says why the others cannot preview', () => { const rows = previewRows(repos, [{ rkey: 'preview-blog', repo: 'blog', claim: 'alice', owner: null }]) expect(rows).toEqual([ { rkey: 'blog', name: 'blog', spindle: 'spindle.tangled.sh', repoDid: REPO_DID, knot: undefined, fork: false, preview: { claim: 'alice', hookRkey: 'preview-blog' }, blocked: null, }, { rkey: 'old', name: 'old', spindle: 'spindle.tangled.sh', repoDid: undefined, knot: undefined, fork: false, preview: null, blocked: 'no-repo-did', }, { rkey: 'notes', name: 'notes', spindle: undefined, repoDid: REPO_DID, knot: undefined, fork: false, preview: null, blocked: 'no-spindle', }, ]) })
test("does not count a collaborator hook for someone else's repo of the same name", () => { const rows = previewRows(repos, [{ rkey: 'preview-blog', repo: 'blog', claim: 'alice', owner: REPO_DID }]) expect(rows[0]?.preview).toBeNull() })
test('lists repos with a spindle first and forks last, keeping record order within each', () => { const source = 'did:plc:ahjoatghq3cdpizm3lrf5k27' const mixed = toTangledRepos( [ ['fork-a', { source }], ['plain-a', {}], ['ci-a', { spindle: 'spindle.tangled.sh' }], ['fork-ci', { spindle: 'spindle.tangled.sh', source }], ['plain-b', {}], ['fork-b', { source: `at://${source}/sh.tangled.repo/3mdppefpttk22` }], ].map(([rkey, value]) => ({ uri: `at://${DID}/sh.tangled.repo/${rkey}`, value })), ) expect(previewRows(mixed, []).map((row) => row.name)).toEqual([ 'ci-a', 'fork-ci', 'plain-a', 'plain-b', 'fork-a', 'fork-b', ]) })})