joerglohrerde/publish/tests/blossom_test.ts

84 lines
2.5 KiB
TypeScript

import { assertEquals } from '@std/assert'
import { type BlossomClient, uploadBlob } from '../src/core/blossom.ts'
import type { Signer } from '../src/core/signer.ts'
import type { UnsignedEvent } from '../src/core/event.ts'
import type { SignedEvent } from '../src/core/relays.ts'
function fakeSigner(): Signer {
return {
getPublicKey: () => Promise.resolve('p'),
signEvent: (ev: UnsignedEvent) =>
Promise.resolve({ ...ev, id: 'id', sig: 'sig', pubkey: 'p' } as SignedEvent),
}
}
Deno.test('uploadBlob: pusht zu allen servern, gibt erste url zurück', async () => {
const data = new Uint8Array([1, 2, 3])
const client: BlossomClient = {
fetch: (url, _init) => {
return Promise.resolve(
new Response(JSON.stringify({ url: url + '/hash.png', sha256: 'hash' }), {
status: 200,
headers: { 'content-type': 'application/json' },
}),
)
},
}
const result = await uploadBlob({
data,
fileName: 'x.png',
mimeType: 'image/png',
servers: ['https://a.example', 'https://b.example'],
signer: fakeSigner(),
client,
})
assertEquals(result.ok.length, 2)
assertEquals(result.primaryUrl, 'https://a.example/upload/hash.png')
})
Deno.test('uploadBlob: akzeptiert wenn mindestens ein server ok', async () => {
const data = new Uint8Array([1])
const client: BlossomClient = {
fetch: (url) => {
if (url.startsWith('https://fail.example')) {
return Promise.resolve(new Response('nope', { status: 500 }))
}
return Promise.resolve(
new Response(JSON.stringify({ url: url + '/h.png', sha256: 'h' }), { status: 200 }),
)
},
}
const result = await uploadBlob({
data,
fileName: 'x.png',
mimeType: 'image/png',
servers: ['https://fail.example', 'https://ok.example'],
signer: fakeSigner(),
client,
})
assertEquals(result.ok, ['https://ok.example'])
assertEquals(result.failed, ['https://fail.example'])
})
Deno.test('uploadBlob: wirft wenn alle server ablehnen', async () => {
const data = new Uint8Array([1])
const client: BlossomClient = {
fetch: () => Promise.resolve(new Response('err', { status: 500 })),
}
let threw = false
try {
await uploadBlob({
data,
fileName: 'x.png',
mimeType: 'image/png',
servers: ['https://a.example'],
signer: fakeSigner(),
client,
})
} catch (err) {
threw = true
assertEquals(String(err).includes('all blossom servers failed'), true)
}
assertEquals(threw, true)
})