diff --git a/src/Query/Scopes/Filters/Fields/FieldtypeFilter.php b/src/Query/Scopes/Filters/Fields/FieldtypeFilter.php index a846175fac..5ec1767648 100644 --- a/src/Query/Scopes/Filters/Fields/FieldtypeFilter.php +++ b/src/Query/Scopes/Filters/Fields/FieldtypeFilter.php @@ -84,8 +84,6 @@ public function badge($values) public function isComplete($values): bool { - $values = array_filter($values); - if (! $operator = Arr::get($values, 'operator')) { return false; } @@ -94,6 +92,8 @@ public function isComplete($values): bool return true; } - return Arr::has($values, 'value'); + $value = Arr::get($values, 'value'); + + return $value !== null && $value !== ''; } } diff --git a/tests/Query/FieldtypeFilterTest.php b/tests/Query/FieldtypeFilterTest.php new file mode 100644 index 0000000000..5aa3e14f23 --- /dev/null +++ b/tests/Query/FieldtypeFilterTest.php @@ -0,0 +1,36 @@ +setField(new Field('test', ['type' => 'text']))->filter(); + + $this->assertEquals($expected, $filter->isComplete($values)); + } + + public static function completenessProvider() + { + return [ + 'no operator' => [['value' => 'foo'], false], + 'operator but no value' => [['operator' => '='], false], + 'operator and value' => [['operator' => '=', 'value' => 'foo'], true], + 'zero string value' => [['operator' => '=', 'value' => '0'], true], + 'zero integer value' => [['operator' => '=', 'value' => 0], true], + 'null value' => [['operator' => '=', 'value' => null], false], + 'empty string value' => [['operator' => '=', 'value' => ''], false], + 'null operator without value' => [['operator' => 'null'], true], + 'not-null operator without value' => [['operator' => 'not-null'], true], + ]; + } +}