From 2834842fce89661c808e9dd6b4fdd3f219b5ed1a Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Tue, 3 Sep 2024 18:36:43 +0200 Subject: [PATCH 01/22] Match configured testing namespace --- packages/hyde/tests/DefaultContentTest.php | 3 +-- packages/hyde/tests/ExampleTest.php | 4 +--- packages/hyde/tests/HydeCLITest.php | 4 +--- packages/hyde/tests/StaticSiteBuilderTest.php | 3 +-- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/hyde/tests/DefaultContentTest.php b/packages/hyde/tests/DefaultContentTest.php index 0da224d54c6..f632c9c433a 100644 --- a/packages/hyde/tests/DefaultContentTest.php +++ b/packages/hyde/tests/DefaultContentTest.php @@ -2,10 +2,9 @@ declare(strict_types=1); -namespace Hyde\Testing\Hyde; +namespace Hyde\Testing; use Hyde\Hyde; -use Hyde\Testing\UnitTestCase; class DefaultContentTest extends UnitTestCase { diff --git a/packages/hyde/tests/ExampleTest.php b/packages/hyde/tests/ExampleTest.php index ebccc2b91e9..ca67cfc90a5 100644 --- a/packages/hyde/tests/ExampleTest.php +++ b/packages/hyde/tests/ExampleTest.php @@ -2,9 +2,7 @@ declare(strict_types=1); -namespace Hyde\Testing\Hyde; - -use Hyde\Testing\UnitTestCase; +namespace Hyde\Testing; class ExampleTest extends UnitTestCase { diff --git a/packages/hyde/tests/HydeCLITest.php b/packages/hyde/tests/HydeCLITest.php index bcf5e86cd27..b72eea310a2 100644 --- a/packages/hyde/tests/HydeCLITest.php +++ b/packages/hyde/tests/HydeCLITest.php @@ -2,9 +2,7 @@ declare(strict_types=1); -namespace Hyde\Testing\Hyde; - -use Hyde\Testing\TestCase; +namespace Hyde\Testing; class HydeCLITest extends TestCase { diff --git a/packages/hyde/tests/StaticSiteBuilderTest.php b/packages/hyde/tests/StaticSiteBuilderTest.php index 41c73a302c8..cb4d11eaef9 100644 --- a/packages/hyde/tests/StaticSiteBuilderTest.php +++ b/packages/hyde/tests/StaticSiteBuilderTest.php @@ -2,10 +2,9 @@ declare(strict_types=1); -namespace Hyde\Testing\Hyde; +namespace Hyde\Testing; use Hyde\Hyde; -use Hyde\Testing\TestCase; use Illuminate\Support\Facades\File; class StaticSiteBuilderTest extends TestCase From bbd6f365f0dece904254b692fe84043e20c808e5 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:18:48 +0200 Subject: [PATCH 02/22] Add new testing helper to mock current route key --- packages/testing/src/UnitTestCase.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 23e6083a903..942f00d34fc 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -5,6 +5,7 @@ namespace Hyde\Testing; use Hyde\Foundation\HydeKernel; +use Hyde\Support\Facades\Render; use Illuminate\Config\Repository; use Illuminate\Support\Facades\Config; use PHPUnit\Framework\TestCase as BaseTestCase; @@ -51,4 +52,9 @@ protected static function mockConfig(array $items = []): void Config::swap(app('config')); } + + protected static function mockCurrentRouteKey(string $routeKey): void + { + Render::shouldReceive('getRouteKey')->andReturn($routeKey); + } } From 89ff0f147ad459517d407849b7be915cde4c24a7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:19:34 +0200 Subject: [PATCH 03/22] Add default value --- packages/testing/src/UnitTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 942f00d34fc..a36ddae2ead 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -53,7 +53,7 @@ protected static function mockConfig(array $items = []): void Config::swap(app('config')); } - protected static function mockCurrentRouteKey(string $routeKey): void + protected static function mockCurrentRouteKey(string $routeKey = ''): void { Render::shouldReceive('getRouteKey')->andReturn($routeKey); } From d4eff585e05534554f27f29dfa95ba7692ef01e9 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:24:33 +0200 Subject: [PATCH 04/22] Default to null --- packages/testing/src/UnitTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index a36ddae2ead..31c816a2a95 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -53,7 +53,7 @@ protected static function mockConfig(array $items = []): void Config::swap(app('config')); } - protected static function mockCurrentRouteKey(string $routeKey = ''): void + protected static function mockCurrentRouteKey(?string $routeKey = null): void { Render::shouldReceive('getRouteKey')->andReturn($routeKey); } From 880eebe3d0f67f1eb5852b142814d1af7da48f7f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:33:01 +0200 Subject: [PATCH 05/22] Swap in render data to ensure mock is fresh --- packages/testing/src/UnitTestCase.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 31c816a2a95..74f91d624b9 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -7,6 +7,7 @@ use Hyde\Foundation\HydeKernel; use Hyde\Support\Facades\Render; use Illuminate\Config\Repository; +use Hyde\Support\Models\RenderData; use Illuminate\Support\Facades\Config; use PHPUnit\Framework\TestCase as BaseTestCase; @@ -55,6 +56,7 @@ protected static function mockConfig(array $items = []): void protected static function mockCurrentRouteKey(?string $routeKey = null): void { + Render::swap(new RenderData()); Render::shouldReceive('getRouteKey')->andReturn($routeKey); } } From a3cae27d9c8cc976d678bd39f105d9b55a6635d6 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:33:28 +0200 Subject: [PATCH 06/22] Update test to use mocking helper --- packages/framework/tests/Unit/RouteTest.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/framework/tests/Unit/RouteTest.php b/packages/framework/tests/Unit/RouteTest.php index 35d2dae4427..2052faa04c1 100644 --- a/packages/framework/tests/Unit/RouteTest.php +++ b/packages/framework/tests/Unit/RouteTest.php @@ -6,8 +6,6 @@ use Hyde\Hyde; use Hyde\Pages\MarkdownPage; -use Hyde\Support\Facades\Render; -use Hyde\Support\Models\RenderData; use Hyde\Support\Models\Route; use Hyde\Support\Models\RouteKey; use Hyde\Testing\UnitTestCase; @@ -21,7 +19,7 @@ protected function setUp(): void { self::setupKernel(); self::mockConfig(); - Render::swap(new RenderData()); + self::mockCurrentRouteKey(); } public function testConstructorCreatesRouteFromPageModel() @@ -80,7 +78,7 @@ public function testGetLinkReturnsCorrectPathForNestedPages() public function testGetLinkReturnsCorrectPathForNestedCurrentPage() { $route = new Route(new MarkdownPage('foo')); - Render::shouldReceive('getRouteKey')->andReturn('foo/bar'); + self::mockCurrentRouteKey('foo/bar'); $this->assertSame(Hyde::relativeLink($route->getOutputPath()), $route->getLink()); $this->assertSame('../foo.html', $route->getLink()); From 232a70e04c5c911710a3ec2972c7afb28cb147a9 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:34:58 +0200 Subject: [PATCH 07/22] Add automatic shorthand for tests that need render data --- packages/testing/src/UnitTestCase.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 74f91d624b9..01b89cd0cdd 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -17,6 +17,7 @@ abstract class UnitTestCase extends BaseTestCase protected static bool $needsKernel = false; protected static bool $needsConfig = false; + protected static bool $needsRender = false; protected static function needsKernel(): void { @@ -34,6 +35,10 @@ public static function setUpBeforeClass(): void if (static::$needsConfig) { self::mockConfig(); } + + if (static::$needsRender) { + Render::swap(new RenderData()); + } } protected static function setupKernel(): void From 11333cc3c1fd5d7e5cd8a39ccffbfc8cf9121565 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:36:26 +0200 Subject: [PATCH 08/22] Use the helper --- packages/testing/src/UnitTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 01b89cd0cdd..5cdd694d977 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -37,7 +37,7 @@ public static function setUpBeforeClass(): void } if (static::$needsRender) { - Render::swap(new RenderData()); + self::mockCurrentRouteKey(); } } From 66eedd657d3e65de9bd8f6cef425060d41501746 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:36:32 +0200 Subject: [PATCH 09/22] Optimize test setup --- packages/framework/tests/Unit/RouteTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/framework/tests/Unit/RouteTest.php b/packages/framework/tests/Unit/RouteTest.php index 2052faa04c1..51183fc4800 100644 --- a/packages/framework/tests/Unit/RouteTest.php +++ b/packages/framework/tests/Unit/RouteTest.php @@ -15,10 +15,11 @@ */ class RouteTest extends UnitTestCase { + protected static bool $needsKernel = true; + protected static bool $needsConfig = true; + protected function setUp(): void { - self::setupKernel(); - self::mockConfig(); self::mockCurrentRouteKey(); } From d3e182a9f13120a8b596f61eb9c9f4c59058e21a Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:38:03 +0200 Subject: [PATCH 10/22] Clean up test mock resets --- .../tests/Unit/Facades/RouteFacadeTest.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/framework/tests/Unit/Facades/RouteFacadeTest.php b/packages/framework/tests/Unit/Facades/RouteFacadeTest.php index a63a9b7669f..ba26af152e9 100644 --- a/packages/framework/tests/Unit/Facades/RouteFacadeTest.php +++ b/packages/framework/tests/Unit/Facades/RouteFacadeTest.php @@ -23,6 +23,11 @@ class RouteFacadeTest extends UnitTestCase protected static bool $needsKernel = true; protected static bool $needsConfig = true; + protected function setUp(): void + { + Render::swap(new RenderData()); + } + public function testRouteFacadeAllMethodReturnsAllRoutes() { $this->assertSame(Hyde::routes(), Routes::all()); @@ -64,8 +69,6 @@ public function testCurrentReturnsCurrentRoute() Render::shouldReceive('getRoute')->andReturn($route); $this->assertSame($route, Routes::current()); - - $this->resetMockInstance(); } public function testCurrentReturnsNullIfRouteIsNotFound() @@ -73,8 +76,6 @@ public function testCurrentReturnsNullIfRouteIsNotFound() Render::shouldReceive('getRoute')->andReturn(null); $this->assertNull(Routes::current()); - - $this->resetMockInstance(); } public function testExistsForExistingRoute() @@ -86,9 +87,4 @@ public function testExistsForNonExistingRoute() { $this->assertFalse(Routes::exists('not-found')); } - - protected function resetMockInstance(): void - { - Render::swap(new RenderData()); - } } From 021556c2e48311764e64f73c9b2fcd8f72b6562a Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:38:16 +0200 Subject: [PATCH 11/22] Use the automatic mocking feature --- .../framework/tests/Unit/DropdownNavItemTest.php | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/packages/framework/tests/Unit/DropdownNavItemTest.php b/packages/framework/tests/Unit/DropdownNavItemTest.php index 884045acb46..a26947f836f 100644 --- a/packages/framework/tests/Unit/DropdownNavItemTest.php +++ b/packages/framework/tests/Unit/DropdownNavItemTest.php @@ -8,8 +8,6 @@ use Hyde\Framework\Features\Navigation\DropdownNavItem; use Hyde\Framework\Features\Navigation\NavItem; use Hyde\Pages\MarkdownPage; -use Hyde\Support\Facades\Render; -use Hyde\Support\Models\RenderData; use Hyde\Support\Models\Route; use Hyde\Testing\UnitTestCase; @@ -20,17 +18,7 @@ class DropdownNavItemTest extends UnitTestCase { protected static bool $needsKernel = true; protected static bool $needsConfig = true; - - public static function setUpBeforeClass(): void - { - parent::setUpBeforeClass(); - Render::swap(new RenderData()); - } - - public static function tearDownAfterClass(): void - { - Render::swap(new RenderData()); - } + protected static bool $needsRender = true; public function testConstruct() { From 9705989eedcbd668cb13d9aa8d3bd18c7dbe70ee Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:38:58 +0200 Subject: [PATCH 12/22] Use the new mocking shorthand --- packages/testing/src/Common/BaseHydePageUnitTest.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/testing/src/Common/BaseHydePageUnitTest.php b/packages/testing/src/Common/BaseHydePageUnitTest.php index 645ef738efa..54b59a7b20b 100644 --- a/packages/testing/src/Common/BaseHydePageUnitTest.php +++ b/packages/testing/src/Common/BaseHydePageUnitTest.php @@ -8,7 +8,6 @@ use Illuminate\View\Factory; use Hyde\Testing\UnitTestCase; use Hyde\Support\Facades\Render; -use Hyde\Support\Models\RenderData; use Illuminate\Support\Facades\View; use Hyde\Testing\CreatesTemporaryFiles; @@ -27,6 +26,7 @@ protected function setUp(): void { self::setupKernel(); self::mockConfig(); + self::mockCurrentRouteKey(); View::swap($mock = Mockery::mock(Factory::class, [ 'make' => Mockery::mock(Factory::class, [ @@ -39,8 +39,6 @@ protected function setUp(): void ])); app()->bind(\Illuminate\Contracts\View\Factory::class, fn () => $mock); app()->bind('view', fn () => $mock); - - Render::swap(new RenderData()); } protected function tearDown(): void From 857d2a9b740514d9c147a7eecdc09dc279d88437 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:39:42 +0200 Subject: [PATCH 13/22] Extract fluent alias --- packages/framework/tests/Unit/RouteTest.php | 2 +- packages/testing/src/Common/BaseHydePageUnitTest.php | 2 +- packages/testing/src/UnitTestCase.php | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/framework/tests/Unit/RouteTest.php b/packages/framework/tests/Unit/RouteTest.php index 51183fc4800..c5157cf024f 100644 --- a/packages/framework/tests/Unit/RouteTest.php +++ b/packages/framework/tests/Unit/RouteTest.php @@ -20,7 +20,7 @@ class RouteTest extends UnitTestCase protected function setUp(): void { - self::mockCurrentRouteKey(); + self::mockRender(); } public function testConstructorCreatesRouteFromPageModel() diff --git a/packages/testing/src/Common/BaseHydePageUnitTest.php b/packages/testing/src/Common/BaseHydePageUnitTest.php index 54b59a7b20b..a02b84be84f 100644 --- a/packages/testing/src/Common/BaseHydePageUnitTest.php +++ b/packages/testing/src/Common/BaseHydePageUnitTest.php @@ -26,7 +26,7 @@ protected function setUp(): void { self::setupKernel(); self::mockConfig(); - self::mockCurrentRouteKey(); + self::mockRender(); View::swap($mock = Mockery::mock(Factory::class, [ 'make' => Mockery::mock(Factory::class, [ diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 5cdd694d977..adbf85ec317 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -37,7 +37,7 @@ public static function setUpBeforeClass(): void } if (static::$needsRender) { - self::mockCurrentRouteKey(); + self::mockRender(); } } @@ -52,6 +52,11 @@ protected static function resetKernel(): void HydeKernel::setInstance(new HydeKernel()); } + protected static function mockRender(): void + { + Render::swap(new RenderData()); + } + protected static function mockConfig(array $items = []): void { app()->bind('config', fn (): Repository => new Repository($items)); From fdb4ffb6c18846f927c9141f92d5966a11ea71a2 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:40:41 +0200 Subject: [PATCH 14/22] Reorder methods --- packages/testing/src/UnitTestCase.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index adbf85ec317..ecd715787c9 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -57,16 +57,16 @@ protected static function mockRender(): void Render::swap(new RenderData()); } + protected static function mockCurrentRouteKey(?string $routeKey = null): void + { + Render::swap(new RenderData()); + Render::shouldReceive('getRouteKey')->andReturn($routeKey); + } + protected static function mockConfig(array $items = []): void { app()->bind('config', fn (): Repository => new Repository($items)); Config::swap(app('config')); } - - protected static function mockCurrentRouteKey(?string $routeKey = null): void - { - Render::swap(new RenderData()); - Render::shouldReceive('getRouteKey')->andReturn($routeKey); - } } From 6c0b78055ae1e5100458014682e695577daf957b Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:43:33 +0200 Subject: [PATCH 15/22] Use the automatic mocking feature --- .../Unit/Foundation/HyperlinkFileHelperRelativeLinkTest.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/tests/Unit/Foundation/HyperlinkFileHelperRelativeLinkTest.php b/packages/framework/tests/Unit/Foundation/HyperlinkFileHelperRelativeLinkTest.php index 5d684061b4e..4aa4af46074 100644 --- a/packages/framework/tests/Unit/Foundation/HyperlinkFileHelperRelativeLinkTest.php +++ b/packages/framework/tests/Unit/Foundation/HyperlinkFileHelperRelativeLinkTest.php @@ -5,8 +5,6 @@ namespace Hyde\Framework\Testing\Unit\Foundation; use Hyde\Hyde; -use Hyde\Support\Facades\Render; -use Hyde\Support\Models\RenderData; use Hyde\Testing\InteractsWithPages; use Hyde\Testing\UnitTestCase; use Illuminate\Support\Facades\View; @@ -22,10 +20,10 @@ class HyperlinkFileHelperRelativeLinkTest extends UnitTestCase protected static bool $needsKernel = true; protected static bool $needsConfig = true; + protected static bool $needsRender = true; protected function setUp(): void { - Render::swap(new RenderData()); View::swap(Mockery::mock(Factory::class)->makePartial()); } From e13b438f022af0fc057b44e2c0383bf6b647a17f Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:46:34 +0200 Subject: [PATCH 16/22] Optimize test setup --- packages/framework/tests/Unit/Facades/RouteFacadeTest.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/framework/tests/Unit/Facades/RouteFacadeTest.php b/packages/framework/tests/Unit/Facades/RouteFacadeTest.php index ba26af152e9..ed9b1b6b573 100644 --- a/packages/framework/tests/Unit/Facades/RouteFacadeTest.php +++ b/packages/framework/tests/Unit/Facades/RouteFacadeTest.php @@ -11,7 +11,6 @@ use Hyde\Pages\MarkdownPage; use Hyde\Pages\MarkdownPost; use Hyde\Support\Facades\Render; -use Hyde\Support\Models\RenderData; use Hyde\Support\Models\Route; use Hyde\Testing\UnitTestCase; @@ -23,11 +22,6 @@ class RouteFacadeTest extends UnitTestCase protected static bool $needsKernel = true; protected static bool $needsConfig = true; - protected function setUp(): void - { - Render::swap(new RenderData()); - } - public function testRouteFacadeAllMethodReturnsAllRoutes() { $this->assertSame(Hyde::routes(), Routes::all()); @@ -66,6 +60,7 @@ public function testCurrentReturnsCurrentRoute() { $route = new Route(new MarkdownPage('foo')); + self::mockRender(); Render::shouldReceive('getRoute')->andReturn($route); $this->assertSame($route, Routes::current()); @@ -73,6 +68,7 @@ public function testCurrentReturnsCurrentRoute() public function testCurrentReturnsNullIfRouteIsNotFound() { + self::mockRender(); Render::shouldReceive('getRoute')->andReturn(null); $this->assertNull(Routes::current()); From 2a01eea964a055de210005f6ccc76ae27766007d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 13:49:14 +0200 Subject: [PATCH 17/22] Return chainable facade instance --- packages/framework/tests/Unit/Facades/RouteFacadeTest.php | 7 ++----- packages/testing/src/UnitTestCase.php | 7 ++++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/framework/tests/Unit/Facades/RouteFacadeTest.php b/packages/framework/tests/Unit/Facades/RouteFacadeTest.php index ed9b1b6b573..246a9e1babb 100644 --- a/packages/framework/tests/Unit/Facades/RouteFacadeTest.php +++ b/packages/framework/tests/Unit/Facades/RouteFacadeTest.php @@ -10,7 +10,6 @@ use Hyde\Pages\BladePage; use Hyde\Pages\MarkdownPage; use Hyde\Pages\MarkdownPost; -use Hyde\Support\Facades\Render; use Hyde\Support\Models\Route; use Hyde\Testing\UnitTestCase; @@ -60,16 +59,14 @@ public function testCurrentReturnsCurrentRoute() { $route = new Route(new MarkdownPage('foo')); - self::mockRender(); - Render::shouldReceive('getRoute')->andReturn($route); + self::mockRender()->shouldReceive('getRoute')->andReturn($route); $this->assertSame($route, Routes::current()); } public function testCurrentReturnsNullIfRouteIsNotFound() { - self::mockRender(); - Render::shouldReceive('getRoute')->andReturn(null); + self::mockRender()->shouldReceive('getRoute')->andReturn(null); $this->assertNull(Routes::current()); } diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index ecd715787c9..764334bec74 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -52,15 +52,16 @@ protected static function resetKernel(): void HydeKernel::setInstance(new HydeKernel()); } - protected static function mockRender(): void + protected static function mockRender(): Render { Render::swap(new RenderData()); + + return new Render(); } protected static function mockCurrentRouteKey(?string $routeKey = null): void { - Render::swap(new RenderData()); - Render::shouldReceive('getRouteKey')->andReturn($routeKey); + self::mockRender()->shouldReceive('getRouteKey')->andReturn($routeKey); } protected static function mockConfig(array $items = []): void From e02bc9dc1518c9d90ce4527d84bc2ca19081ffdb Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 14:02:28 +0200 Subject: [PATCH 18/22] Optimize test teardown --- packages/framework/tests/Unit/NavItemIsCurrentHelperTest.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/framework/tests/Unit/NavItemIsCurrentHelperTest.php b/packages/framework/tests/Unit/NavItemIsCurrentHelperTest.php index 3f83394b217..d3cc16aa15e 100644 --- a/packages/framework/tests/Unit/NavItemIsCurrentHelperTest.php +++ b/packages/framework/tests/Unit/NavItemIsCurrentHelperTest.php @@ -23,11 +23,6 @@ class NavItemIsCurrentHelperTest extends UnitTestCase protected static bool $needsKernel = true; protected static bool $needsConfig = true; - protected function tearDown(): void - { - Render::swap(new RenderData()); - } - public function testIsCurrent() { $this->mockRenderData($this->makeRoute('foo')); From 6f57ffe4dc5791ce7c2c1e06a1f5db42db68f5b4 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 14:19:06 +0200 Subject: [PATCH 19/22] Remove unused always true check This does not work, and is not worth fixing as the setup kernel time amounts to 0.002ms per run, which is 2ms for the entire unit test suite of just over 1000 tests, and only a subset of those even use this. --- packages/testing/src/UnitTestCase.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 764334bec74..14f32803e74 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -13,17 +13,13 @@ abstract class UnitTestCase extends BaseTestCase { - protected static bool $hasSetUpKernel = false; - protected static bool $needsKernel = false; protected static bool $needsConfig = false; protected static bool $needsRender = false; protected static function needsKernel(): void { - if (! self::$hasSetUpKernel) { - self::setupKernel(); - } + self::setupKernel(); } public static function setUpBeforeClass(): void @@ -44,7 +40,6 @@ public static function setUpBeforeClass(): void protected static function setupKernel(): void { HydeKernel::setInstance(new HydeKernel()); - self::$hasSetUpKernel = true; } protected static function resetKernel(): void From ea08e81a5f97bf632b215575e72abdc254c9f058 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 14:22:12 +0200 Subject: [PATCH 20/22] Simplify test mock setup --- packages/framework/tests/Unit/NavItemTest.php | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/packages/framework/tests/Unit/NavItemTest.php b/packages/framework/tests/Unit/NavItemTest.php index 379fbf581eb..e0ce48052e1 100644 --- a/packages/framework/tests/Unit/NavItemTest.php +++ b/packages/framework/tests/Unit/NavItemTest.php @@ -25,18 +25,9 @@ */ class NavItemTest extends UnitTestCase { - public static function setUpBeforeClass(): void - { - self::$hasSetUpKernel = false; - - self::needsKernel(); - self::mockConfig(); - } - - protected function setUp(): void - { - Render::swap(new RenderData()); - } + protected static bool $needsKernel = true; + protected static bool $needsConfig = true; + protected static bool $needsRender = true; public function testConstruct() { @@ -129,6 +120,8 @@ public function testForRouteWithRouteKey() public function testForRouteWithMissingRouteKey() { + self::resetKernel(); + $this->expectException(RouteNotFoundException::class); NavItem::forRoute('foo', 'foo'); } From b758695c8376a96efbc9f90b030d8eede72f4730 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 14:34:07 +0200 Subject: [PATCH 21/22] Revert "Simplify test mock setup" This reverts commit ea08e81a5f97bf632b215575e72abdc254c9f058. --- packages/framework/tests/Unit/NavItemTest.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/framework/tests/Unit/NavItemTest.php b/packages/framework/tests/Unit/NavItemTest.php index e0ce48052e1..379fbf581eb 100644 --- a/packages/framework/tests/Unit/NavItemTest.php +++ b/packages/framework/tests/Unit/NavItemTest.php @@ -25,9 +25,18 @@ */ class NavItemTest extends UnitTestCase { - protected static bool $needsKernel = true; - protected static bool $needsConfig = true; - protected static bool $needsRender = true; + public static function setUpBeforeClass(): void + { + self::$hasSetUpKernel = false; + + self::needsKernel(); + self::mockConfig(); + } + + protected function setUp(): void + { + Render::swap(new RenderData()); + } public function testConstruct() { @@ -120,8 +129,6 @@ public function testForRouteWithRouteKey() public function testForRouteWithMissingRouteKey() { - self::resetKernel(); - $this->expectException(RouteNotFoundException::class); NavItem::forRoute('foo', 'foo'); } From 64638fe976370073365c3187e6f6940610b986ad Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Sun, 8 Sep 2024 14:34:10 +0200 Subject: [PATCH 22/22] Revert "Remove unused always true check" This reverts commit 6f57ffe4dc5791ce7c2c1e06a1f5db42db68f5b4. --- packages/testing/src/UnitTestCase.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/testing/src/UnitTestCase.php b/packages/testing/src/UnitTestCase.php index 14f32803e74..764334bec74 100644 --- a/packages/testing/src/UnitTestCase.php +++ b/packages/testing/src/UnitTestCase.php @@ -13,13 +13,17 @@ abstract class UnitTestCase extends BaseTestCase { + protected static bool $hasSetUpKernel = false; + protected static bool $needsKernel = false; protected static bool $needsConfig = false; protected static bool $needsRender = false; protected static function needsKernel(): void { - self::setupKernel(); + if (! self::$hasSetUpKernel) { + self::setupKernel(); + } } public static function setUpBeforeClass(): void @@ -40,6 +44,7 @@ public static function setUpBeforeClass(): void protected static function setupKernel(): void { HydeKernel::setInstance(new HydeKernel()); + self::$hasSetUpKernel = true; } protected static function resetKernel(): void