import { describe, it, expect } from 'vitest' import { generatePain001 } from '../payment/pain001-generator' describe('generatePain001', () => { const company = { name: 'Test AB', orgNumber: '556123-4567', iban: 'SE1234567890123456789012', bic: 'ESSESESS', } const employees = [ { name: 'Anna Andersson', clearingNumber: '5678', bankAccountNumber: '1234567890', netSalary: 28000 }, { name: 'Erik Eriksson', clearingNumber: '1234', bankAccountNumber: '9876543210', netSalary: 32000 }, ] const options = { messageId: 'GNUBOK-5561234567-2026-04', paymentDate: '2026-04-25', periodLabel: '2026-04', } it('generates valid XML structure', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('') expect(xml).toContain('pain.001.001.03') expect(xml).toContain('') expect(xml).toContain('') }) it('includes group header with correct counts', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain(`2`) expect(xml).toContain(`60000.00`) }) it('includes company details', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('Test AB') expect(xml).toContain('SE1234567890123456789012') expect(xml).toContain('ESSESESS') }) it('includes SALA category purpose for salary', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('SALA') }) it('includes per-employee credit transfers', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('Anna Andersson') expect(xml).toContain('28000.00') expect(xml).toContain('Erik Eriksson') expect(xml).toContain('32000.00') }) it('includes bank account details per employee', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('56781234567890') // Anna's clearing + account expect(xml).toContain('12349876543210') // Erik's clearing + account }) it('includes remittance info with period label', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('Lon 2026-04') }) it('includes payment date', () => { const xml = generatePain001(company, employees, options) expect(xml).toContain('2026-04-25') }) it('escapes XML special characters', () => { const specialCompany = { ...company, name: 'Test & Sons ' } const xml = generatePain001(specialCompany, employees, options) expect(xml).toContain('Test & Sons <AB>') expect(xml).not.toContain('Test & Sons ') }) it('formats amounts with 2 decimal places', () => { const empWithDecimals = [ { name: 'Test', clearingNumber: '1234', bankAccountNumber: '5678', netSalary: 28333.33 }, ] const xml = generatePain001(company, empWithDecimals, options) expect(xml).toContain('28333.33') }) })