csv import: map a currency column, or foreign rows land as AUD
ci / lint-test (push) Successful in 41s
ci / lint-test (push) Successful in 41s
Deleting the Frollo importer dropped its currency handling and nothing replaced it: ColumnMapping had no currency column, so applyMapping could never produce foreign_currency_code and batchInsertCSVTransactions' support for it was unreachable from the UI. The USD 10,782 salary imported as A$10,782 — about a third under, sitting in a column of AUD figures looking entirely normal, which is the same defect the owner spotted in the first place. An optional Currency column now sets foreign_currency_code and foreign_currency_amount when the cell is a three-letter code other than AUD, and leaves amount_aud NULL rather than inventing a rate. That is the shape order ingestion already uses and what AMOUNT_UNCONVERTED looks for, so the row renders as its native figure with "no AUD rate" and the statement supplies the real number when it arrives. Caught by reading the imported row rather than the import summary: the summary said 171 inserted and was right about everything it reported.
This commit is contained in:
@@ -169,6 +169,39 @@ describe("applyMapping with account and row-id columns", () => {
|
||||
expect(out[0].transaction_type).toBe("credit");
|
||||
});
|
||||
|
||||
it("marks a non-AUD row as native and unconverted", () => {
|
||||
// The 2026-08-12 salary is USD. Stored without this it reads as A$10,782 —
|
||||
// about a third under — and sits in a column of AUD figures looking normal.
|
||||
const out = applyMapping(
|
||||
[["1", "HDR Global Services", "10782.00", "2026-08-12", "xxxx4830", "USD"]],
|
||||
[...labels, "currency"],
|
||||
{ ...mapping, currencyCol: "currency" },
|
||||
"YYYY-MM-DD"
|
||||
);
|
||||
expect(out[0].foreign_currency_code).toBe("USD");
|
||||
expect(out[0].foreign_currency_amount).toBe(10782);
|
||||
});
|
||||
|
||||
it("leaves an AUD row unmarked", () => {
|
||||
const out = applyMapping(
|
||||
[["1", "SOMETHING", "-42.50", "2026-08-12", "xxxx4830", "AUD"]],
|
||||
[...labels, "currency"],
|
||||
{ ...mapping, currencyCol: "currency" },
|
||||
"YYYY-MM-DD"
|
||||
);
|
||||
expect(out[0].foreign_currency_code).toBeUndefined();
|
||||
});
|
||||
|
||||
it("ignores a currency cell that is not a code", () => {
|
||||
const out = applyMapping(
|
||||
[["1", "SOMETHING", "-42.50", "2026-08-12", "xxxx4830", ""]],
|
||||
[...labels, "currency"],
|
||||
{ ...mapping, currencyCol: "currency" },
|
||||
"YYYY-MM-DD"
|
||||
);
|
||||
expect(out[0].foreign_currency_code).toBeUndefined();
|
||||
});
|
||||
|
||||
it("leaves both undefined when the columns are not mapped", () => {
|
||||
const out = applyMapping(
|
||||
[["1", "SOMETHING", "-42.50", "2026-08-12", "xxxx4830"]],
|
||||
|
||||
Reference in New Issue
Block a user