From ca97f18a077258926512c088819e18f0bb211719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=2E=20Nagy=20Gerg=C5=91?= Date: Fri, 26 Jan 2024 13:47:34 +0100 Subject: [PATCH] filter tests --- src/Filters/Select.php | 12 +++++- tests/Filters/FilterTest.php | 63 +++++++++++++++++++++++++++++ tests/Filters/SelectFilterTest.php | 64 ++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 tests/Filters/FilterTest.php create mode 100644 tests/Filters/SelectFilterTest.php diff --git a/src/Filters/Select.php b/src/Filters/Select.php index f74e0b13..32ad3fe0 100644 --- a/src/Filters/Select.php +++ b/src/Filters/Select.php @@ -26,7 +26,7 @@ public function getValue(Request $request): mixed { $default = parent::getValue($request); - return $this->multiple ? Arr::wrap($default) : $default; + return $this->isMultiple() ? Arr::wrap($default) : $default; } /** @@ -39,6 +39,14 @@ public function multiple(bool $value = true): static return $this; } + /** + * Determine if the filter is multiple. + */ + public function isMultiple(): bool + { + return $this->multiple; + } + /** * {@inheritdoc} */ @@ -49,6 +57,6 @@ public function toField(): Field return $this->options($request); })) ->value(fn (Request $request): mixed => $this->getValue($request)) - ->multiple($this->multiple); + ->multiple($this->isMultiple()); } } diff --git a/tests/Filters/FilterTest.php b/tests/Filters/FilterTest.php new file mode 100644 index 00000000..c6956b5e --- /dev/null +++ b/tests/Filters/FilterTest.php @@ -0,0 +1,63 @@ +filter = new class() extends Filter + { + public function __construct() + { + $this->setKey('foo'); + } + + public function getName(): string + { + return 'Test Filter'; + } + + public function apply(Request $request, Builder $query, mixed $value): Builder + { + return $query; + } + }; + } + + public function test_a_filter_has_keys(): void + { + $this->assertSame('foo', $this->filter->getKey()); + $this->assertSame('foo', $this->filter->getRequestKey()); + } + + public function test_a_filter_has_name(): void + { + $this->assertSame('Test Filter', $this->filter->getName()); + } + + public function test_a_filter_resolves_value_from_request(): void + { + $this->app['request']->merge(['foo' => 'value']); + + $this->assertSame( + 'value', $this->filter->getValue($this->app['request']) + ); + } + + public function test_a_filter_can_be_active(): void + { + $this->app['request']->merge(['foo' => 'value']); + + $this->assertTrue($this->filter->isActive($this->app['request'])); + } +} diff --git a/tests/Filters/SelectFilterTest.php b/tests/Filters/SelectFilterTest.php new file mode 100644 index 00000000..a699ca39 --- /dev/null +++ b/tests/Filters/SelectFilterTest.php @@ -0,0 +1,64 @@ +filter = new class() extends Select + { + public function __construct() + { + $this->setKey('foo'); + } + + public function apply(Request $request, Builder $query, mixed $value): Builder + { + return $query; + } + + public function options(Request $request): array + { + return [ + 'test' => 'value', + 'foo' => 'bar', + ]; + } + }; + } + + public function test_a_select_filter_has_options(): void + { + $this->assertSame( + ['test' => 'value', 'foo' => 'bar'], + $this->filter->options($this->app['request']) + ); + } + + public function test_a_select_filter_can_have_multiple_values(): void + { + $this->app['request']->merge(['foo' => 'value']); + + $this->assertFalse($this->filter->isMultiple()); + $this->assertSame( + 'value', $this->filter->getValue($this->app['request']) + ); + + $this->filter->multiple(); + + $this->assertTrue($this->filter->isMultiple()); + $this->assertSame( + ['value'], $this->filter->getValue($this->app['request']) + ); + } +}