relay filter/appview bootstrap
at main 2.2 kB view raw
1import { describe, it, expect, mock, beforeEach } from "bun:test"; 2import { processQueue } from "../../src/services/queue"; 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.forUpdate = mockFn; 20 mockObj.skipLocked = mockFn; 21 mockObj.execute = mock(() => Promise.resolve([])); 22 mockObj.executeTakeFirst = mock(() => Promise.resolve(null)); 23 24 return mockObj; 25}; 26 27const dbMock = createChainableMock(); 28 29const mockTransactionExecute = mock((callback: (trx: any) => Promise<any>) => callback(dbMock)); 30dbMock.transaction = mock(() => ({ execute: mockTransactionExecute })); 31 32mock.module("../../src/db", () => ({ 33 db: dbMock, 34 pool: { 35 connect: mock(() => Promise.resolve({ 36 on: mock(() => {}), 37 query: mock(() => Promise.resolve()), 38 release: mock(() => {}) 39 })) 40 } 41})); 42 43const mockBroadcast = mock(() => {}); 44const mockGetClientCount = mock(() => 0); 45mock.module("../../src/services/websocket", () => ({ 46 broadcast: mockBroadcast, 47 getClientCount: mockGetClientCount 48})); 49 50describe("Queue Service", () => { 51 beforeEach(() => { 52 dbMock.execute.mockResolvedValue([]); 53 mockBroadcast.mockClear(); 54 }); 55 56 it("should process pending records", async () => { 57 const mockRecords = [{ 58 id: 1, 59 record_data: { $type: "test" }, 60 status: "pending", 61 created_at: new Date() 62 }]; 63 64 dbMock.execute 65 .mockResolvedValueOnce(mockRecords) 66 .mockResolvedValueOnce([]); 67 68 await processQueue(); 69 70 expect(mockBroadcast).toHaveBeenCalled(); 71 expect(mockBroadcast).toHaveBeenCalledWith({ 72 type: "new_records", 73 records: [mockRecords[0].record_data] 74 }); 75 }); 76 77 it("should do nothing if no records found", async () => { 78 dbMock.execute.mockResolvedValueOnce([]); 79 80 await processQueue(); 81 82 expect(mockBroadcast).not.toHaveBeenCalled(); 83 }); 84});