33namespace Tests \Feature \Calendar ;
44
55use App \Exceptions \AdvancementNotEnabledException ;
6+ use App \Exceptions \AdvancementNotReadyException ;
7+ use App \Exceptions \AdvancementTooEarlyException ;
68use App \Exceptions \ClockNotEnabledException ;
79use App \Jobs \AdvanceCalendarWithRealTime ;
810use App \Models \Calendar ;
@@ -19,12 +21,12 @@ public function test_automatic_advancement()
1921 {
2022 $ calendars = $ this ->getEdgeCases ('advancement_testcases ' );
2123
22- if (!$ calendars ->count ()) {
24+ if (!$ calendars ->count ()) {
2325 return ;
2426 }
2527
26- $ calendars ->each (function (Calendar $ calendar ){
27- collect ($ calendar ->static_data ['advancement_testcases ' ])->each (function ($ testCase ) use ($ calendar ) {
28+ $ calendars ->each (function (Calendar $ calendar ) {
29+ collect ($ calendar ->static_data ['advancement_testcases ' ])->each (function ($ testCase ) use ($ calendar ) {
2830 dump (sprintf (
2931 "Verifying a real-time advancement test case for %s with at ratio %d real-world %s to %d in-universe %s " ,
3032 $ calendar ->name ,
@@ -34,15 +36,15 @@ public function test_automatic_advancement()
3436 $ testCase ['advancement_settings ' ]['advancement_rate_unit ' ],
3537 ));
3638
37- if (isset ($ testCase ['advancement_settings ' ]['advancement_next_due_offset ' ])) {
39+ if (isset ($ testCase ['advancement_settings ' ]['advancement_next_due_offset ' ])) {
3840 dump (sprintf (
3941 " - Additionally, pretending we were behind on updates by %d %s " ,
4042 $ testCase ['advancement_settings ' ]['advancement_next_due_offset ' ],
4143 $ testCase ['advancement_settings ' ]['advancement_next_due_offset_unit ' ],
4244 ));
4345 }
4446
45- $ testCalendar = clone ($ calendar );
47+ $ testCalendar = clone ($ calendar );
4648
4749 /**
4850 * 1. Set the current date ✓
@@ -81,19 +83,24 @@ public function test_automatic_advancement()
8183 $ realRateMethod = "sub " . ucfirst ($ testCase ['advancement_settings ' ]['advancement_real_rate_unit ' ]);
8284 $ realRateOffset = $ testCase ['advancement_settings ' ]['advancement_real_rate ' ];
8385
84- if (isset ($ testCase ['advancement_settings ' ]['advancement_next_due_offset ' ])) {
86+ if (isset ($ testCase ['advancement_settings ' ]['advancement_next_due_offset ' ])) {
8587 $ realRateMethod = "sub " . ucfirst ($ testCase ['advancement_settings ' ]['advancement_next_due_offset_unit ' ]);
8688 $ realRateOffset = $ testCase ['advancement_settings ' ]['advancement_next_due_offset ' ];
8789 }
8890
91+ $ advancementNextDue = now ()->$ realRateMethod ($ realRateOffset )->startOfMinute ();
92+ if (array_key_exists ('advancement_next_due_delta ' , $ testCase ['advancement_settings ' ])) {
93+ $ deltaMethod = str_replace ('sub ' , 'add ' , $ realRateMethod );
94+ $ advancementNextDue = now ()->$ deltaMethod ($ testCase ['advancement_settings ' ]['advancement_next_due_delta ' ]);
95+ }
8996
9097 $ testCalendar ->update ([
9198 'advancement_enabled ' => $ testCase ['advancement_settings ' ]['advancement_enabled ' ],
9299 'advancement_real_rate ' => $ testCase ['advancement_settings ' ]['advancement_real_rate ' ],
93100 'advancement_real_rate_unit ' => $ testCase ['advancement_settings ' ]['advancement_real_rate_unit ' ],
94101 'advancement_rate ' => $ testCase ['advancement_settings ' ]['advancement_rate ' ],
95102 'advancement_rate_unit ' => $ testCase ['advancement_settings ' ]['advancement_rate_unit ' ],
96- 'advancement_next_due ' => now ()-> $ realRateMethod ( $ realRateOffset )-> startOfMinute () ,
103+ 'advancement_next_due ' => $ advancementNextDue ,
97104 ]);
98105
99106 /**
@@ -109,10 +116,13 @@ public function test_automatic_advancement()
109116 try {
110117 (new AdvanceCalendarWithRealTime ($ testCalendar ))->handle ();
111118 } catch (\Throwable $ thrown ) {
112- if (!$ testCalendar ->advancement_enabled ) {
119+ if ($ testCase ['advancement_settings ' ]['advancement_next_due_delta ' ] ?? false ) {
120+ $ this ->assertTrue ($ thrown instanceof AdvancementTooEarlyException);
121+ }
122+ if (!$ testCalendar ->advancement_enabled ) {
113123 $ this ->assertTrue ($ thrown instanceof AdvancementNotEnabledException);
114124 }
115- if (!$ testCalendar ->clock_enabled ) {
125+ if (!$ testCalendar ->clock_enabled ) {
116126 $ this ->assertTrue ($ thrown instanceof ClockNotEnabledException);
117127 }
118128 }
0 commit comments