96 lines
2.9 KiB
TypeScript
96 lines
2.9 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import { Fa, Faktura, FP } from '../../types/fa1.types';
|
|
import { generatePodsumowanieStawekPodatkuVat, getSummaryTaxRate } from './PodsumowanieStawekPodatkuVat';
|
|
|
|
vi.mock('../../../shared/PDF-functions', () => ({
|
|
createHeader: vi.fn((label) => [{ text: `HEADER:${label}` }]),
|
|
createSection: vi.fn((input) => input),
|
|
formatText: vi.fn((text, style) => ({ text, style })),
|
|
getValue: vi.fn((val) =>
|
|
val && val._text ? (typeof val._text === 'string' ? val._text : val._text.toString()) : ''
|
|
),
|
|
hasValue: vi.fn((val) => !!(val && val._text)),
|
|
getNumberRounded: vi.fn((val) => (typeof val === 'number' ? val : parseFloat(val?._text ?? '0') || 0)),
|
|
}));
|
|
|
|
describe('generatePodsumowanieStawekPodatkuVat', () => {
|
|
beforeEach(() => vi.clearAllMocks());
|
|
|
|
it('returns empty array if no relevant Fa data', () => {
|
|
const faktura: Faktura = { Fa: {} as Fa };
|
|
|
|
expect(generatePodsumowanieStawekPodatkuVat(faktura)).toEqual([]);
|
|
});
|
|
|
|
it('creates table with header and data rows', () => {
|
|
const fa: Fa = {
|
|
P_13_1: { _text: '100' },
|
|
P_14_1: { _text: '23' },
|
|
P_14_1W: { _text: '23' },
|
|
};
|
|
const faktura: Faktura = { Fa: fa };
|
|
|
|
const result: any = generatePodsumowanieStawekPodatkuVat(faktura);
|
|
|
|
expect(result.some((r: any) => r.table && r.table.body)).toBeTruthy();
|
|
expect(result[0].text).toContain('Podsumowanie stawek podatku'); // header present
|
|
});
|
|
});
|
|
|
|
describe('getSummaryTaxRate', () => {
|
|
beforeEach(() => vi.clearAllMocks());
|
|
|
|
it('returns empty summarization if no values', () => {
|
|
const fa: Fa = {};
|
|
|
|
expect(getSummaryTaxRate(fa)).toEqual([]);
|
|
});
|
|
|
|
it('returns correct summary entries for each tax rate', () => {
|
|
const floatText = (num: number): FP => ({ _text: num.toString() });
|
|
|
|
const fa: Fa = {
|
|
P_13_1: floatText(100),
|
|
P_14_1: floatText(23),
|
|
P_14_1W: floatText(23),
|
|
P_13_2: floatText(200),
|
|
P_14_2: floatText(16),
|
|
P_14_2W: floatText(16),
|
|
P_13_3: floatText(300),
|
|
P_14_3: floatText(15),
|
|
P_14_3W: floatText(15),
|
|
P_13_4: floatText(400),
|
|
P_14_4: floatText(12),
|
|
P_14_4W: floatText(12),
|
|
P_13_5: floatText(500),
|
|
P_14_5: floatText(0),
|
|
P_13_7: floatText(600),
|
|
};
|
|
|
|
const summary = getSummaryTaxRate(fa);
|
|
|
|
expect(summary.length).toBe(6);
|
|
expect(summary[0]).toMatchObject({
|
|
no: 1,
|
|
taxRateString: '23% lub 22%',
|
|
net: '100.00',
|
|
tax: '23.00',
|
|
taxPLN: '23.00',
|
|
gross: '123.00',
|
|
});
|
|
expect(summary[1].taxRateString).toBe('8% lub 7%');
|
|
expect(summary[4].taxRateString).toBe('');
|
|
expect(summary[5].taxRateString).toBe('zwolnione z opodatkowania');
|
|
});
|
|
|
|
it('includes only tax rates with non-zero values', () => {
|
|
const fa: Fa = {
|
|
P_13_1: { _text: '0' },
|
|
P_14_1: { _text: '0' },
|
|
P_14_1W: { _text: '0' },
|
|
};
|
|
|
|
expect(getSummaryTaxRate(fa)).toHaveLength(0);
|
|
});
|
|
});
|