Skip to content

Commit

Permalink
SSK_DUSSELDORF_DUSSDEDDXXX: remove non-booked transactions from import (
Browse files Browse the repository at this point in the history
#553)

* remove non-booked transactions from import

* Add release notes

* minor fix to please the linter

* Add coderabbit suggestions

* add test file

* fix test

* add coderabbit fixes to test file

* fix mock console

* Correct consoleSpy to make linter happy

* Add mock cleanup
  • Loading branch information
DennaGherlyn authored Jan 27, 2025
1 parent 5ada00c commit 0312f51
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/app-gocardless/banks/ssk_dusseldorf_dussdeddxxx.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,31 @@ export default {
institutionIds: ['SSK_DUSSELDORF_DUSSDEDDXXX'],

normalizeTransaction(transaction, _booked) {
// If the transaction is not booked yet by the bank, don't import it.
// Reason being that the transaction doesn't have the information yet
// to make the payee and notes field be of any use. It's filled with
// a placeholder text and wouldn't be corrected on the next sync.
if (!_booked) {
console.debug(
'Skipping unbooked transaction:',
transaction.transactionId,
);
return null;
}

// Prioritize unstructured information, falling back to structured formats
let remittanceInformationUnstructured =
transaction.remittanceInformationUnstructured ??
transaction.remittanceInformationStructured ??
transaction.remittanceInformationStructuredArray?.join(' ');

if (transaction.additionalInformation)
remittanceInformationUnstructured =
(remittanceInformationUnstructured ?? '') +
' ' +
transaction.additionalInformation;
remittanceInformationUnstructured = [
remittanceInformationUnstructured,
transaction.additionalInformation,
]
.filter(Boolean)
.join(' ');

const usefulCreditorName =
transaction.ultimateCreditor ||
Expand Down
101 changes: 101 additions & 0 deletions src/app-gocardless/banks/tests/ssk_dusseldorf_dussdeddxxx.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { jest } from '@jest/globals';
import SskDusseldorfDussdeddxxx from '../ssk_dusseldorf_dussdeddxxx.js';

describe('ssk_dusseldorf_dussdeddxxx', () => {
let consoleSpy;

beforeEach(() => {
consoleSpy = jest.spyOn(console, 'debug');
});

afterEach(() => {
consoleSpy.mockRestore();
});

describe('#normalizeTransaction', () => {
const bookedTransactionOne = {
transactionId: '2024102900000000-1',
bookingDate: '2024-10-29',
valueDate: '2024-10-29',
transactionAmount: {
amount: '-99.99',
currency: 'EUR',
},
creditorName: 'a useful creditor name',
remittanceInformationStructured: 'structured information',
remittanceInformationUnstructured: 'unstructured information',
additionalInformation: 'some additional information',
};

const bookedTransactionTwo = {
transactionId: '2024102900000000-2',
bookingDate: '2024-10-29',
valueDate: '2024-10-29',
transactionAmount: {
amount: '-99.99',
currency: 'EUR',
},
creditorName: 'a useful creditor name',
ultimateCreditor: 'ultimate creditor',
remittanceInformationStructured: 'structured information',
additionalInformation: 'some additional information',
};

it('properly combines remittance information', () => {
expect(
SskDusseldorfDussdeddxxx.normalizeTransaction(
bookedTransactionOne,
true,
).remittanceInformationUnstructured,
).toEqual('unstructured information some additional information');

expect(
SskDusseldorfDussdeddxxx.normalizeTransaction(
bookedTransactionTwo,
true,
).remittanceInformationUnstructured,
).toEqual('structured information some additional information');
});

it('prioritizes creditor names correctly', () => {
expect(
SskDusseldorfDussdeddxxx.normalizeTransaction(
bookedTransactionOne,
true,
).payeeName,
).toEqual('A Useful Creditor Name');

expect(
SskDusseldorfDussdeddxxx.normalizeTransaction(
bookedTransactionTwo,
true,
).payeeName,
).toEqual('Ultimate Creditor');
});

const unbookedTransaction = {
transactionId: '2024102900000000-1',
valueDate: '2024-10-29',
transactionAmount: {
amount: '-99.99',
currency: 'EUR',
},
creditorName: 'some nonsensical creditor',
remittanceInformationUnstructured: 'some nonsensical information',
};

it('returns null for unbooked transactions', () => {
expect(
SskDusseldorfDussdeddxxx.normalizeTransaction(
unbookedTransaction,
false,
),
).toBeNull();

expect(consoleSpy).toHaveBeenCalledWith(
'Skipping unbooked transaction:',
unbookedTransaction.transactionId,
);
});
});
});
6 changes: 6 additions & 0 deletions upcoming-release-notes/553.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
category: Enhancements
authors: [DennaGherlyn]
---

Remove non-booked transactions from import of SSK_DUSSELDORF_DUSSDEDDXXX due to placeholder text in the payee and notes field

0 comments on commit 0312f51

Please sign in to comment.