@@ -189,10 +189,71 @@ describe('TransferModal', () => {
189189 userEvent . tab ( ) ;
190190
191191 expect (
192- await findByText ( 'End date must be after transfer date' ) ,
192+ await findByText (
193+ 'End date must be at least one day after the transfer date' ,
194+ ) ,
195+ ) . toBeInTheDocument ( ) ;
196+ } ) ;
197+
198+ it ( 'should reject an end date equal to the transfer date for recurring transfers' , async ( ) => {
199+ const { getByRole, findByLabelText, getByLabelText, findByText } = render (
200+ < Components /> ,
201+ ) ;
202+
203+ userEvent . click ( getByRole ( 'radio' , { name : / m o n t h l y / i } ) ) ;
204+ expect ( getByRole ( 'radio' , { name : / m o n t h l y / i } ) ) . toBeChecked ( ) ;
205+
206+ const transferDate = await findByLabelText ( / t r a n s f e r d a t e / i) ;
207+ const endDate = getByLabelText ( / e n d d a t e / i) ;
208+
209+ userEvent . clear ( transferDate ) ;
210+ userEvent . type ( transferDate , '12/01/2024' ) ;
211+ userEvent . tab ( ) ;
212+
213+ userEvent . clear ( endDate ) ;
214+ userEvent . type ( endDate , '12/01/2024' ) ;
215+
216+ userEvent . tab ( ) ;
217+
218+ expect (
219+ await findByText (
220+ 'End date must be at least one day after the transfer date' ,
221+ ) ,
193222 ) . toBeInTheDocument ( ) ;
194223 } ) ;
195224
225+ it ( 'should accept an end date one day after the transfer date for recurring transfers' , async ( ) => {
226+ const { getByRole, findByLabelText, getByLabelText, queryByText } =
227+ render ( < Components /> ) ;
228+
229+ userEvent . click ( getByRole ( 'radio' , { name : / m o n t h l y / i } ) ) ;
230+ expect ( getByRole ( 'radio' , { name : / m o n t h l y / i } ) ) . toBeChecked ( ) ;
231+
232+ expect ( await findByLabelText ( / e n d d a t e / i) ) . toBeInTheDocument ( ) ;
233+
234+ const transferDate = getByLabelText ( / t r a n s f e r d a t e / i) ;
235+ const endDate = getByLabelText ( / e n d d a t e / i) ;
236+
237+ userEvent . clear ( transferDate ) ;
238+ userEvent . type ( transferDate , '12/01/2024' ) ;
239+ expect ( transferDate ) . toHaveValue ( '12/01/2024' ) ;
240+ userEvent . tab ( ) ;
241+
242+ userEvent . clear ( endDate ) ;
243+ userEvent . type ( endDate , '12/02/2024' ) ;
244+ expect ( endDate ) . toHaveValue ( '12/02/2024' ) ;
245+
246+ userEvent . tab ( ) ;
247+
248+ await waitFor ( ( ) =>
249+ expect (
250+ queryByText (
251+ 'End date must be at least one day after the transfer date' ,
252+ ) ,
253+ ) . not . toBeInTheDocument ( ) ,
254+ ) ;
255+ } ) ;
256+
196257 it ( 'should submit form with valid data' , async ( ) => {
197258 const { getByRole } = render ( < Components /> ) ;
198259
@@ -306,6 +367,18 @@ describe('TransferModal', () => {
306367 ) ;
307368 } ) ;
308369
370+ it ( 'should show descriptive helper text for the end date field' , async ( ) => {
371+ const { getByRole, findByText } = render ( < Components /> ) ;
372+
373+ userEvent . click ( getByRole ( 'radio' , { name : / m o n t h l y / i } ) ) ;
374+
375+ expect (
376+ await findByText (
377+ 'The transfer will no longer recur after this date. If left blank, the transfer will recur indefinitely until manually stopped.' ,
378+ ) ,
379+ ) . toBeInTheDocument ( ) ;
380+ } ) ;
381+
309382 it ( 'should show error message when monthly schedule is selected' , async ( ) => {
310383 const { getByRole, getByLabelText, findByText } = render ( < Components /> ) ;
311384
0 commit comments