diff --git a/src/Illuminate/Foundation/Testing/Wormhole.php b/src/Illuminate/Foundation/Testing/Wormhole.php index d660fe026a75..ef02e5a26f03 100644 --- a/src/Illuminate/Foundation/Testing/Wormhole.php +++ b/src/Illuminate/Foundation/Testing/Wormhole.php @@ -2,7 +2,7 @@ namespace Illuminate\Foundation\Testing; -use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\Date; class Wormhole { @@ -32,7 +32,7 @@ public function __construct($value) */ public function milliseconds($callback = null) { - Carbon::setTestNow(Carbon::now()->addMilliseconds($this->value)); + Date::setTestNow(Date::now()->addMilliseconds($this->value)); return $this->handleCallback($callback); } @@ -45,7 +45,7 @@ public function milliseconds($callback = null) */ public function seconds($callback = null) { - Carbon::setTestNow(Carbon::now()->addSeconds($this->value)); + Date::setTestNow(Date::now()->addSeconds($this->value)); return $this->handleCallback($callback); } @@ -58,7 +58,7 @@ public function seconds($callback = null) */ public function minutes($callback = null) { - Carbon::setTestNow(Carbon::now()->addMinutes($this->value)); + Date::setTestNow(Date::now()->addMinutes($this->value)); return $this->handleCallback($callback); } @@ -71,7 +71,7 @@ public function minutes($callback = null) */ public function hours($callback = null) { - Carbon::setTestNow(Carbon::now()->addHours($this->value)); + Date::setTestNow(Date::now()->addHours($this->value)); return $this->handleCallback($callback); } @@ -84,7 +84,7 @@ public function hours($callback = null) */ public function days($callback = null) { - Carbon::setTestNow(Carbon::now()->addDays($this->value)); + Date::setTestNow(Date::now()->addDays($this->value)); return $this->handleCallback($callback); } @@ -97,7 +97,7 @@ public function days($callback = null) */ public function weeks($callback = null) { - Carbon::setTestNow(Carbon::now()->addWeeks($this->value)); + Date::setTestNow(Date::now()->addWeeks($this->value)); return $this->handleCallback($callback); } @@ -110,7 +110,7 @@ public function weeks($callback = null) */ public function years($callback = null) { - Carbon::setTestNow(Carbon::now()->addYears($this->value)); + Date::setTestNow(Date::now()->addYears($this->value)); return $this->handleCallback($callback); } @@ -122,9 +122,9 @@ public function years($callback = null) */ public static function back() { - Carbon::setTestNow(); + Date::setTestNow(); - return Carbon::now(); + return Date::now(); } /** @@ -137,7 +137,7 @@ protected function handleCallback($callback) { if ($callback) { return tap($callback(), function () { - Carbon::setTestNow(); + Date::setTestNow(); }); } } diff --git a/tests/Foundation/Testing/WormholeTest.php b/tests/Foundation/Testing/WormholeTest.php index baf41f059132..13174e8f189f 100644 --- a/tests/Foundation/Testing/WormholeTest.php +++ b/tests/Foundation/Testing/WormholeTest.php @@ -2,7 +2,9 @@ namespace Illuminate\Tests\Foundation\Testing; +use Carbon\CarbonImmutable; use Illuminate\Foundation\Testing\Wormhole; +use Illuminate\Support\Facades\Date; use PHPUnit\Framework\TestCase; class WormholeTest extends TestCase @@ -22,4 +24,26 @@ public function testCanTravelBackToPresent() // Assert we can go back to the present.. $this->assertEquals($present->format('Y-m-d'), Wormhole::back()->format('Y-m-d')); } + + public function testCarbonImmutableCompatibility() + { + // Tell the Date Factory to use CarbonImmutable... + Date::use(CarbonImmutable::class); + + // Record what time it is in 10 days... + $present = now(); + $future = $present->addDays(10); + + // Travel in time... + (new Wormhole(10))->days(); + + // Assert that the present time didn't get mutated... + $this->assertNotEquals($future->format('Y-m-d'), $present->format('Y-m-d')); + + // Assert the time travel was successful... + $this->assertEquals($future->format('Y-m-d'), now()->format('Y-m-d')); + + // Restore the default Date Factory... + Date::useDefault(); + } }