From a1328b6510a5af884ffedbae493b573207366bf1 Mon Sep 17 00:00:00 2001 From: zachery with an e <45150570+zweatshirt@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:57:42 -0500 Subject: [PATCH 1/2] Add transfer date validation and editing functionality in TransferModal --- .../TransferModal/TransferModal.test.tsx | 35 +++++++++++++++++-- .../TransferModal/TransferModal.tsx | 28 +++++++++++---- .../TransferMutations.graphql | 2 ++ 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx index a86a405f1c..4a94759469 100644 --- a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx +++ b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.test.tsx @@ -379,6 +379,30 @@ describe('TransferModal', () => { ).toBeInTheDocument(); }); + it('should allow editing the transfer date for one-time transfers', async () => { + const { getByLabelText } = render(); + + const transferDate = getByLabelText(/transfer date/i); + expect(transferDate).toBeEnabled(); + + userEvent.clear(transferDate); + userEvent.type(transferDate, '12/01/2099'); + expect(transferDate).toHaveValue('12/01/2099'); + }); + + it('should reject a past transfer date for one-time transfers', async () => { + const { getByLabelText, findByText } = render(); + + const transferDate = getByLabelText(/transfer date/i); + userEvent.clear(transferDate); + userEvent.type(transferDate, '12/31/2019'); + userEvent.tab(); + + expect( + await findByText('Transfer start date cannot be in the past'), + ).toBeInTheDocument(); + }); + it('should show error message when monthly schedule is selected', async () => { const { getByRole, getByLabelText, findByText } = render(); @@ -464,8 +488,8 @@ describe('TransferModal', () => { }); describe('Mutations', () => { - it('should create a one-time transfer', async () => { - const { getByRole } = render(); + it('should create a one-time transfer with the selected transfer date', async () => { + const { getByRole, getByLabelText } = render(); const amountField = getByRole('spinbutton', { name: /amount/i }); @@ -475,6 +499,12 @@ describe('TransferModal', () => { userEvent.clear(amountField); userEvent.type(amountField, '100'); + const transferDate = getByLabelText(/transfer date/i); + userEvent.clear(transferDate); + userEvent.type(transferDate, '12/01/2099'); + expect(transferDate).toHaveValue('12/01/2099'); + userEvent.tab(); + userEvent.click(getByRole('button', { name: /submit/i })); await waitFor(() => { @@ -487,6 +517,7 @@ describe('TransferModal', () => { sourceFundTypeName: 'Staff Account', destinationFundTypeName: 'Staff Savings', description: '', + transactedAt: '2099-12-01T00:00:00.000+00:00', }), }), }), diff --git a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx index d09fd8bd40..bbc6817403 100644 --- a/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx +++ b/src/components/HrTools/SavingsFundTransfer/TransferModal/TransferModal.tsx @@ -104,9 +104,12 @@ const transferSchema = (locale: string) => } return this.createError({ - message: i18n.t( - 'Recurring transfers must start at least one day in the future', - ), + message: + schedule === ScheduleEnum.OneTime + ? i18n.t('Transfer start date cannot be in the past') + : i18n.t( + 'Recurring transfers must start at least one day in the future', + ), }); }), endDate: yup @@ -216,6 +219,7 @@ export const TransferModal: React.FC = ({ sourceFundTypeName: transferFrom, destinationFundTypeName: transferTo, description: note, + transactedAt: convertedTransferDate, }, }); } else { @@ -429,11 +433,21 @@ export const TransferModal: React.FC = ({ {schedule === ScheduleEnum.OneTime ? ( - { + setFieldValue('transferDate', date); + setFieldTouched('transferDate', true, false); + }} + error={ + touched.transferDate && Boolean(errors.transferDate) + } + helperText={ + touched.transferDate && + (errors.transferDate as string) + } + required /> ) : ( diff --git a/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql b/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql index 45b79e69d0..ddc3b29447 100644 --- a/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql +++ b/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql @@ -47,6 +47,7 @@ mutation CreateTransfer( $destinationFundTypeName: String! $description: String! $amount: Float! + $transactedAt: ISO8601DateTime ) { createTransfer( input: { @@ -54,6 +55,7 @@ mutation CreateTransfer( destinationFundTypeName: $destinationFundTypeName description: $description amount: $amount + transactedAt: $transactedAt } ) { message From 51c5183a9ceb84a3d617586b950e6753b55b87cb Mon Sep 17 00:00:00 2001 From: zachery with an e <45150570+zweatshirt@users.noreply.github.com> Date: Wed, 3 Jun 2026 15:06:23 -0500 Subject: [PATCH 2/2] Make transactedAt field required in CreateTransfer mutation --- .../HrTools/SavingsFundTransfer/TransferMutations.graphql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql b/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql index ddc3b29447..7b35296797 100644 --- a/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql +++ b/src/components/HrTools/SavingsFundTransfer/TransferMutations.graphql @@ -47,7 +47,7 @@ mutation CreateTransfer( $destinationFundTypeName: String! $description: String! $amount: Float! - $transactedAt: ISO8601DateTime + $transactedAt: ISO8601DateTime! ) { createTransfer( input: {