Files
accounted/extensions/general/push-notifications/__tests__/payload-builders.test.ts
T
Jakob Wennberg 9b3e344796 fix(notifications,mcp): carry the record's currency in amount strings (#1179)
Fixes #1171. Three currency-blind format sites:

- Invoice due/overdue push notifications rendered every total as kr;
  the scheduler query did not even select currency. Builders now take
  the invoice currency ("kr" only for SEK, ISO code otherwise).
- The receipt-matcher MCP widget hardcoded ' kr' although the tool
  handler passes each transaction's currency through.
- The duplicate-booking warning in gnubok_categorize_transaction
  interpolated "N kr" for a transaction whose currency was already
  selected; the string reaches the agent, so a mislabeled currency can
  mislead the model, not just the user.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 12:58:55 +02:00

23 lines
1.1 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import { createInvoiceOverduePayload, createInvoiceDuePayload } from '../payload-builders'
describe('invoice notification payloads', () => {
// sv-SE grouping uses a non-breaking space: build expectations via the same
// formatter instead of typing literals with a plain space.
it('labels SEK amounts with kr', () => {
const payload = createInvoiceDuePayload('1042', 'Acme AB', 12500, 'SEK', '2026-08-01', 'inv-1')
expect(payload.body).toContain(`${(12500).toLocaleString('sv-SE')} kr`)
})
it('labels non-SEK amounts with their ISO code instead of kr', () => {
const payload = createInvoiceOverduePayload('1043', 'Odin Aero GmbH', 9800, 'EUR', '2026-07-01', 'inv-2')
expect(payload.body).toContain(`${(9800).toLocaleString('sv-SE')} EUR`)
expect(payload.body).not.toContain('kr (')
})
it('falls back to kr when currency is missing on legacy rows', () => {
const payload = createInvoiceDuePayload('1044', 'Acme AB', 100, '', '2026-08-01', 'inv-3')
expect(payload.body).toContain('100 kr')
})
})