Skip to content

Commit 046d119

Browse files
authored
[8.x] Ensure both Carbon and CarbonImmutable get the same test now (#36117)
* [8.x] Ensure both Carbon and CarbonImmutable get the same test now. In project where we might use mixes of Carbon and CarbonImmutable you need to remember to always setTestNow() for both scenario, this PR solved it by ensuring both instance has the same date and time during tests. Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com> * Refactor test Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>
1 parent 6319d94 commit 046d119

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

src/Illuminate/Foundation/Testing/Wormhole.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Illuminate\Foundation\Testing;
44

5-
use Illuminate\Support\Facades\Date;
5+
use Illuminate\Support\Carbon;
66

77
class Wormhole
88
{
@@ -32,7 +32,7 @@ public function __construct($value)
3232
*/
3333
public function milliseconds($callback = null)
3434
{
35-
Date::setTestNow(Date::now()->addMilliseconds($this->value));
35+
Carbon::setTestNow(Carbon::now()->addMilliseconds($this->value));
3636

3737
return $this->handleCallback($callback);
3838
}
@@ -45,7 +45,7 @@ public function milliseconds($callback = null)
4545
*/
4646
public function seconds($callback = null)
4747
{
48-
Date::setTestNow(Date::now()->addSeconds($this->value));
48+
Carbon::setTestNow(Carbon::now()->addSeconds($this->value));
4949

5050
return $this->handleCallback($callback);
5151
}
@@ -58,7 +58,7 @@ public function seconds($callback = null)
5858
*/
5959
public function minutes($callback = null)
6060
{
61-
Date::setTestNow(Date::now()->addMinutes($this->value));
61+
Carbon::setTestNow(Carbon::now()->addMinutes($this->value));
6262

6363
return $this->handleCallback($callback);
6464
}
@@ -71,7 +71,7 @@ public function minutes($callback = null)
7171
*/
7272
public function hours($callback = null)
7373
{
74-
Date::setTestNow(Date::now()->addHours($this->value));
74+
Carbon::setTestNow(Carbon::now()->addHours($this->value));
7575

7676
return $this->handleCallback($callback);
7777
}
@@ -84,7 +84,7 @@ public function hours($callback = null)
8484
*/
8585
public function days($callback = null)
8686
{
87-
Date::setTestNow(Date::now()->addDays($this->value));
87+
Carbon::setTestNow(Carbon::now()->addDays($this->value));
8888

8989
return $this->handleCallback($callback);
9090
}
@@ -97,7 +97,7 @@ public function days($callback = null)
9797
*/
9898
public function weeks($callback = null)
9999
{
100-
Date::setTestNow(Date::now()->addWeeks($this->value));
100+
Carbon::setTestNow(Carbon::now()->addWeeks($this->value));
101101

102102
return $this->handleCallback($callback);
103103
}
@@ -110,7 +110,7 @@ public function weeks($callback = null)
110110
*/
111111
public function years($callback = null)
112112
{
113-
Date::setTestNow(Date::now()->addYears($this->value));
113+
Carbon::setTestNow(Carbon::now()->addYears($this->value));
114114

115115
return $this->handleCallback($callback);
116116
}
@@ -122,9 +122,9 @@ public function years($callback = null)
122122
*/
123123
public static function back()
124124
{
125-
Date::setTestNow();
125+
Carbon::setTestNow();
126126

127-
return Date::now();
127+
return Carbon::now();
128128
}
129129

130130
/**
@@ -137,7 +137,7 @@ protected function handleCallback($callback)
137137
{
138138
if ($callback) {
139139
return tap($callback(), function () {
140-
Date::setTestNow();
140+
Carbon::setTestNow();
141141
});
142142
}
143143
}

src/Illuminate/Support/Carbon.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,16 @@
33
namespace Illuminate\Support;
44

55
use Carbon\Carbon as BaseCarbon;
6+
use Carbon\CarbonImmutable as BaseCarbonImmutable;
67

78
class Carbon extends BaseCarbon
89
{
9-
//
10+
/**
11+
* {@inheritdoc}
12+
*/
13+
public static function setTestNow($testNow = null)
14+
{
15+
BaseCarbon::setTestNow($testNow);
16+
BaseCarbonImmutable::setTestNow($testNow);
17+
}
1018
}

tests/Support/SupportCarbonTest.php

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

55
use BadMethodCallException;
66
use Carbon\Carbon as BaseCarbon;
7+
use Carbon\CarbonImmutable as BaseCarbonImmutable;
78
use DateTime;
89
use DateTimeInterface;
910
use Illuminate\Support\Carbon;
@@ -108,4 +109,13 @@ public function testDeserializationOccursCorrectly()
108109

109110
$this->assertInstanceOf(Carbon::class, $deserialized);
110111
}
112+
113+
public function testSetTestNowWillPersistBetweenImmutableAndMutableInstance()
114+
{
115+
Carbon::setTestNow(new Carbon('2017-06-27 13:14:15.000000'));
116+
117+
$this->assertSame('2017-06-27 13:14:15', Carbon::now()->toDateTimeString());
118+
$this->assertSame('2017-06-27 13:14:15', BaseCarbon::now()->toDateTimeString());
119+
$this->assertSame('2017-06-27 13:14:15', BaseCarbonImmutable::now()->toDateTimeString());
120+
}
111121
}

0 commit comments

Comments
 (0)