import pino from 'pino'; import { describe, expect, it } from 'vitest'; import type { BaserowClient, BaserowRow } from '../../src/adapters/baserow-client.js'; import { BaserowViewsRepo } from '../../src/repos/baserow-views-repo.js'; const silentLogger = () => pino({ level: 'silent' }); class FakeClient { constructor( public views: Array< { id: number; name: string; type: string; table_id: number } & Record > = [], public gridRows: BaserowRow[] = [], ) {} listViews(_tableId: number) { return Promise.resolve(this.views); } getGridViewRows(_viewId: number, _opts: { page?: number; size?: number } = {}) { return Promise.resolve({ count: this.gridRows.length, next: null, previous: null, results: this.gridRows, }); } } describe('BaserowViewsRepo', () => { it('list mappe raw views', async () => { const fake = new FakeClient([ { id: 100, name: 'Tous', type: 'grid', table_id: 5 }, { id: 101, name: 'Kanban', type: 'kanban', table_id: 5 }, ]); const repo = new BaserowViewsRepo({ client: fake as unknown as BaserowClient, logger: silentLogger(), }); const views = await repo.list(5); expect(views).toHaveLength(2); expect(views[1]?.type).toBe('kanban'); expect(views[1]?.tableId).toBe(5); }); it('runGrid retourne les rows + meta', async () => { const fake = new FakeClient( [], [ { id: 1, order: '1.0', nom: 'A' } as BaserowRow, { id: 2, order: '2.0', nom: 'B' } as BaserowRow, ], ); const repo = new BaserowViewsRepo({ client: fake as unknown as BaserowClient, logger: silentLogger(), }); const res = await repo.runGrid(100, 5); expect(res.items).toHaveLength(2); expect(res.items[0]?.tableId).toBe(5); expect(res.items[0]?.fields.nom).toBe('A'); expect(res.meta.total).toBe(2); }); });