@@ -361,4 +361,133 @@ describe("Form Runtime layout of Date Picker ", () => {
361361 } ) ;
362362 } ) ;
363363
364+ describe ( "Reflow at 320px width (WCAG 1.4.10)" , ( ) => {
365+
366+ it ( "should display all date picker controls at 320px viewport width" , ( ) => {
367+ cy . viewport ( 320 , 568 ) ;
368+
369+ const [ datePicker , datePickerFieldView ] = Object . entries ( formContainer . _fields ) [ 0 ] ;
370+
371+ cy . get ( `#${ datePicker } ` ) . find ( ".cmp-adaptiveform-datepicker__calendar-icon" )
372+ . should ( "be.visible" )
373+ . click ( ) ;
374+
375+ cy . get ( '.datetimepicker.datePickerTarget' )
376+ . should ( "be.visible" )
377+ . and ( "have.css" , "display" , "flex" ) ;
378+
379+ cy . get ( ".dp-leftnav" )
380+ . should ( "be.visible" )
381+ . and ( "be.visible" ) ;
382+
383+ cy . get ( ".dp-rightnav" )
384+ . should ( "be.visible" )
385+ . and ( "be.visible" ) ;
386+
387+ cy . get ( ".dp-caption" )
388+ . should ( "be.visible" ) ;
389+ } ) ;
390+
391+ it ( "should display all days in the first column (Sunday) at 320px" , ( ) => {
392+ cy . viewport ( 320 , 568 ) ;
393+
394+ const [ datePicker , datePickerFieldView ] = Object . entries ( formContainer . _fields ) [ 0 ] ;
395+ const date = '2026-02-01' ;
396+
397+ cy . get ( `#${ datePicker } ` ) . find ( "input" ) . clear ( ) . type ( date ) ;
398+
399+ cy . get ( `#${ datePicker } ` ) . find ( ".cmp-adaptiveform-datepicker__calendar-icon" )
400+ . should ( "be.visible" )
401+ . click ( ) ;
402+
403+ cy . get ( '.datetimepicker.datePickerTarget' ) . within ( ( ) => {
404+ cy . get ( 'ul.header li' ) . first ( ) . should ( "be.visible" ) . and ( "contain" , "Sun" ) ;
405+
406+ cy . get ( "#li-day-2" ) . should ( "be.visible" ) ;
407+ cy . get ( "#li-day-9" ) . should ( "be.visible" ) ;
408+ cy . get ( "#li-day-16" ) . should ( "be.visible" ) ;
409+ cy . get ( "#li-day-23" ) . should ( "be.visible" ) ;
410+ } ) ;
411+ } ) ;
412+
413+ it ( "should allow navigation with previous/next buttons at 320px" , ( ) => {
414+ cy . viewport ( 320 , 568 ) ;
415+
416+ const [ datePicker , datePickerFieldView ] = Object . entries ( formContainer . _fields ) [ 0 ] ;
417+ const date = '2025-03-01' ;
418+
419+ cy . get ( `#${ datePicker } ` ) . find ( "input" ) . clear ( ) . type ( date ) ;
420+
421+ cy . get ( `#${ datePicker } ` ) . find ( ".cmp-adaptiveform-datepicker__calendar-icon" )
422+ . should ( "be.visible" )
423+ . click ( ) ;
424+
425+ cy . get ( ".dp-caption" ) . should ( "contain" , "March" ) ;
426+ cy . get ( ".dp-leftnav" ) . should ( "be.visible" ) . click ( ) ;
427+ cy . get ( ".dp-caption" ) . should ( "contain" , "February" ) ;
428+ cy . get ( ".dp-rightnav" ) . should ( "be.visible" ) . click ( ) ;
429+ cy . get ( ".dp-caption" ) . should ( "contain" , "March" ) ;
430+ } ) ;
431+
432+ it ( "should not cause horizontal overflow at 320px" , ( ) => {
433+ cy . viewport ( 320 , 568 ) ;
434+
435+ const [ datePicker , datePickerFieldView ] = Object . entries ( formContainer . _fields ) [ 0 ] ;
436+
437+ cy . get ( `#${ datePicker } ` ) . find ( ".cmp-adaptiveform-datepicker__calendar-icon" )
438+ . should ( "be.visible" )
439+ . click ( ) ;
440+
441+ cy . get ( '.datetimepicker.datePickerTarget' ) . then ( ( $picker ) => {
442+ const pickerWidth = $picker . outerWidth ( ) ;
443+ expect ( pickerWidth ) . to . be . lessThan ( 320 ) ;
444+ } ) ;
445+
446+ cy . document ( ) . then ( ( doc ) => {
447+ expect ( doc . documentElement . scrollWidth ) . to . equal ( doc . documentElement . clientWidth ) ;
448+ } ) ;
449+ } ) ;
450+
451+ it ( "should maintain date column alignment at 320px" , ( ) => {
452+ cy . viewport ( 320 , 568 ) ;
453+
454+ const [ datePicker , datePickerFieldView ] = Object . entries ( formContainer . _fields ) [ 0 ] ;
455+ const date = '2025-03-01' ;
456+
457+ cy . get ( `#${ datePicker } ` ) . find ( "input" ) . clear ( ) . type ( date ) ;
458+
459+ cy . get ( `#${ datePicker } ` ) . find ( ".cmp-adaptiveform-datepicker__calendar-icon" )
460+ . should ( "be.visible" )
461+ . click ( ) ;
462+
463+ cy . get ( '.datetimepicker.datePickerTarget .view.dp-monthview ul:not(.header)' ) . then ( ( $rows ) => {
464+ const firstCellWidth = $rows . eq ( 0 ) . find ( 'li' ) . eq ( 0 ) . outerWidth ( ) ;
465+
466+ $rows . each ( ( rowIndex , row ) => {
467+ cy . wrap ( row ) . find ( 'li' ) . each ( ( cellIndex , cell ) => {
468+ const cellWidth = Cypress . $ ( cell ) . outerWidth ( ) ;
469+ expect ( Math . abs ( cellWidth - firstCellWidth ) ) . to . be . lessThan ( 2 ) ;
470+ } ) ;
471+ } ) ;
472+ } ) ;
473+ } ) ;
474+
475+ it ( "should allow date selection at 320px viewport" , ( ) => {
476+ cy . viewport ( 320 , 568 ) ;
477+
478+ const [ datePicker , datePickerFieldView ] = Object . entries ( formContainer . _fields ) [ 0 ] ;
479+ const date = '2025-03-01' ;
480+
481+ cy . get ( `#${ datePicker } ` ) . find ( "input" ) . clear ( ) . type ( date ) ;
482+
483+ cy . get ( `#${ datePicker } ` ) . find ( ".cmp-adaptiveform-datepicker__calendar-icon" )
484+ . should ( "be.visible" )
485+ . click ( ) ;
486+
487+ cy . get ( "#li-day-10" ) . should ( "be.visible" ) . click ( ) ;
488+
489+ cy . get ( `#${ datePicker } ` ) . find ( "input" ) . blur ( ) . should ( "have.value" , "Sunday, 2 March, 2025" ) ;
490+ } ) ;
491+ } ) ;
492+
364493} )
0 commit comments