Skip to content

Commit 5f3b4d9

Browse files
committed
Make the unit tests happy
1 parent 3c855d0 commit 5f3b4d9

File tree

4 files changed

+37
-12
lines changed

4 files changed

+37
-12
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace App\Exceptions;
4+
5+
use App\Models\Calendar;
6+
use Exception;
7+
8+
class AdvancementTooEarlyException extends Exception
9+
{
10+
public function __construct(Calendar $calendar)
11+
{
12+
parent::__construct("Tried to advance {$calendar->name} ({$calendar->hash}), but it's too early.");
13+
}
14+
}

app/Jobs/AdvanceCalendarWithRealTime.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Exceptions\AdvancementNotEnabledException;
66
use App\Exceptions\AdvancementNotReadyException;
7+
use App\Exceptions\AdvancementTooEarlyException;
78
use App\Exceptions\ClockNotEnabledException;
89
use App\Models\Calendar;
910
use App\Services\Discord\API\Client;
@@ -87,8 +88,8 @@ private function ensureCalendarShouldAdvance()
8788
}
8889

8990
// Make sure we haven't accidentally doubled up on running the job
90-
if(!$this->calendar->advancement_next_due <= now()->startOfMinute()) {
91-
throw new AdvancementNotReadyException($this->calendar);
91+
if($this->calendar->advancement_next_due >= now()->startOfMinute()) {
92+
throw new AdvancementTooEarlyException($this->calendar);
9293
}
9394

9495
// Make sure all of the advancement settings are set

setup/extra-preset-jsons

tests/Feature/Calendar/AdvancementTest.php

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace Tests\Feature\Calendar;
44

55
use App\Exceptions\AdvancementNotEnabledException;
6+
use App\Exceptions\AdvancementNotReadyException;
7+
use App\Exceptions\AdvancementTooEarlyException;
68
use App\Exceptions\ClockNotEnabledException;
79
use App\Jobs\AdvanceCalendarWithRealTime;
810
use 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

Comments
 (0)