From 9329563ce15fab00b950feff004cfb0b51ad092c Mon Sep 17 00:00:00 2001 From: Tavo Nieves J Date: Sat, 24 Apr 2021 15:01:59 -0500 Subject: [PATCH 1/5] Added seeRequestElapsedTimeLessThan function --- src/Codeception/Module/Symfony.php | 2 + .../Module/Symfony/TimeAssertionsTrait.php | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/Codeception/Module/Symfony/TimeAssertionsTrait.php diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index 689ded03..c7305bb0 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -21,6 +21,7 @@ use Codeception\Module\Symfony\SecurityAssertionsTrait; use Codeception\Module\Symfony\ServicesAssertionsTrait; use Codeception\Module\Symfony\SessionAssertionsTrait; +use Codeception\Module\Symfony\TimeAssertionsTrait; use Codeception\Module\Symfony\TwigAssertionsTrait; use Codeception\TestInterface; use Exception; @@ -138,6 +139,7 @@ class Symfony extends Framework implements DoctrineProvider, PartedModule use SecurityAssertionsTrait; use ServicesAssertionsTrait; use SessionAssertionsTrait; + use TimeAssertionsTrait; use TwigAssertionsTrait; /** diff --git a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php new file mode 100644 index 00000000..e6b60fc2 --- /dev/null +++ b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php @@ -0,0 +1,39 @@ +grabTimeCollector(__FUNCTION__); + + $realTime = $timeCollector->getDuration(); + + $this->assertLessThan( + $expectedTime, + $realTime, + sprintf( + 'The request was expected to last less than %s ms, but it actually lasted %s ms.', + number_format($expectedTime, 2), + number_format($realTime, 2) + ) + ); + } + + protected function grabTimeCollector(string $function): TimeDataCollector + { + return $this->grabCollector('time', $function); + } +} From 412ada0e80cf490c730e0905f1832f19d931b7b7 Mon Sep 17 00:00:00 2001 From: Tavo Nieves J Date: Sun, 25 Apr 2021 18:30:33 -0500 Subject: [PATCH 2/5] Renamed to seeRequestTimeIsLessThan, updated docs --- src/Codeception/Module/Symfony/TimeAssertionsTrait.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php index e6b60fc2..57a33c25 100644 --- a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php @@ -13,9 +13,15 @@ trait TimeAssertionsTrait /** * Asserts that the time a request lasted is less than expected (`$expectedTime`). * + * If the page performed a HTTP redirect, only the time of the last request will be taken into account. + * You can modify this behavior using [stopFollowingRedirects()](https://codeception.com/docs/modules/Symfony#stopFollowingRedirects) first. + * + * Also, note that using code coverage can significantly increase the time it takes to resolve a request, + * which could lead to unreliable results when used together. + * * @param float $expectedTime The expected time in milliseconds */ - public function seeRequestElapsedTimeLessThan(float $expectedTime): void + public function seeRequestTimeIsLessThan(float $expectedTime): void { $timeCollector = $this->grabTimeCollector(__FUNCTION__); From f4e2694792ba75fe7af8283abb58b85612658adf Mon Sep 17 00:00:00 2001 From: Tavo Nieves J Date: Mon, 26 Apr 2021 07:42:12 -0500 Subject: [PATCH 3/5] Variable renaming --- .../Module/Symfony/TimeAssertionsTrait.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php index 57a33c25..3fb73849 100644 --- a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php @@ -19,21 +19,21 @@ trait TimeAssertionsTrait * Also, note that using code coverage can significantly increase the time it takes to resolve a request, * which could lead to unreliable results when used together. * - * @param float $expectedTime The expected time in milliseconds + * @param float $expectedMilliseconds The expected time in milliseconds */ - public function seeRequestTimeIsLessThan(float $expectedTime): void + public function seeRequestTimeIsLessThan(float $expectedMilliseconds): void { $timeCollector = $this->grabTimeCollector(__FUNCTION__); - $realTime = $timeCollector->getDuration(); + $actualMilliseconds = $timeCollector->getDuration(); $this->assertLessThan( - $expectedTime, - $realTime, + $expectedMilliseconds, + $actualMilliseconds, sprintf( 'The request was expected to last less than %s ms, but it actually lasted %s ms.', - number_format($expectedTime, 2), - number_format($realTime, 2) + number_format($expectedMilliseconds, 2), + number_format($actualMilliseconds, 2) ) ); } From 9fd150728001f496fa4279dcf6ee7ddb2a861947 Mon Sep 17 00:00:00 2001 From: Tavo Nieves J Date: Mon, 26 Apr 2021 18:15:42 -0500 Subject: [PATCH 4/5] Allow integers, round to 2 decimals --- .../Module/Symfony/TimeAssertionsTrait.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php index 3fb73849..137c9141 100644 --- a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php @@ -5,13 +5,13 @@ namespace Codeception\Module\Symfony; use Symfony\Component\HttpKernel\DataCollector\TimeDataCollector; -use function number_format; +use function round; use function sprintf; trait TimeAssertionsTrait { /** - * Asserts that the time a request lasted is less than expected (`$expectedTime`). + * Asserts that the time a request lasted is less than expected. * * If the page performed a HTTP redirect, only the time of the last request will be taken into account. * You can modify this behavior using [stopFollowingRedirects()](https://codeception.com/docs/modules/Symfony#stopFollowingRedirects) first. @@ -19,21 +19,23 @@ trait TimeAssertionsTrait * Also, note that using code coverage can significantly increase the time it takes to resolve a request, * which could lead to unreliable results when used together. * - * @param float $expectedMilliseconds The expected time in milliseconds + * @param int|float $expectedMilliseconds The expected time in milliseconds */ - public function seeRequestTimeIsLessThan(float $expectedMilliseconds): void + public function seeRequestTimeIsLessThan($expectedMilliseconds): void { + $expectedMilliseconds = round($expectedMilliseconds, 2); + $timeCollector = $this->grabTimeCollector(__FUNCTION__); - $actualMilliseconds = $timeCollector->getDuration(); + $actualMilliseconds = round($timeCollector->getDuration(), 2); $this->assertLessThan( $expectedMilliseconds, $actualMilliseconds, sprintf( - 'The request was expected to last less than %s ms, but it actually lasted %s ms.', - number_format($expectedMilliseconds, 2), - number_format($actualMilliseconds, 2) + 'The request was expected to last less than %d ms, but it actually lasted %d ms.', + $expectedMilliseconds, + $actualMilliseconds ) ); } From b48cf182a96e8335d6170067e91a4ca49d82c7b7 Mon Sep 17 00:00:00 2001 From: Thomas Landauer Date: Sun, 2 May 2021 17:24:47 +0200 Subject: [PATCH 5/5] rebootable_client 'warning' --- src/Codeception/Module/Symfony/TimeAssertionsTrait.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php index 137c9141..ad3c1862 100644 --- a/src/Codeception/Module/Symfony/TimeAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/TimeAssertionsTrait.php @@ -19,6 +19,9 @@ trait TimeAssertionsTrait * Also, note that using code coverage can significantly increase the time it takes to resolve a request, * which could lead to unreliable results when used together. * + * It is recommended to set [`rebootable_client`](https://codeception.com/docs/modules/Symfony#Config) to `true` (=default), + * cause otherwise this assertion gives false results if you access multiple pages in a row, or if your app performs a redirect. + * * @param int|float $expectedMilliseconds The expected time in milliseconds */ public function seeRequestTimeIsLessThan($expectedMilliseconds): void