From bb7851598c279f341dd01e2f09afe3203a4ab946 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 09:49:38 -0400 Subject: [PATCH 01/16] Attach the collection to the taxonomies --- src/Entries/Collection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Entries/Collection.php b/src/Entries/Collection.php index 7836916ad9..b036f8c93e 100644 --- a/src/Entries/Collection.php +++ b/src/Entries/Collection.php @@ -831,7 +831,7 @@ public function taxonomies($taxonomies = null) return Blink::once($key, function () use ($taxonomies) { return collect($taxonomies)->map(function ($taxonomy) { - return Taxonomy::findByHandle($taxonomy); + return Taxonomy::findByHandle($taxonomy)->collection($this); })->filter(); }); }) From 74340123d08f726ca3b0662f8a1126a500953b4d Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 10:59:43 -0400 Subject: [PATCH 02/16] Fix collection taxonomy URI --- src/Taxonomies/Taxonomy.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Taxonomies/Taxonomy.php b/src/Taxonomies/Taxonomy.php index a118c0f45d..c61bce9782 100644 --- a/src/Taxonomies/Taxonomy.php +++ b/src/Taxonomies/Taxonomy.php @@ -342,9 +342,16 @@ public function uri() { $site = Site::current(); - $prefix = $this->collection() ? $this->collection()->uri($site->handle()) : '/'; + $taxonomySlug = Str::replace('_', '-', $this->handle); - return URL::tidy($prefix.str_replace('_', '-', '/'.$this->handle)); + if (! $this->isAssignedToCollection()) { + return URL::tidy("{$site->url()}/{$taxonomySlug}"); + } + + $collectionUri = $this->collection()->uri($site->handle()) + ?? Str::replace('_', '-', $this->collection()->handle()); + + return URL::tidy("{$site->url()}/{$collectionUri}/{$taxonomySlug}"); } public function collection($collection = null) @@ -362,6 +369,11 @@ public function collections() })->values(); } + public function isAssignedToCollection() + { + return $this->collection() && $this->collections()->contains($this->collection()); + } + public function toResponse($request) { if (! view()->exists($this->template())) { From 1ad127542a259ec3b6f96ac1108c213601dc716d Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 11:41:21 -0400 Subject: [PATCH 03/16] Fix collection term route --- src/Taxonomies/LocalizedTerm.php | 61 +++++++++++++++++--------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/Taxonomies/LocalizedTerm.php b/src/Taxonomies/LocalizedTerm.php index 15808c4083..03a7b007f0 100644 --- a/src/Taxonomies/LocalizedTerm.php +++ b/src/Taxonomies/LocalizedTerm.php @@ -3,37 +3,38 @@ namespace Statamic\Taxonomies; use ArrayAccess; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\Responsable; +use Statamic\Facades; +use Statamic\Statamic; +use Statamic\Facades\URL; +use Statamic\Support\Str; +use Statamic\Facades\Site; +use Statamic\Facades\Blink; +use Statamic\Facades\Antlers; use Illuminate\Support\Carbon; -use Statamic\Contracts\Auth\Protect\Protectable; -use Statamic\Contracts\Data\Augmentable; +use Statamic\Data\Publishable; +use Statamic\Routing\Routable; +use Statamic\Search\Searchable; +use Statamic\Revisions\Revisable; +use Statamic\GraphQL\ResolvesValues; +use Statamic\Data\TracksLastModified; use Statamic\Contracts\Data\Augmented; -use Statamic\Contracts\Data\BulkAugmentable; -use Statamic\Contracts\Data\Localization; -use Statamic\Contracts\GraphQL\ResolvesValues as ResolvesValuesContract; -use Statamic\Contracts\Query\ContainsQueryableValues; -use Statamic\Contracts\Search\Searchable as SearchableContract; use Statamic\Contracts\Taxonomies\Term; -use Statamic\Contracts\Taxonomies\TermRepository; -use Statamic\Data\ContainsSupplementalData; use Statamic\Data\HasAugmentedInstance; -use Statamic\Data\Publishable; -use Statamic\Data\TracksLastModified; use Statamic\Data\TracksQueriedColumns; +use Statamic\Contracts\Data\Augmentable; +use Statamic\Contracts\Data\Localization; use Statamic\Data\TracksQueriedRelations; -use Statamic\Exceptions\NotFoundHttpException; -use Statamic\Facades; -use Statamic\Facades\Antlers; -use Statamic\Facades\Blink; -use Statamic\Facades\Site; -use Statamic\GraphQL\ResolvesValues; use Statamic\Http\Responses\DataResponse; -use Statamic\Revisions\Revisable; -use Statamic\Routing\Routable; -use Statamic\Search\Searchable; -use Statamic\Statamic; -use Statamic\Support\Str; +use Illuminate\Contracts\Support\Arrayable; +use Statamic\Data\ContainsSupplementalData; +use Statamic\Contracts\Data\BulkAugmentable; +use Illuminate\Contracts\Support\Responsable; +use Statamic\Exceptions\NotFoundHttpException; +use Statamic\Contracts\Auth\Protect\Protectable; +use Statamic\Contracts\Taxonomies\TermRepository; +use Statamic\Contracts\Query\ContainsQueryableValues; +use Statamic\Contracts\Search\Searchable as SearchableContract; +use Statamic\Contracts\GraphQL\ResolvesValues as ResolvesValuesContract; class LocalizedTerm implements Arrayable, ArrayAccess, Augmentable, BulkAugmentable, ContainsQueryableValues, Localization, Protectable, ResolvesValuesContract, Responsable, SearchableContract, Term { @@ -344,14 +345,16 @@ public function apiUrl() public function route() { - $route = '/'.str_replace('_', '-', $this->taxonomyHandle()).'/{slug}'; + $taxonomySlug = Str::replace('_', '-', $this->taxonomyHandle()); - if ($this->collection()) { - $collectionUrl = $this->collection()->uri($this->locale()) ?? $this->collection()->handle(); - $route = $collectionUrl.$route; + if (! $this->collection()) { + return URL::tidy("/{$taxonomySlug}/{slug}"); } - return $route; + $collectionUri = $this->collection()->uri($this->locale()) + ?? Str::replace('_', '-', $this->collection()->handle()); + + return URL::tidy("/{$collectionUri}/{$taxonomySlug}/{slug}"); } public function routeData() From 9ed76c7f866c36373a518cba1b2a6e0be943c899 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 12:08:04 -0400 Subject: [PATCH 04/16] =?UTF-8?q?Ensure=20we=20don=E2=80=99t=20assign=20wh?= =?UTF-8?q?en=20null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Entries/Collection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Entries/Collection.php b/src/Entries/Collection.php index b036f8c93e..cff88d55b8 100644 --- a/src/Entries/Collection.php +++ b/src/Entries/Collection.php @@ -831,7 +831,7 @@ public function taxonomies($taxonomies = null) return Blink::once($key, function () use ($taxonomies) { return collect($taxonomies)->map(function ($taxonomy) { - return Taxonomy::findByHandle($taxonomy)->collection($this); + return Taxonomy::findByHandle($taxonomy)?->collection($this); })->filter(); }); }) From b8a8686bef2aff6cd696143d492f09b7d6037349 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 12:17:58 -0400 Subject: [PATCH 05/16] Check if taxonomy is assigned to collection --- src/Taxonomies/LocalizedTerm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Taxonomies/LocalizedTerm.php b/src/Taxonomies/LocalizedTerm.php index 03a7b007f0..adff581424 100644 --- a/src/Taxonomies/LocalizedTerm.php +++ b/src/Taxonomies/LocalizedTerm.php @@ -347,7 +347,7 @@ public function route() { $taxonomySlug = Str::replace('_', '-', $this->taxonomyHandle()); - if (! $this->collection()) { + if (! $this->taxonomy()->isAssignedToCollection()) { return URL::tidy("/{$taxonomySlug}/{slug}"); } From 49e0262b67cb473cc055dc4ca15b83f381e4e4dd Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 12:37:13 -0400 Subject: [PATCH 06/16] =?UTF-8?q?Need=20the=20URI=20not=20the=20URL=20?= =?UTF-8?q?=F0=9F=A4=A6=E2=80=8D=E2=99=82=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Taxonomies/Taxonomy.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Taxonomies/Taxonomy.php b/src/Taxonomies/Taxonomy.php index c61bce9782..869857f2c8 100644 --- a/src/Taxonomies/Taxonomy.php +++ b/src/Taxonomies/Taxonomy.php @@ -340,18 +340,16 @@ public function absoluteUrl() public function uri() { - $site = Site::current(); - $taxonomySlug = Str::replace('_', '-', $this->handle); if (! $this->isAssignedToCollection()) { - return URL::tidy("{$site->url()}/{$taxonomySlug}"); + return URL::tidy("/{$taxonomySlug}"); } - $collectionUri = $this->collection()->uri($site->handle()) + $collectionUri = $this->collection()->uri(Site::current()->handle()) ?? Str::replace('_', '-', $this->collection()->handle()); - return URL::tidy("{$site->url()}/{$collectionUri}/{$taxonomySlug}"); + return URL::tidy("/{$collectionUri}/{$taxonomySlug}"); } public function collection($collection = null) From 436ec6e2d2c29f12470200057f9acb9ee29ca550 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 12:45:16 -0400 Subject: [PATCH 07/16] Fix test --- tests/Data/Taxonomies/TaxonomyTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Data/Taxonomies/TaxonomyTest.php b/tests/Data/Taxonomies/TaxonomyTest.php index 7c76a3c91c..b6bb7ef775 100644 --- a/tests/Data/Taxonomies/TaxonomyTest.php +++ b/tests/Data/Taxonomies/TaxonomyTest.php @@ -174,9 +174,10 @@ public function it_gets_the_url_with_a_collection() $entry->shouldReceive('uri')->andReturn('/blog'); Entry::shouldReceive('find')->with('blog-page')->andReturn($entry); - $collection = tap(Collection::make('blog')->mount('blog-page'))->save(); + $taxonomy = tap((new Taxonomy)->handle('tags'))->save(); + $collection = tap(Collection::make('blog')->taxonomies(['tags'])->mount('blog-page'))->save(); - $taxonomy = (new Taxonomy)->handle('tags')->collection($collection); + $taxonomy = $taxonomy->collection($collection); $this->assertEquals('/blog/tags', $taxonomy->uri()); $this->assertEquals('/blog/tags', $taxonomy->url()); From f8e0ccb06ebea1de0c030fd0e2d77854329fc49c Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 12:52:22 -0400 Subject: [PATCH 08/16] Make it clear that the test uses the mount --- tests/Data/Taxonomies/TaxonomyTest.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/Data/Taxonomies/TaxonomyTest.php b/tests/Data/Taxonomies/TaxonomyTest.php index b6bb7ef775..8cc80b7973 100644 --- a/tests/Data/Taxonomies/TaxonomyTest.php +++ b/tests/Data/Taxonomies/TaxonomyTest.php @@ -167,21 +167,22 @@ public function it_gets_the_url_when_the_site_is_using_a_subdirectory() } #[Test] - public function it_gets_the_url_with_a_collection() + public function it_gets_the_url_with_a_collection_that_has_a_mount() { $entry = $this->mock(EntryContract::class); $entry->shouldReceive('in')->andReturnSelf(); - $entry->shouldReceive('uri')->andReturn('/blog'); - Entry::shouldReceive('find')->with('blog-page')->andReturn($entry); + $entry->shouldReceive('uri')->andReturn('/blog-articles'); + Entry::shouldReceive('find')->with('blog-articles')->andReturn($entry); $taxonomy = tap((new Taxonomy)->handle('tags'))->save(); - $collection = tap(Collection::make('blog')->taxonomies(['tags'])->mount('blog-page'))->save(); + $collection = tap(Collection::make('blog')->taxonomies(['tags'])->mount('blog-articles'))->save(); $taxonomy = $taxonomy->collection($collection); - $this->assertEquals('/blog/tags', $taxonomy->uri()); - $this->assertEquals('/blog/tags', $taxonomy->url()); - $this->assertEquals('http://localhost/blog/tags', $taxonomy->absoluteUrl()); + $this->assertEquals('/blog-articles/tags', $taxonomy->uri()); + $this->assertEquals('/blog-articles/tags', $taxonomy->url()); + $this->assertEquals('http://localhost/blog-articles/tags', $taxonomy->absoluteUrl()); + } } #[Test] From b5de4fa6460b6ee113be896d95292794812893ec Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 12:52:54 -0400 Subject: [PATCH 09/16] Add test for collections with no mount --- tests/Data/Taxonomies/TaxonomyTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/Data/Taxonomies/TaxonomyTest.php b/tests/Data/Taxonomies/TaxonomyTest.php index 8cc80b7973..408f9a98f6 100644 --- a/tests/Data/Taxonomies/TaxonomyTest.php +++ b/tests/Data/Taxonomies/TaxonomyTest.php @@ -183,6 +183,18 @@ public function it_gets_the_url_with_a_collection_that_has_a_mount() $this->assertEquals('/blog-articles/tags', $taxonomy->url()); $this->assertEquals('http://localhost/blog-articles/tags', $taxonomy->absoluteUrl()); } + + #[Test] + public function it_gets_the_url_with_a_collection_that_has_no_mount() + { + $taxonomy = tap((new Taxonomy)->handle('tags'))->save(); + $collection = tap(Collection::make('blog_articles')->taxonomies(['tags']))->save(); + + $taxonomy = $taxonomy->collection($collection); + + $this->assertEquals('/blog-articles/tags', $taxonomy->uri()); + $this->assertEquals('/blog-articles/tags', $taxonomy->url()); + $this->assertEquals('http://localhost/blog-articles/tags', $taxonomy->absoluteUrl()); } #[Test] From 2d06e61e4b669e8eca878b5b9ccd200949c69a4c Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 13:41:39 -0400 Subject: [PATCH 10/16] Assign collection to taxonomy --- src/Taxonomies/Term.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Taxonomies/Term.php b/src/Taxonomies/Term.php index 667b9f466e..b826aec4ed 100644 --- a/src/Taxonomies/Term.php +++ b/src/Taxonomies/Term.php @@ -58,7 +58,7 @@ public function taxonomy($taxonomy = null) }) ->getter(function ($taxonomy) { return $taxonomy ? Blink::once("taxonomy-{$taxonomy}", function () use ($taxonomy) { - return Taxonomy::findByHandle($taxonomy); + return Taxonomy::findByHandle($taxonomy)?->collection($this->collection()); }) : null; }) ->args(func_get_args()); From 4d6c685f7079a739397ddc2f2c002414806a4ac6 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 14:11:17 -0400 Subject: [PATCH 11/16] Fix tests --- tests/Antlers/Runtime/ParserIsolationTest.php | 2 +- tests/Data/Taxonomies/TermTest.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Antlers/Runtime/ParserIsolationTest.php b/tests/Antlers/Runtime/ParserIsolationTest.php index fcbcb5a748..5c91f25748 100644 --- a/tests/Antlers/Runtime/ParserIsolationTest.php +++ b/tests/Antlers/Runtime/ParserIsolationTest.php @@ -84,7 +84,7 @@ public function test_parser_isolation_considers_all_options_after_taxonomy() $expected = <<<'EOT' - + diff --git a/tests/Data/Taxonomies/TermTest.php b/tests/Data/Taxonomies/TermTest.php index b2352c3bb7..fef59d01b3 100644 --- a/tests/Data/Taxonomies/TermTest.php +++ b/tests/Data/Taxonomies/TermTest.php @@ -74,6 +74,7 @@ public function the_blueprint_is_blinked_when_getting_and_flushed_when_setting() $taxonomy = Mockery::mock(Taxonomy::make('tags')); $taxonomy->shouldReceive('termBlueprint')->with(null, $term)->once()->andReturn('the old blueprint'); $taxonomy->shouldReceive('termBlueprint')->with('new', $term)->once()->andReturn('the new blueprint'); + $taxonomy->shouldReceive('collection')->with(null)->andReturn($taxonomy); Taxonomy::shouldReceive('findByHandle')->with('tags')->andReturn($taxonomy); $this->assertEquals('the old blueprint', $term->blueprint()); From 51483b089e14046f18e7c8dcae7b11956c65adf8 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 14:29:31 -0400 Subject: [PATCH 12/16] =?UTF-8?q?=F0=9F=8D=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Taxonomies/LocalizedTerm.php | 50 ++++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/Taxonomies/LocalizedTerm.php b/src/Taxonomies/LocalizedTerm.php index adff581424..58c4cf72e4 100644 --- a/src/Taxonomies/LocalizedTerm.php +++ b/src/Taxonomies/LocalizedTerm.php @@ -3,38 +3,38 @@ namespace Statamic\Taxonomies; use ArrayAccess; -use Statamic\Facades; -use Statamic\Statamic; -use Statamic\Facades\URL; -use Statamic\Support\Str; -use Statamic\Facades\Site; -use Statamic\Facades\Blink; -use Statamic\Facades\Antlers; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Responsable; use Illuminate\Support\Carbon; -use Statamic\Data\Publishable; -use Statamic\Routing\Routable; -use Statamic\Search\Searchable; -use Statamic\Revisions\Revisable; -use Statamic\GraphQL\ResolvesValues; -use Statamic\Data\TracksLastModified; +use Statamic\Contracts\Auth\Protect\Protectable; +use Statamic\Contracts\Data\Augmentable; use Statamic\Contracts\Data\Augmented; +use Statamic\Contracts\Data\BulkAugmentable; +use Statamic\Contracts\Data\Localization; +use Statamic\Contracts\GraphQL\ResolvesValues as ResolvesValuesContract; +use Statamic\Contracts\Query\ContainsQueryableValues; +use Statamic\Contracts\Search\Searchable as SearchableContract; use Statamic\Contracts\Taxonomies\Term; +use Statamic\Contracts\Taxonomies\TermRepository; +use Statamic\Data\ContainsSupplementalData; use Statamic\Data\HasAugmentedInstance; +use Statamic\Data\Publishable; +use Statamic\Data\TracksLastModified; use Statamic\Data\TracksQueriedColumns; -use Statamic\Contracts\Data\Augmentable; -use Statamic\Contracts\Data\Localization; use Statamic\Data\TracksQueriedRelations; -use Statamic\Http\Responses\DataResponse; -use Illuminate\Contracts\Support\Arrayable; -use Statamic\Data\ContainsSupplementalData; -use Statamic\Contracts\Data\BulkAugmentable; -use Illuminate\Contracts\Support\Responsable; use Statamic\Exceptions\NotFoundHttpException; -use Statamic\Contracts\Auth\Protect\Protectable; -use Statamic\Contracts\Taxonomies\TermRepository; -use Statamic\Contracts\Query\ContainsQueryableValues; -use Statamic\Contracts\Search\Searchable as SearchableContract; -use Statamic\Contracts\GraphQL\ResolvesValues as ResolvesValuesContract; +use Statamic\Facades; +use Statamic\Facades\Antlers; +use Statamic\Facades\Blink; +use Statamic\Facades\Site; +use Statamic\Facades\URL; +use Statamic\GraphQL\ResolvesValues; +use Statamic\Http\Responses\DataResponse; +use Statamic\Revisions\Revisable; +use Statamic\Routing\Routable; +use Statamic\Search\Searchable; +use Statamic\Statamic; +use Statamic\Support\Str; class LocalizedTerm implements Arrayable, ArrayAccess, Augmentable, BulkAugmentable, ContainsQueryableValues, Localization, Protectable, ResolvesValuesContract, Responsable, SearchableContract, Term { From 2e83023fc144d4f3a0b82685e0059bd52bcbd999 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 14:49:37 -0400 Subject: [PATCH 13/16] Fix condition --- src/Taxonomies/LocalizedTerm.php | 2 +- src/Taxonomies/Taxonomy.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Taxonomies/LocalizedTerm.php b/src/Taxonomies/LocalizedTerm.php index 58c4cf72e4..6dabf126f1 100644 --- a/src/Taxonomies/LocalizedTerm.php +++ b/src/Taxonomies/LocalizedTerm.php @@ -347,7 +347,7 @@ public function route() { $taxonomySlug = Str::replace('_', '-', $this->taxonomyHandle()); - if (! $this->taxonomy()->isAssignedToCollection()) { + if ($this->collection() && ! $this->taxonomy()->isAssignedToCollection()) { return URL::tidy("/{$taxonomySlug}/{slug}"); } diff --git a/src/Taxonomies/Taxonomy.php b/src/Taxonomies/Taxonomy.php index 869857f2c8..ad1f04b4ce 100644 --- a/src/Taxonomies/Taxonomy.php +++ b/src/Taxonomies/Taxonomy.php @@ -342,7 +342,7 @@ public function uri() { $taxonomySlug = Str::replace('_', '-', $this->handle); - if (! $this->isAssignedToCollection()) { + if ($this->collection() && ! $this->isAssignedToCollection()) { return URL::tidy("/{$taxonomySlug}"); } @@ -369,7 +369,7 @@ public function collections() public function isAssignedToCollection() { - return $this->collection() && $this->collections()->contains($this->collection()); + return $this->collections()->contains($this->collection()); } public function toResponse($request) From 9734bb8c7ac886b5791458ddccb31034b6c1c18c Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Thu, 11 Jul 2024 16:23:51 -0400 Subject: [PATCH 14/16] Fix condition --- src/Taxonomies/LocalizedTerm.php | 2 +- src/Taxonomies/Taxonomy.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Taxonomies/LocalizedTerm.php b/src/Taxonomies/LocalizedTerm.php index 6dabf126f1..58c4cf72e4 100644 --- a/src/Taxonomies/LocalizedTerm.php +++ b/src/Taxonomies/LocalizedTerm.php @@ -347,7 +347,7 @@ public function route() { $taxonomySlug = Str::replace('_', '-', $this->taxonomyHandle()); - if ($this->collection() && ! $this->taxonomy()->isAssignedToCollection()) { + if (! $this->taxonomy()->isAssignedToCollection()) { return URL::tidy("/{$taxonomySlug}/{slug}"); } diff --git a/src/Taxonomies/Taxonomy.php b/src/Taxonomies/Taxonomy.php index ad1f04b4ce..7824fd7e0e 100644 --- a/src/Taxonomies/Taxonomy.php +++ b/src/Taxonomies/Taxonomy.php @@ -342,7 +342,7 @@ public function uri() { $taxonomySlug = Str::replace('_', '-', $this->handle); - if ($this->collection() && ! $this->isAssignedToCollection()) { + if (! $this->isAssignedToCollection()) { return URL::tidy("/{$taxonomySlug}"); } From 384f5853c87389eefefcf21b7d564340bb957d88 Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Fri, 12 Jul 2024 09:26:11 -0400 Subject: [PATCH 15/16] Fix test --- tests/Stache/Stores/TaxonomiesStoreTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/Stache/Stores/TaxonomiesStoreTest.php b/tests/Stache/Stores/TaxonomiesStoreTest.php index b457a7cb45..57d046eba5 100644 --- a/tests/Stache/Stores/TaxonomiesStoreTest.php +++ b/tests/Stache/Stores/TaxonomiesStoreTest.php @@ -6,6 +6,7 @@ use Illuminate\Filesystem\Filesystem; use PHPUnit\Framework\Attributes\Test; use Statamic\Contracts\Taxonomies\Taxonomy; +use Statamic\Facades\Collection; use Statamic\Facades\Path; use Statamic\Facades\Taxonomy as TaxonomyAPI; use Statamic\Stache\Stache; @@ -100,6 +101,8 @@ public function it_uses_the_filename_as_the_item_key() #[Test] public function it_saves_to_disk() { + Collection::shouldReceive('all')->andReturn(collect()); + $taxonomy = TaxonomyAPI::make('new'); $this->store->save($taxonomy); From ee48dff72d48cd82819d88873feaf8bbc17e1260 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Fri, 19 Jul 2024 16:32:48 -0400 Subject: [PATCH 16/16] add test for collections taxonomies method --- tests/Data/Entries/CollectionTest.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/Data/Entries/CollectionTest.php b/tests/Data/Entries/CollectionTest.php index a751ec419f..4869231431 100644 --- a/tests/Data/Entries/CollectionTest.php +++ b/tests/Data/Entries/CollectionTest.php @@ -9,6 +9,7 @@ use PHPUnit\Framework\Attributes\Test; use Statamic\Contracts\Data\Augmentable; use Statamic\Contracts\Entries\Entry; +use Statamic\Contracts\Taxonomies\Taxonomy; use Statamic\Entries\Collection; use Statamic\Events\CollectionCreated; use Statamic\Events\CollectionCreating; @@ -431,6 +432,26 @@ public function it_dispatches_an_event_when_getting_entry_blueprint() }); } + #[Test] + public function it_gets_and_sets_taxonomies() + { + Facades\Taxonomy::make('tags')->save(); + Facades\Taxonomy::make('categories')->save(); + Facades\Taxonomy::make('sizes')->save(); + + $collection = Facades\Collection::make('test')->save(); + $this->assertInstanceOf(\Illuminate\Support\Collection::class, $collection->taxonomies()); + $this->assertEquals([], $collection->taxonomies()->all()); + + $return = $collection->taxonomies(['tags', 'categories']); + + $this->assertEquals($collection, $return); + $this->assertInstanceOf(\Illuminate\Support\Collection::class, $taxonomies = $collection->taxonomies()); + $this->assertEveryItemIsInstanceOf(Taxonomy::class, $taxonomies); + $this->assertEquals(['test', 'test'], $taxonomies->map(fn ($taxonomy) => $taxonomy->collection()?->handle())->all()); + $this->assertEquals(['tags', 'categories'], $taxonomies->map->handle()->all()); + } + #[Test] public function it_gets_sort_field_and_direction() {