From 2d0ededeb1762ee3741da8b07a86fb020e6de41a Mon Sep 17 00:00:00 2001 From: LRLJoe Date: Fri, 28 Feb 2025 21:27:08 +0000 Subject: [PATCH 1/4] Clean up DateRangeFilter - broken pills, and missing test --- src/Traits/Filters/HandlesPillsData.php | 2 +- .../Filters/Helpers/FilterPillsHelpers.php | 4 +++- src/Views/Filters/DateRangeFilter.php | 4 ++++ .../Views/Filters/DateRangeFilterTest.php | 21 +++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Traits/Filters/HandlesPillsData.php b/src/Traits/Filters/HandlesPillsData.php index 47302988e..adab60983 100644 --- a/src/Traits/Filters/HandlesPillsData.php +++ b/src/Traits/Filters/HandlesPillsData.php @@ -11,7 +11,7 @@ public function getPillDataForFilter(): array $filters = []; foreach ($this->getAppliedFiltersWithValuesForPills() as $filterKey => $value) { - if (! is_null($filter = $this->getFilterByKey($filterKey))) { + if (! is_null($filter = $this->getFilterByKey($filterKey)) && !$filter->isEmpty($filter->validate($value))) { $filters[$filter->getKey()] = FilterPillData::make( filterKey: $filter->getKey(), customPillBlade: $filter->getCustomPillBlade() ?? null, diff --git a/src/Traits/Filters/Helpers/FilterPillsHelpers.php b/src/Traits/Filters/Helpers/FilterPillsHelpers.php index 5f881b81b..fc096bca7 100644 --- a/src/Traits/Filters/Helpers/FilterPillsHelpers.php +++ b/src/Traits/Filters/Helpers/FilterPillsHelpers.php @@ -49,11 +49,13 @@ public function getAppliedFiltersWithValuesForPills(): array } $validatedValue = $filter->validate($item); + if ($filter instanceof BooleanFilter) { return ! ($filter->isEmpty($validatedValue)); - } elseif ($validatedValue === null || $validatedValue === 'null') { + } elseif ($validatedValue === null || $validatedValue === 'null' || $filter->isEmpty($validatedValue)) { return false; } elseif (is_array($validatedValue)) { + $filter->isEmpty($validatedValue); if (array_key_exists(0, $validatedValue) && (is_null($validatedValue[0]) || $validatedValue[0] == 'null')) { return false; } diff --git a/src/Views/Filters/DateRangeFilter.php b/src/Views/Filters/DateRangeFilter.php index eb8777d2b..c3b22efa9 100644 --- a/src/Views/Filters/DateRangeFilter.php +++ b/src/Views/Filters/DateRangeFilter.php @@ -198,6 +198,10 @@ public function getFilterPillValue($value): array|string|bool|null public function isEmpty(array|string|null $value): bool { + if(is_null($value) || empty($value)) + { + return true; + } $values = []; if (is_array($value)) { if (! isset($value['minDate']) || ! isset($value['maxDate'])) { diff --git a/tests/Unit/Views/Filters/DateRangeFilterTest.php b/tests/Unit/Views/Filters/DateRangeFilterTest.php index a6dccecac..7cf90659c 100644 --- a/tests/Unit/Views/Filters/DateRangeFilterTest.php +++ b/tests/Unit/Views/Filters/DateRangeFilterTest.php @@ -435,4 +435,25 @@ public function test_check_if_can_get_locale(): void $this->assertSame('de', self::$filterInstance->getPillsLocale()); $this->assertTrue(self::$filterInstance->hasPillsLocale()); } + + public function test_can_check_validation_rejects_invalid_values_array(): void + { + $missingStartDate = self::$filterInstance->validate([null,'2020-01-01']); + $missingEndDate = self::$filterInstance->validate(['2020-01-01', null]); + $missingBoth = self::$filterInstance->validate([null,null]); + + $this->assertFalse($missingStartDate); + $this->assertFalse($missingEndDate); + $this->assertFalse($missingBoth); + $this->assertTrue(self::$filterInstance->isEmpty($missingStartDate)); + $this->assertTrue(self::$filterInstance->isEmpty($missingEndDate)); + $this->assertTrue(self::$filterInstance->isEmpty($missingBoth)); + } + + public function test_can_check_validation_rejects_broken_values_array(): void + { + $this->assertFalse(self::$filterInstance->validate(['minDate' => 'asdf', 'maxDate' => '2020-02-02'])); + } + + } From e429a02c236348d996d4c3eae1f0052b5786e04e Mon Sep 17 00:00:00 2001 From: lrljoe <104938042+lrljoe@users.noreply.github.com> Date: Fri, 28 Feb 2025 21:28:24 +0000 Subject: [PATCH 2/4] Fix styling --- src/Traits/Filters/HandlesPillsData.php | 2 +- src/Views/Filters/DateRangeFilter.php | 3 +-- tests/Unit/Views/Filters/DateRangeFilterTest.php | 6 ++---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Traits/Filters/HandlesPillsData.php b/src/Traits/Filters/HandlesPillsData.php index adab60983..07c9cc630 100644 --- a/src/Traits/Filters/HandlesPillsData.php +++ b/src/Traits/Filters/HandlesPillsData.php @@ -11,7 +11,7 @@ public function getPillDataForFilter(): array $filters = []; foreach ($this->getAppliedFiltersWithValuesForPills() as $filterKey => $value) { - if (! is_null($filter = $this->getFilterByKey($filterKey)) && !$filter->isEmpty($filter->validate($value))) { + if (! is_null($filter = $this->getFilterByKey($filterKey)) && ! $filter->isEmpty($filter->validate($value))) { $filters[$filter->getKey()] = FilterPillData::make( filterKey: $filter->getKey(), customPillBlade: $filter->getCustomPillBlade() ?? null, diff --git a/src/Views/Filters/DateRangeFilter.php b/src/Views/Filters/DateRangeFilter.php index c3b22efa9..1e69d8261 100644 --- a/src/Views/Filters/DateRangeFilter.php +++ b/src/Views/Filters/DateRangeFilter.php @@ -198,8 +198,7 @@ public function getFilterPillValue($value): array|string|bool|null public function isEmpty(array|string|null $value): bool { - if(is_null($value) || empty($value)) - { + if (is_null($value) || empty($value)) { return true; } $values = []; diff --git a/tests/Unit/Views/Filters/DateRangeFilterTest.php b/tests/Unit/Views/Filters/DateRangeFilterTest.php index 7cf90659c..0ca6d2f78 100644 --- a/tests/Unit/Views/Filters/DateRangeFilterTest.php +++ b/tests/Unit/Views/Filters/DateRangeFilterTest.php @@ -438,9 +438,9 @@ public function test_check_if_can_get_locale(): void public function test_can_check_validation_rejects_invalid_values_array(): void { - $missingStartDate = self::$filterInstance->validate([null,'2020-01-01']); + $missingStartDate = self::$filterInstance->validate([null, '2020-01-01']); $missingEndDate = self::$filterInstance->validate(['2020-01-01', null]); - $missingBoth = self::$filterInstance->validate([null,null]); + $missingBoth = self::$filterInstance->validate([null, null]); $this->assertFalse($missingStartDate); $this->assertFalse($missingEndDate); @@ -454,6 +454,4 @@ public function test_can_check_validation_rejects_broken_values_array(): void { $this->assertFalse(self::$filterInstance->validate(['minDate' => 'asdf', 'maxDate' => '2020-02-02'])); } - - } From 95e37090e1d429a4d913740935997719bacdb69d Mon Sep 17 00:00:00 2001 From: LRLJoe Date: Fri, 28 Feb 2025 21:56:21 +0000 Subject: [PATCH 3/4] Clean up DateRangeFilter - broken pills, and missing test --- src/Views/Filters/DateRangeFilter.php | 6 ++---- tests/Unit/Views/Filters/DateRangeFilterTest.php | 5 +++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Views/Filters/DateRangeFilter.php b/src/Views/Filters/DateRangeFilter.php index 1e69d8261..f7702dbc2 100644 --- a/src/Views/Filters/DateRangeFilter.php +++ b/src/Views/Filters/DateRangeFilter.php @@ -40,12 +40,10 @@ public function validate(array|string|null $values): array|bool return false; } - $startDate = $this->createCarbonDate($returnedValues['minDate']); - $endDate = $this->createCarbonDate($returnedValues['maxDate']); - - if (! ($startDate instanceof Carbon) || ! ($endDate instanceof Carbon)) { + if (! (($startDate = $this->createCarbonDate($returnedValues['minDate'])) instanceof Carbon) || ! (($endDate = $this->createCarbonDate($returnedValues['maxDate'])) instanceof Carbon)) { return false; } + if ($startDate->gt($endDate)) { return false; } diff --git a/tests/Unit/Views/Filters/DateRangeFilterTest.php b/tests/Unit/Views/Filters/DateRangeFilterTest.php index 0ca6d2f78..68fd31f8a 100644 --- a/tests/Unit/Views/Filters/DateRangeFilterTest.php +++ b/tests/Unit/Views/Filters/DateRangeFilterTest.php @@ -453,5 +453,10 @@ public function test_can_check_validation_rejects_invalid_values_array(): void public function test_can_check_validation_rejects_broken_values_array(): void { $this->assertFalse(self::$filterInstance->validate(['minDate' => 'asdf', 'maxDate' => '2020-02-02'])); + $this->assertFalse(self::$filterInstance->validate(['minDate' => '4121-31-31', 'maxDate' => '2020-02-02'])); + $this->assertFalse(self::$filterInstance->validate(['minDate' => '2020-02-02', 'maxDate' => 'asdf'])); + $this->assertFalse(self::$filterInstance->validate(['minDate' => '2020-02-02', 'maxDate' => '4121-31-31'])); + + } } From 5b4cb015fa79ec4c034777470e4172cf863dd2b5 Mon Sep 17 00:00:00 2001 From: lrljoe <104938042+lrljoe@users.noreply.github.com> Date: Fri, 28 Feb 2025 21:56:49 +0000 Subject: [PATCH 4/4] Fix styling --- src/Views/Filters/DateRangeFilter.php | 2 +- tests/Unit/Views/Filters/DateRangeFilterTest.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Views/Filters/DateRangeFilter.php b/src/Views/Filters/DateRangeFilter.php index f7702dbc2..a115b7939 100644 --- a/src/Views/Filters/DateRangeFilter.php +++ b/src/Views/Filters/DateRangeFilter.php @@ -43,7 +43,7 @@ public function validate(array|string|null $values): array|bool if (! (($startDate = $this->createCarbonDate($returnedValues['minDate'])) instanceof Carbon) || ! (($endDate = $this->createCarbonDate($returnedValues['maxDate'])) instanceof Carbon)) { return false; } - + if ($startDate->gt($endDate)) { return false; } diff --git a/tests/Unit/Views/Filters/DateRangeFilterTest.php b/tests/Unit/Views/Filters/DateRangeFilterTest.php index 68fd31f8a..c7c0b7e62 100644 --- a/tests/Unit/Views/Filters/DateRangeFilterTest.php +++ b/tests/Unit/Views/Filters/DateRangeFilterTest.php @@ -457,6 +457,5 @@ public function test_can_check_validation_rejects_broken_values_array(): void $this->assertFalse(self::$filterInstance->validate(['minDate' => '2020-02-02', 'maxDate' => 'asdf'])); $this->assertFalse(self::$filterInstance->validate(['minDate' => '2020-02-02', 'maxDate' => '4121-31-31'])); - } }