@@ -592,3 +592,117 @@ Deno.test('Daytime: all query convenience methods should return booleans', () =>
592592 expect ( typeof daytime ( now ) . isSameYear ( future ) ) . toBe ( 'boolean' )
593593 expect ( typeof daytime ( now ) . isSameQuarter ( future ) ) . toBe ( 'boolean' )
594594} )
595+
596+ Deno . test ( 'Daytime: lastWeekday - should return last weekday of month' , ( ) => {
597+ const date = daytime ( '2026-01-15' )
598+ const lastMonday = date . lastWeekday ( 1 )
599+ expect ( lastMonday . dayOfWeek ( ) ) . toEqual ( 1 )
600+ expect ( lastMonday . month ( ) ) . toEqual ( 1 )
601+ expect ( lastMonday . toDate ( ) . getTime ( ) ) . toBeGreaterThanOrEqual ( date . toDate ( ) . getTime ( ) )
602+ } )
603+
604+ Deno . test ( 'Daytime: lastWeekday - should work with chaining' , ( ) => {
605+ const date = daytime ( '2026-01-15' )
606+ const result = date . lastWeekday ( 5 ) . add ( 1 , 'day' )
607+ expect ( typeof result . toDate ( ) ) . toEqual ( 'object' )
608+ } )
609+
610+ Deno . test ( 'Daytime: nearestWeekday - should move weekends to nearest weekday' , ( ) => {
611+ const saturday = daytime ( '2026-01-03' )
612+ const sunday = daytime ( '2026-01-04' )
613+ expect ( saturday . nearestWeekday ( ) . dayOfWeek ( ) ) . toBeLessThan ( 6 )
614+ expect ( sunday . nearestWeekday ( ) . dayOfWeek ( ) ) . toBeGreaterThan ( 0 )
615+ } )
616+
617+ Deno . test ( 'Daytime: nearestWeekday - should keep weekdays unchanged' , ( ) => {
618+ const monday = daytime ( '2026-01-05' )
619+ const tuesday = daytime ( '2026-01-06' )
620+ expect ( monday . nearestWeekday ( ) . dayOfWeek ( ) ) . toEqual ( 1 )
621+ expect ( tuesday . nearestWeekday ( ) . dayOfWeek ( ) ) . toEqual ( 2 )
622+ } )
623+
624+ Deno . test ( 'Daytime: nearestWeekday - should work with chaining' , ( ) => {
625+ const date = daytime ( '2026-01-03' )
626+ const nearest = date . nearestWeekday ( )
627+ expect ( nearest . dayOfWeek ( ) ) . toBeLessThan ( 6 )
628+ const result = nearest . add ( 1 , 'day' )
629+ expect ( typeof result . toDate ( ) ) . toEqual ( 'object' )
630+ } )
631+
632+ Deno . test ( 'Daytime: nextWeekday - should find next occurrence of weekday' , ( ) => {
633+ const date = daytime ( '2026-01-05' )
634+ const nextMonday = date . nextWeekday ( 1 )
635+ expect ( nextMonday . dayOfWeek ( ) ) . toEqual ( 1 )
636+ expect ( nextMonday . toDate ( ) . getTime ( ) ) . toBeGreaterThan ( date . toDate ( ) . getTime ( ) )
637+ } )
638+
639+ Deno . test ( 'Daytime: nextWeekday - should work for all weekdays' , ( ) => {
640+ const date = daytime ( '2026-01-15' )
641+ for ( let weekday = 0 ; weekday <= 6 ; weekday ++ ) {
642+ const result = date . nextWeekday ( weekday )
643+ expect ( result . dayOfWeek ( ) ) . toEqual ( weekday )
644+ expect ( result . toDate ( ) . getTime ( ) ) . toBeGreaterThan ( date . toDate ( ) . getTime ( ) )
645+ }
646+ } )
647+
648+ Deno . test ( 'Daytime: nextWeekday - should work with chaining' , ( ) => {
649+ const date = daytime ( '2026-01-15' )
650+ const result = date . nextWeekday ( 1 ) . add ( 1 , 'day' )
651+ expect ( typeof result . toDate ( ) ) . toEqual ( 'object' )
652+ } )
653+
654+ Deno . test ( 'Daytime: nthWeekday - should find nth occurrence in month' , ( ) => {
655+ const date = daytime ( '2026-01-15' )
656+ const firstMonday = date . nthWeekday ( 1 , 1 )
657+ expect ( firstMonday . dayOfWeek ( ) ) . toEqual ( 1 )
658+ expect ( firstMonday . month ( ) ) . toEqual ( 1 )
659+ expect ( firstMonday . day ( ) ) . toEqual ( 5 )
660+ } )
661+
662+ Deno . test ( 'Daytime: nthWeekday - should handle different occurrences' , ( ) => {
663+ const date = daytime ( '2026-01-15' )
664+ const secondFriday = date . nthWeekday ( 2 , 5 )
665+ const thirdWednesday = date . nthWeekday ( 3 , 3 )
666+ expect ( secondFriday . dayOfWeek ( ) ) . toEqual ( 5 )
667+ expect ( thirdWednesday . dayOfWeek ( ) ) . toEqual ( 3 )
668+ expect ( thirdWednesday . toDate ( ) . getTime ( ) ) . toBeGreaterThan ( secondFriday . toDate ( ) . getTime ( ) )
669+ } )
670+
671+ Deno . test ( 'Daytime: nthWeekday - should work with chaining' , ( ) => {
672+ const date = daytime ( '2026-01-15' )
673+ const result = date . nthWeekday ( 1 , 1 ) . add ( 1 , 'week' )
674+ expect ( typeof result . toDate ( ) ) . toEqual ( 'object' )
675+ } )
676+
677+ Deno . test ( 'Daytime: prevWeekday - should find previous occurrence of weekday' , ( ) => {
678+ const date = daytime ( '2026-01-15' )
679+ const prevMonday = date . prevWeekday ( 1 )
680+ expect ( prevMonday . dayOfWeek ( ) ) . toEqual ( 1 )
681+ expect ( prevMonday . toDate ( ) . getTime ( ) ) . toBeLessThan ( date . toDate ( ) . getTime ( ) )
682+ } )
683+
684+ Deno . test ( 'Daytime: prevWeekday - should work for all weekdays' , ( ) => {
685+ const date = daytime ( '2026-01-15' )
686+ for ( let weekday = 0 ; weekday <= 6 ; weekday ++ ) {
687+ const result = date . prevWeekday ( weekday )
688+ expect ( result . dayOfWeek ( ) ) . toEqual ( weekday )
689+ expect ( result . toDate ( ) . getTime ( ) ) . toBeLessThan ( date . toDate ( ) . getTime ( ) )
690+ }
691+ } )
692+
693+ Deno . test ( 'Daytime: prevWeekday - should work with chaining' , ( ) => {
694+ const date = daytime ( '2026-01-15' )
695+ const result = date . prevWeekday ( 5 ) . subtract ( 1 , 'day' )
696+ expect ( typeof result . toDate ( ) ) . toEqual ( 'object' )
697+ } )
698+
699+ Deno . test ( 'Daytime: weekday methods should maintain immutability' , ( ) => {
700+ const date = daytime ( '2026-01-15' )
701+ const originalTime = date . toDate ( ) . getTime ( )
702+ date . lastWeekday ( 1 )
703+ date . nearestWeekday ( )
704+ date . nextWeekday ( 1 )
705+ date . nthWeekday ( 1 , 1 )
706+ date . prevWeekday ( 5 )
707+ expect ( date . toDate ( ) . getTime ( ) ) . toEqual ( originalTime )
708+ } )
0 commit comments