2024-12-05 09:40:50 +00:00
|
|
|
import { vi, describe, expect, it } from 'vitest';
|
|
|
|
import { getTotal } from 'src/composables/getTotal';
|
|
|
|
|
|
|
|
vi.mock('src/filters', () => ({
|
|
|
|
toCurrency: vi.fn((value, currency) => `${currency} ${value.toFixed(2)}`),
|
|
|
|
}));
|
|
|
|
|
|
|
|
describe('getTotal()', () => {
|
|
|
|
const rows = [
|
|
|
|
{ amount: 10.5, tax: 2.1 },
|
|
|
|
{ amount: 20.75, tax: 3.25 },
|
|
|
|
{ amount: 30.25, tax: 4.75 },
|
|
|
|
];
|
|
|
|
|
|
|
|
it('should calculate the total for a given key', () => {
|
|
|
|
const total = getTotal(rows, 'amount');
|
|
|
|
expect(total).toBe('61.50');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should calculate the total with a callback function', () => {
|
|
|
|
const total = getTotal(rows, null, { cb: (row) => row.amount + row.tax });
|
|
|
|
expect(total).toBe('71.60');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should format the total as currency', () => {
|
|
|
|
const total = getTotal(rows, 'amount', { currency: 'USD' });
|
|
|
|
expect(total).toBe('USD 61.50');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should format the total as currency with default currency', () => {
|
|
|
|
const total = getTotal(rows, 'amount', { currency: 'default' });
|
|
|
|
expect(total).toBe('undefined 61.50');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should calculate the total with integer formatting', () => {
|
2024-12-10 09:38:43 +00:00
|
|
|
const total = getTotal(rows, 'amount', { decimalPlaces: 0 });
|
2024-12-05 09:40:50 +00:00
|
|
|
expect(total).toBe('62');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should calculate the total with custom decimal places', () => {
|
|
|
|
const total = getTotal(rows, 'amount', { decimalPlaces: 1 });
|
|
|
|
expect(total).toBe('61.5');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should handle rows with missing keys', () => {
|
|
|
|
const rowsWithMissingKeys = [{ amount: 10.5 }, { amount: 20.75 }, {}];
|
|
|
|
const total = getTotal(rowsWithMissingKeys, 'amount');
|
|
|
|
expect(total).toBe('31.25');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should handle empty rows', () => {
|
|
|
|
const total = getTotal([], 'amount');
|
|
|
|
expect(total).toBe('0.00');
|
|
|
|
});
|
|
|
|
});
|