/
githubmirror
/
framework
Обзор
Документация
Войти
/
githubmirror
/
framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
13.x
tests/Integration/Console/CommandDurationThresholdTest.php
209 строк
7 KB
Lucas Michot
[13.x] Reset fake time globally after each test, drop redundant Carbon::setTestNow() cleanup (#60761)
14 июл 2026, 16:42
Не верифицирован
14 июл 2026, 16:42
87b2cbd
Код
Авторство
О чём код?
<?php namespace Illuminate\Tests\Integration\Console; use Carbon\CarbonInterval; use Illuminate\Contracts\Console\Kernel; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Config; use Orchestra\Testbench\TestCase; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\ConsoleOutput; class CommandDurationThresholdTest extends TestCase { public function testItCanHandleExceedingCommandDuration(): void { $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $called = false; $kernel->whenCommandLifecycleIsLongerThan(CarbonInterval::seconds(1), function () use (&$called) { $called = true; }); Carbon::setTestNow($now = Carbon::now()); $kernel->handle($input, new ConsoleOutput); $this->assertFalse($called); Carbon::setTestNow($now->addSecond()->addMilliseconds(1)); $kernel->terminate($input, 21); $this->assertTrue($called); } public function testItDoesntCallWhenExactlyThresholdDuration(): void { $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $called = false; $kernel->whenCommandLifecycleIsLongerThan(CarbonInterval::seconds(1), function () use (&$called) { $called = true; }); Carbon::setTestNow($now = Carbon::now()); $kernel->handle($input, new ConsoleOutput); $this->assertFalse($called); Carbon::setTestNow($now->addSecond()); $kernel->terminate($input, 21); $this->assertFalse($called); } public function testItProvidesArgsToHandler(): void { $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $args = null; $kernel->whenCommandLifecycleIsLongerThan(CarbonInterval::seconds(0), function () use (&$args) { $args = func_get_args(); }); Carbon::setTestNow($startedAt = Carbon::now()); $kernel->handle($input, new ConsoleOutput); Carbon::setTestNow(Carbon::now()->addSecond()); $kernel->terminate($input, 21); $this->assertCount(3, $args); $this->assertTrue($startedAt->eq($args[0])); $this->assertSame($input, $args[1]); $this->assertSame(21, $args[2]); } public function testItCanExceedThresholdWhenSpecifyingDurationAsMilliseconds(): void { $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $called = false; $kernel->whenCommandLifecycleIsLongerThan(1000, function () use (&$called) { $called = true; }); Carbon::setTestNow($now = Carbon::now()); $kernel->handle($input, new ConsoleOutput); $this->assertFalse($called); Carbon::setTestNow($now->addSecond()->addMilliseconds(1)); $kernel->terminate($input, 21); $this->assertTrue($called); } public function testItCanStayUnderThresholdWhenSpecifyingDurationAsMilliseconds(): void { $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $called = false; $kernel->whenCommandLifecycleIsLongerThan(1000, function () use (&$called) { $called = true; }); Carbon::setTestNow($now = Carbon::now()); $kernel->handle($input, new ConsoleOutput); $this->assertFalse($called); Carbon::setTestNow($now->addSecond()); $kernel->terminate($input, 21); $this->assertFalse($called); } public function testItCanExceedThresholdWhenSpecifyingDurationAsDateTime(): void { retry(2, function () { Carbon::setTestNow($now = Carbon::now()); $input = new StringInput('foo'); $called = false; $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $kernel->whenCommandLifecycleIsLongerThan($now->copy()->addSecond()->addMillisecond(), function () use (&$called) { $called = true; }); $kernel->handle($input, new ConsoleOutput); $this->assertFalse($called); Carbon::setTestNow($now->addSecond()->addMillisecond()); $kernel->terminate($input, 21); $this->assertTrue($called); }, 500); } public function testItCanStayUnderThresholdWhenSpecifyingDurationAsDateTime(): void { Carbon::setTestNow($now = Carbon::now()); $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $called = false; $kernel->whenCommandLifecycleIsLongerThan($now->copy()->addSecond()->addMillisecond(), function () use (&$called) { $called = true; }); $kernel->handle($input, new ConsoleOutput); $this->assertFalse($called); Carbon::setTestNow($now->addSecond()); $kernel->terminate($input, 21); $this->assertFalse($called); } public function testItClearsStartTimeAfterHandlingCommand(): void { $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $input = new StringInput('foo'); $this->assertNull($kernel->commandStartedAt()); $kernel->handle($input, new ConsoleOutput); $this->assertNotNull($kernel->commandStartedAt()); $kernel->terminate($input, 21); $this->assertNull($kernel->commandStartedAt()); } public function testUsesTheConfiguredDateTimezone(): void { Config::set('app.timezone', 'UTC'); $startedAt = null; $kernel = $this->app[Kernel::class]; $kernel->command('foo', fn () => null); $kernel->whenCommandLifecycleIsLongerThan(0, function ($started) use (&$startedAt) { $startedAt = $started; }); Config::set('app.timezone', 'Australia/Melbourne'); Carbon::setTestNow($now = Carbon::now()); $kernel->handle($input = new StringInput('foo'), new ConsoleOutput); Carbon::setTestNow($now->addMinute()); $kernel->terminate($input, 21); $this->assertSame('Australia/Melbourne', $startedAt->timezone->getName()); } public function testItHandlesCallingTerminateWithoutHandle(): void { $this->app[Kernel::class]->terminate(new StringInput('foo'), 21); // this is a placeholder just to show that the above did not throw an exception. $this->assertTrue(true); } }