diff --git a/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.test.tsx b/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.test.tsx index 8ee719086d..c7a186481b 100644 --- a/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.test.tsx +++ b/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.test.tsx @@ -1,7 +1,7 @@ import { StaffExpenseCategoryEnum } from 'src/graphql/types.generated'; import { ReportType } from '../Helpers/StaffReportEnum'; import { Transaction } from '../Helpers/filterTransactions'; -import { createCsvReport } from './downloadReport'; +import { createCsvReport, dateSortTransactions } from './downloadReport'; const mockData: Transaction[] = [ { @@ -9,7 +9,7 @@ const mockData: Transaction[] = [ category: StaffExpenseCategoryEnum.MinistryReimbursement, displayCategory: 'Ministry Reimbursement', fundType: 'Primary', - transactedAt: '2025-07-01', + transactedAt: '2025-10-01', amount: -2724, }, { @@ -113,4 +113,14 @@ describe('downloadReport', () => { expect(clickMock).toHaveBeenCalled(); expect(removeChildMock).toHaveBeenCalledWith(realLink); }); + + describe('dateSortTransactions', () => { + it('sorts transactions by ascending date', () => { + expect( + dateSortTransactions(mockData).map( + (transaction) => transaction.transactedAt, + ), + ).toEqual(['2025-08-01', '2025-09-01', '2025-10-01']); + }); + }); }); diff --git a/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.tsx b/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.tsx index c752b4939d..15dbdac412 100644 --- a/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.tsx +++ b/src/components/Reports/StaffExpenseReport/DownloadButtonGroup/downloadReport.tsx @@ -11,10 +11,11 @@ const createTable = ( transactions: Transaction[], locale: string, ) => { + const dateSortedTransactions = dateSortTransactions(transactions); const csvData = [ [title], csvHeader, - ...transactions.map((transaction) => [ + ...dateSortedTransactions.map((transaction) => [ dateFormat(DateTime.fromISO(transaction.transactedAt), locale), transaction.displayCategory, currencyFormat(transaction.amount, 'USD', locale), @@ -24,6 +25,12 @@ const createTable = ( return csvData; }; +export function dateSortTransactions(transactions: Transaction[]) { + return [...transactions].sort((transactionA, transactionB) => + transactionA.transactedAt.localeCompare(transactionB.transactedAt), + ); +} + function createCombinedReport( transactions: Transaction[], titles: { income: string; expense: string },