From d3adf1307a386e482028f457186c82ec0147a131 Mon Sep 17 00:00:00 2001 From: Eduard Lupacescu Date: Thu, 17 Dec 2020 14:35:32 +0200 Subject: [PATCH 1/3] Adding extra data to filters. --- src/Filter.php | 21 ++++++++++++--- .../Feature/Filters/FilterDefinitionTest.php | 26 ++++++++++++++++++- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/Filter.php b/src/Filter.php index bf69baef4..2fb7d4571 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -26,6 +26,8 @@ abstract class Filter implements JsonSerializable public $relatedRepositoryKey; + public $relatedRepositoryTitle; + public Repository $repository; public function __construct() @@ -114,6 +116,13 @@ public function setRelatedRepositoryKey(string $repositoryKey): self return $this; } + public function setRelatedRepositoryTitle(string $title): self + { + $this->relatedRepositoryTitle = $title; + + return $this; + } + public function setRepository(Repository $repository): self { $this->repository = $repository; @@ -121,12 +130,17 @@ public function setRepository(Repository $repository): self return $this; } - public function getRelatedRepositoryUrl(): ?string + public function getRelatedRepository(): ?array { return ($key = $this->getRelatedRepositoryKey()) ? with(Restify::repositoryForKey($key), function ($repository = null) { if (is_subclass_of($repository, Repository::class)) { - return Restify::path($repository::uriKey()); + return [ + 'key' => $repository::uriKey(), + 'url' => Restify::path($repository::uriKey()), + 'display_key' => $this->relatedRepositoryTitle ?? $repository::$title, + 'label' => $repository::label(), + ]; } }) : null; @@ -161,8 +175,7 @@ public function jsonSerialize() ], function (array $initial) { return $this->relatedRepositoryKey ? array_merge($initial, [ - 'related_repository_key' => $this->getRelatedRepositoryKey(), - 'related_repository_url' => $this->getRelatedRepositoryUrl(), + 'repository' => $this->getRelatedRepository(), ]) : $initial; }); diff --git a/tests/Feature/Filters/FilterDefinitionTest.php b/tests/Feature/Filters/FilterDefinitionTest.php index b8c16d9b6..d7d04c68f 100644 --- a/tests/Feature/Filters/FilterDefinitionTest.php +++ b/tests/Feature/Filters/FilterDefinitionTest.php @@ -31,7 +31,31 @@ public function test_filters_can_have_definition() $this->getJson('posts/filters?only=matches,searchables,sortables') ->assertJsonFragment([ - 'related_repository_key' => 'users', + 'key' => 'users', + ]); + } + + public function test_match_definitions_includes_title() + { + PostRepository::$match = [ + 'user_id' => MatchFilter::make() + ->setType('int') + ->setRelatedRepositoryKey(UserRepository::uriKey()), + ]; + + $this->getJson('posts/filters?only=matches') + ->dump() + ->assertJsonStructure([ + 'data' => [ + [ + 'repository' => [ + 'key', + 'url', + 'display_key', + 'label', + ] + ] + ] ]); } } From 5ff74e9d51abc25e813183a9a175f66af3e8f649 Mon Sep 17 00:00:00 2001 From: Lupacescu Eduard Date: Thu, 17 Dec 2020 14:35:56 +0200 Subject: [PATCH 2/3] Apply fixes from StyleCI (#312) --- tests/Feature/Filters/FilterDefinitionTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Feature/Filters/FilterDefinitionTest.php b/tests/Feature/Filters/FilterDefinitionTest.php index d7d04c68f..266c6fa19 100644 --- a/tests/Feature/Filters/FilterDefinitionTest.php +++ b/tests/Feature/Filters/FilterDefinitionTest.php @@ -53,9 +53,9 @@ public function test_match_definitions_includes_title() 'url', 'display_key', 'label', - ] - ] - ] + ], + ], + ], ]); } } From f78530e63c877cbc861a168a27356011adb77bae Mon Sep 17 00:00:00 2001 From: Eduard Lupacescu Date: Thu, 17 Dec 2020 14:48:23 +0200 Subject: [PATCH 3/3] tests --- tests/Feature/Filters/FilterDefinitionTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Feature/Filters/FilterDefinitionTest.php b/tests/Feature/Filters/FilterDefinitionTest.php index d7d04c68f..12f24db56 100644 --- a/tests/Feature/Filters/FilterDefinitionTest.php +++ b/tests/Feature/Filters/FilterDefinitionTest.php @@ -41,6 +41,8 @@ public function test_match_definitions_includes_title() 'user_id' => MatchFilter::make() ->setType('int') ->setRelatedRepositoryKey(UserRepository::uriKey()), + + 'title' => 'string', ]; $this->getJson('posts/filters?only=matches')