feat: refs #7936 enhance getTotal fn & add unit tests
gitea/salix-front/pipeline/pr-dev This commit looks good
Details
gitea/salix-front/pipeline/pr-dev This commit looks good
Details
This commit is contained in:
parent
928affc127
commit
d916b47f4c
|
@ -1,10 +1,11 @@
|
|||
import { toCurrency } from 'src/filters';
|
||||
|
||||
export function getTotal(rows, key, opts = {}) {
|
||||
const { currency, cb, decimalPlaces } = opts;
|
||||
const { currency, cb, decimalPlaces, int } = opts;
|
||||
const total = rows.reduce((acc, row) => acc + +(cb ? cb(row) : row[key] || 0), 0);
|
||||
const decimals = int ? 0 : decimalPlaces ?? 2;
|
||||
|
||||
return currency
|
||||
? toCurrency(total, currency == 'default' ? undefined : currency)
|
||||
: parseFloat(total).toFixed(decimalPlaces ?? 2);
|
||||
: parseFloat(total).toFixed(decimals);
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@ const formatOpt = (row, { model, options }, prop) => {
|
|||
{{ getTotal(rows, 'net') }}
|
||||
</QTd>
|
||||
<QTd>
|
||||
{{ getTotal(rows, 'stems') }}
|
||||
{{ getTotal(rows, 'stems', { int: true }) }}
|
||||
</QTd>
|
||||
<QTd />
|
||||
</QTr>
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
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', () => {
|
||||
const total = getTotal(rows, 'amount', { int: true });
|
||||
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');
|
||||
});
|
||||
});
|
|
@ -1,34 +0,0 @@
|
|||
import { vi, describe, expect, it, beforeAll } from 'vitest';
|
||||
import { createWrapper, axios } from 'app/test/vitest/helper';
|
||||
import InvoiceInIntrastat from 'src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue';
|
||||
|
||||
describe('InvoiceInIntrastat', () => {
|
||||
let vm;
|
||||
|
||||
beforeAll(() => {
|
||||
vm = createWrapper(InvoiceInIntrastat, {
|
||||
global: {
|
||||
stubs: ['vnPaginate'],
|
||||
mocks: {
|
||||
fetch: vi.fn(),
|
||||
},
|
||||
},
|
||||
}).vm;
|
||||
vi.spyOn(axios, 'get').mockResolvedValue({ data: [{}] });
|
||||
});
|
||||
|
||||
describe('getTotal()', () => {
|
||||
it('should correctly handle the sum', () => {
|
||||
const invoceInIntrastat = [
|
||||
{ amount: 10, stems: 162 },
|
||||
{ amount: 20, stems: 21 },
|
||||
];
|
||||
|
||||
const totalAmount = vm.getTotal(invoceInIntrastat, 'amount');
|
||||
const totalStems = vm.getTotal(invoceInIntrastat, 'stems');
|
||||
|
||||
expect(totalAmount).toBe(10 + 20);
|
||||
expect(totalStems).toBe(162 + 21);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,38 +0,0 @@
|
|||
import { vi, describe, expect, it, beforeAll } from 'vitest';
|
||||
import { createWrapper } from 'app/test/vitest/helper';
|
||||
import InvoiceInVat from 'src/pages/InvoiceIn/Card/InvoiceInVat.vue';
|
||||
|
||||
describe('InvoiceInVat', () => {
|
||||
let vm;
|
||||
|
||||
beforeAll(() => {
|
||||
vm = createWrapper(InvoiceInVat, {
|
||||
global: {
|
||||
stubs: [],
|
||||
mocks: {
|
||||
fetch: vi.fn(),
|
||||
},
|
||||
},
|
||||
}).vm;
|
||||
});
|
||||
|
||||
describe('taxRate()', () => {
|
||||
it('should correctly compute the tax rate', () => {
|
||||
const invoiceInTax = { taxableBase: 100, taxTypeSageFk: 1 };
|
||||
vm.sageTaxTypes = [
|
||||
{ id: 1, rate: 10 },
|
||||
{ id: 2, rate: 20 },
|
||||
];
|
||||
const result = vm.taxRate(invoiceInTax);
|
||||
expect(result).toBe((10 / 100) * 100);
|
||||
});
|
||||
|
||||
it('should return 0 if there is not tax rate', () => {
|
||||
const invoiceInTax = { taxableBase: 100, taxTypeSageFk: 1 };
|
||||
vm.sageTaxTypes = [];
|
||||
|
||||
const result = vm.taxRate(invoiceInTax);
|
||||
expect(result).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue