From 45ac8c4d0a753ab5cac45755ef83302fce1929c7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 25 Mar 2024 11:49:36 +0100 Subject: [PATCH] Update testing helper to also mock the pages --- .../Unit/TestingSupportHelpersMetaTest.php | 18 +++++++++++++++++- packages/testing/src/MocksKernelFeatures.php | 14 ++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/framework/tests/Unit/TestingSupportHelpersMetaTest.php b/packages/framework/tests/Unit/TestingSupportHelpersMetaTest.php index 7b0d269de06..ca924c0ca4d 100644 --- a/packages/framework/tests/Unit/TestingSupportHelpersMetaTest.php +++ b/packages/framework/tests/Unit/TestingSupportHelpersMetaTest.php @@ -30,8 +30,17 @@ public function testWithPages() $this->withPages([$page]); + $this->assertSame([$page], $this->kernel->pages()->all()); $this->assertEquals([$page->getRoute()], $this->kernel->routes()->all()); - $this->assertSame($page, $this->kernel->routes()->first()->getPage()); + } + + public function testWithPagesReplacesExistingPages() + { + $this->withPages([new InMemoryPage('foo')]); + $this->assertSame(['foo'], $this->getPageIdentifiers()); + + $this->withPages([new InMemoryPage('bar')]); + $this->assertSame(['bar'], $this->getPageIdentifiers()); } public function testWithPagesReplacesExistingRoutes() @@ -48,7 +57,14 @@ public function testWithPagesWhenSupplyingStrings() $this->withPages(['foo', 'bar', 'baz']); $this->assertSame(['foo', 'bar', 'baz'], $this->getRouteKeys()); + $this->assertSame(['foo', 'bar', 'baz'], $this->getPageIdentifiers()); $this->assertContainsOnlyInstancesOf(InMemoryPage::class, $this->getRoutePages()); + $this->assertContainsOnlyInstancesOf(InMemoryPage::class, $this->kernel->pages()); + } + + protected function getPageIdentifiers() + { + return $this->kernel->pages()->map(fn (InMemoryPage $page) => $page->getIdentifier())->all(); } protected function getRouteKeys(): array diff --git a/packages/testing/src/MocksKernelFeatures.php b/packages/testing/src/MocksKernelFeatures.php index 670e8a44f30..47db29648c2 100644 --- a/packages/testing/src/MocksKernelFeatures.php +++ b/packages/testing/src/MocksKernelFeatures.php @@ -7,6 +7,7 @@ use Hyde\Pages\InMemoryPage; use Hyde\Foundation\HydeKernel; use Hyde\Pages\Concerns\HydePage; +use Hyde\Foundation\Kernel\PageCollection; use Hyde\Foundation\Kernel\RouteCollection; use Illuminate\Contracts\Support\Arrayable; @@ -30,6 +31,7 @@ protected function withPages(array $pages): static // If the given pages are strings, convert them to InMemoryPage instances. $pages = collect($pages)->map(fn (HydePage|string $page): HydePage => is_string($page) ? new InMemoryPage($page) : $page); + $this->kernel->setPages($pages); $this->kernel->setRoutes(collect($pages)->map(fn (HydePage $page) => $page->getRoute())); return $this; @@ -45,13 +47,25 @@ protected function setupTestKernel(): void class TestKernel extends HydeKernel { + protected ?PageCollection $mockPages = null; protected ?RouteCollection $mockRoutes = null; + public function setPages(Arrayable $pages): void + { + $this->mockPages = PageCollection::make($pages); + } + public function setRoutes(Arrayable $routes): void { $this->mockRoutes = RouteCollection::make($routes); } + /** @return \Hyde\Foundation\Kernel\PageCollection */ + public function pages(): PageCollection + { + return $this->mockPages ?? parent::pages(); + } + /** @return \Hyde\Foundation\Kernel\RouteCollection */ public function routes(): RouteCollection {