relay filter/appview bootstrap
at main 1.6 kB view raw
1import { describe, it, expect, mock, beforeEach } from "bun:test"; 2import { listInvitesHandler } from "../../src/api/channel"; 3 4const createChainableMock = () => { 5 const mockObj: any = {}; 6 const mockFn = mock(() => mockObj); 7 8 mockObj.selectFrom = mockFn; 9 mockObj.selectAll = mockFn; 10 mockObj.select = mockFn; 11 mockObj.where = mockFn; 12 mockObj.orderBy = mockFn; 13 mockObj.limit = mockFn; 14 mockObj.offset = mockFn; 15 mockObj.innerJoin = mockFn; 16 mockObj.leftJoin = mockFn; 17 mockObj.updateTable = mockFn; 18 mockObj.set = mockFn; 19 mockObj.execute = mock(() => Promise.resolve([])); 20 21 return mockObj; 22}; 23 24const dbMock = createChainableMock(); 25 26mock.module("../../src/db", () => ({ 27 db: dbMock 28})); 29 30describe("listInvitesHandler", () => { 31 beforeEach(() => { 32 dbMock.execute.mockResolvedValue([]); 33 dbMock.selectFrom.mockClear(); 34 }); 35 36 it("should throw if recipient is missing", async () => { 37 const ctx = { params: {} }; 38 expect(listInvitesHandler(ctx as any)).rejects.toThrow("Missing required parameter: recipient"); 39 }); 40 41 it("should return invites", async () => { 42 const mockData = [{ 43 uri: "at://...", 44 cid: "bafy...", 45 creator_did: "did:plc:...", 46 created_at: new Date(), 47 indexed_at: new Date(), 48 channel: "bafy_channel", 49 channel_uri: "at://channel..." 50 }]; 51 dbMock.execute.mockResolvedValue(mockData); 52 53 const ctx = { params: { recipient: "did:plc:123" } }; 54 const result = await listInvitesHandler(ctx as any); 55 56 expect(result.body.invites).toHaveLength(1); 57 expect(result.body.invites[0].uri).toBe("at://..."); 58 }); 59});