Files
accounted/lib/invoices/__tests__/invoice-list-query-shape.test.ts
T
d5373cd66c feat(invoices): ROT/RUT begäran status as a column and filter in the invoice list (#2434)
An invoice's begäran state (Att begära, Skapad, Uppladdad, Beviljad, Delvis
beviljad, Avslagen) was only visible one invoice at a time or inside the
payout dialog. The list now embeds the begäran behind each invoice, shows
the state in a ROT/RUT column and filters on it through a third
ContextPicker (?rotrut=), both gated on rot_rut_enabled or an invoiced
deduction. One predicate (lib/invoices/rot-rut-list-status.ts) feeds the
column, the filter and its counts. Normal states read as muted text; only
a partial approval and an avslag get a chip.

Closes #2426


Claude-Session: https://claude.ai/code/session_0179bdetHyofL6ATfQxB5wP5

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 20:56:52 +02:00

25 lines
915 B
TypeScript

import fs from 'node:fs'
import path from 'node:path'
import { describe, expect, it } from 'vitest'
const source = fs.readFileSync(
path.resolve(__dirname, '../../../app/(dashboard)/invoices/page.tsx'),
'utf8',
)
describe('invoice list query shape', () => {
it('paginates beyond the PostgREST row cap with a stable total order', () => {
expect(source).toContain('fetchAllRows<Invoice>')
expect(source).toContain(".order('invoice_date', { ascending: false })")
expect(source).toContain(".order('id', { ascending: false })")
expect(source).toContain('.range(from, to)')
expect(source).toContain('dedupeBy: (invoice) => invoice.id')
})
it('embeds the begäran behind each invoice for the ROT/RUT column and filter (#2426)', () => {
expect(source).toContain(
'rot_rut_items:rot_rut_payout_request_items(request:rot_rut_payout_requests(id, status, created_at))',
)
})
})