<?php namespace Illuminate\Foundation\Testing\Concerns; use DateTimeInterface; use Illuminate\Foundation\Testing\Wormhole; use Illuminate\Support\Carbon; trait InteractsWithTime { /** * Begin travelling to another time. * * @param int $value * @return \Illuminate\Foundation\Testing\Wormhole */ public function travel($value) { return new Wormhole($value); } /** * Travel to another time. * * @param \DateTimeInterface $date * @param callable|null $callback * @return mixed */ public function travelTo(DateTimeInterface $date, $callback = null) { Carbon::setTestNow($date); if ($callback) { return tap($callback(), function () { Carbon::setTestNow(); }); } } /** * Travel back to the current time. * * @return \DateTimeInterface */ public function travelBack() { return Wormhole::back(); } }