@accounter/server
Version:
Accounter GraphQL server
47 lines • 2.38 kB
JavaScript
import { describe, expect, it } from 'vitest';
import { isSupplementalFeeTransaction } from '../fee-transactions.js';
import { LedgerError } from '../utils.helper.js';
const GENERAL_SECURITIES_BUSINESS_ID = 'general-securities';
const SECURITY_BUSINESS_ID = 'security-aapl';
const SWIFT_BUSINESS_ID = 'swift';
/**
* Only the fields the classification reads. Security businesses join `internalWalletsIds`
* in AdminContextProvider — see admin-context-security-businesses.integration.test.ts.
*/
const financialAccounts = {
internalWalletsIds: [GENERAL_SECURITIES_BUSINESS_ID, SECURITY_BUSINESS_ID],
swiftBusinessId: SWIFT_BUSINESS_ID,
};
const feeTransaction = (businessId) => ({
id: 't1',
is_fee: true,
business_id: businessId,
source_reference: 'foreign_securities',
});
describe('isSupplementalFeeTransaction', () => {
it('classifies a fee against the general foreign-securities business as supplemental', () => {
expect(isSupplementalFeeTransaction(feeTransaction(GENERAL_SECURITIES_BUSINESS_ID), financialAccounts)).toBe(true);
});
it('classifies a fee against a per-security business as supplemental too', () => {
// The counterparty of a securities movement is now the security itself; the fee side of
// that charge must keep classifying the same way, or its ledger entry flips direction.
expect(isSupplementalFeeTransaction(feeTransaction(SECURITY_BUSINESS_ID), financialAccounts)).toBe(true);
});
it('keeps a Swift fee fundamental', () => {
expect(isSupplementalFeeTransaction(feeTransaction(SWIFT_BUSINESS_ID), financialAccounts)).toBe(false);
});
it('is not a fee at all when the transaction is a main one', () => {
const mainTransaction = {
...feeTransaction(SECURITY_BUSINESS_ID),
is_fee: false,
};
expect(isSupplementalFeeTransaction(mainTransaction, financialAccounts)).toBe(false);
});
it('refuses to guess for an unknown business', () => {
expect(() => isSupplementalFeeTransaction(feeTransaction('some-supplier'), financialAccounts)).toThrow(LedgerError);
});
it('refuses to guess without a counterparty', () => {
expect(() => isSupplementalFeeTransaction(feeTransaction(null), financialAccounts)).toThrow(LedgerError);
});
});
//# sourceMappingURL=fee-transactions.test.js.map