diff --git a/nip57.test.ts b/nip57.test.ts index 93c79c6..87bb24e 100644 --- a/nip57.test.ts +++ b/nip57.test.ts @@ -1,112 +1,7 @@ -import { describe, test, expect, mock } from 'bun:test' +import { describe, test, expect } from 'bun:test' import { finalizeEvent } from './pure.ts' import { getPublicKey, generateSecretKey } from './pure.ts' -import { - getSatoshisAmountFromBolt11, - getZapEndpoint, - makeZapReceipt, - makeZapRequest, - useFetchImplementation, - validateZapRequest, -} from './nip57.ts' -import { buildEvent } from './test-helpers.ts' - -describe('getZapEndpoint', () => { - test('returns null if neither lud06 nor lud16 is present', async () => { - const metadata = buildEvent({ kind: 0, content: '{}' }) - const result = await getZapEndpoint(metadata) - - expect(result).toBeNull() - }) - - test('returns null if fetch fails', async () => { - const fetchImplementation = mock(() => Promise.reject(new Error())) - useFetchImplementation(fetchImplementation) - - const metadata = buildEvent({ kind: 0, content: '{"lud16": "name@domain"}' }) - const result = await getZapEndpoint(metadata) - - expect(result).toBeNull() - expect(fetchImplementation).toHaveBeenCalledWith('https://domain/.well-known/lnurlp/name') - }) - - test('returns null if the response does not allow Nostr payments', async () => { - const fetchImplementation = mock(() => Promise.resolve({ json: () => ({ allowsNostr: false }) })) - useFetchImplementation(fetchImplementation) - - const metadata = buildEvent({ kind: 0, content: '{"lud16": "name@domain"}' }) - const result = await getZapEndpoint(metadata) - - expect(result).toBeNull() - expect(fetchImplementation).toHaveBeenCalledWith('https://domain/.well-known/lnurlp/name') - }) - - test('returns the callback URL if the response allows Nostr payments', async () => { - const fetchImplementation = mock(() => - Promise.resolve({ - json: () => ({ - allowsNostr: true, - nostrPubkey: 'pubkey', - callback: 'callback', - }), - }), - ) - useFetchImplementation(fetchImplementation) - - const metadata = buildEvent({ kind: 0, content: '{"lud16": "name@domain"}' }) - const result = await getZapEndpoint(metadata) - - expect(result).toBe('callback') - expect(fetchImplementation).toHaveBeenCalledWith('https://domain/.well-known/lnurlp/name') - }) -}) - -describe('makeZapRequest', () => { - test('throws an error if amount is not given', () => { - expect(() => - // @ts-expect-error - makeZapRequest({ - profile: 'profile', - event: null, - relays: [], - comment: '', - }), - ).toThrow() - }) - - test('throws an error if profile is not given', () => { - expect(() => - // @ts-expect-error - makeZapRequest({ - event: null, - amount: 100, - relays: [], - comment: '', - }), - ).toThrow() - }) - - test('returns a valid Zap request', () => { - const result = makeZapRequest({ - profile: 'profile', - event: 'event', - amount: 100, - relays: ['relay1', 'relay2'], - comment: 'comment', - }) - expect(result.kind).toBe(9734) - expect(result.created_at).toBeCloseTo(Date.now() / 1000, 0) - expect(result.content).toBe('comment') - expect(result.tags).toEqual( - expect.arrayContaining([ - ['p', 'profile'], - ['amount', '100'], - ['relays', 'relay1', 'relay2'], - ['e', 'event'], - ]), - ) - }) -}) +import { getSatoshisAmountFromBolt11, makeZapReceipt, validateZapRequest } from './nip57.ts' describe('validateZapRequest', () => { test('returns an error message for invalid JSON', () => {