From 609bed83ff480b93e68553a085beac3e5efd06aa Mon Sep 17 00:00:00 2001 From: Lupacescu Eduard Date: Thu, 17 Dec 2020 14:53:33 +0200 Subject: [PATCH] Adding extra data to filters. (#311) * Adding extra data to filters. * Apply fixes from StyleCI (#312) * tests --- src/Filter.php | 21 +++++++++++--- .../Feature/Filters/FilterDefinitionTest.php | 28 ++++++++++++++++++- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/Filter.php b/src/Filter.php index bf69baef..2fb7d457 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 b8c16d9b..cba6e8d4 100644 --- a/tests/Feature/Filters/FilterDefinitionTest.php +++ b/tests/Feature/Filters/FilterDefinitionTest.php @@ -31,7 +31,33 @@ 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()), + + 'title' => 'string', + ]; + + $this->getJson('posts/filters?only=matches') + ->dump() + ->assertJsonStructure([ + 'data' => [ + [ + 'repository' => [ + 'key', + 'url', + 'display_key', + 'label', + ], + ], + ], ]); } }