diff --git a/config/data_index_filters.yaml b/config/data_index_filters.yaml index e412cf93a..5c5cc05d9 100644 --- a/config/data_index_filters.yaml +++ b/config/data_index_filters.yaml @@ -68,6 +68,9 @@ services: Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\SelectFilter: tags: [ 'pimcore.studio_backend.search_index.filter' ] + Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\BooleanFilter: + tags: [ 'pimcore.studio_backend.search_index.filter' ] + # DataObject Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\ClassNameFilter: tags: [ 'pimcore.studio_backend.search_index.data_object.filter' ] @@ -78,9 +81,6 @@ services: Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\ClassIdsFilter: tags: [ 'pimcore.studio_backend.search_index.data_object.filter' ] - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\BooleanFilter: - tags: [ 'pimcore.studio_backend.search_index.data_object.filter' ] - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\Classificationstore\StringFilter: tags: [ 'pimcore.studio_backend.search_index.data_object.filter' ] @@ -104,28 +104,3 @@ services: Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\CRM\ConsentFilter: tags: [ 'pimcore.studio_backend.search_index.data_object.filter' ] - - # Asset Metadata - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\SelectFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\InputFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\TextAreaFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\CheckboxFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\DateFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\AssetFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\DocumentFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] - - Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\ObjectFilter: - tags: [ 'pimcore.studio_backend.search_index.asset.filter' ] diff --git a/doc/03_Grid.md b/doc/03_Grid.md index a00ca75f6..a737ed36a 100644 --- a/doc/03_Grid.md +++ b/doc/03_Grid.md @@ -31,14 +31,6 @@ Available filters are: | Type | filterValue | Options | `key` required | |:----------------------------------------:|:------------------:|:----------------------------------:|:--------------:| -| metadata.select | string | | true | -| metadata.date | object of ISO 8601 | `from`, `to`, or `on` | true | -| metadata.input | string | | true | -| metadata.checkbox | boolean | | true | -| metadata.textarea | string | | true | -| metadata.object | integer | ID of the object | true | -| metadata.document | integer | ID fo the document | true | -| metadata.asset | integer | ID fo the asset | true | | system.string | string | Wildcard search can be used | true | | system.datetime | object of ISO 8601 | `from`, `to`, or `on` | true | | system.tag | object | `considerChildTags`, `tags` | false | diff --git a/src/DataIndex/Filter/Asset/Metadata/AssetFilter.php b/src/DataIndex/Filter/Asset/Metadata/AssetFilter.php deleted file mode 100644 index e8cf8fa1a..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/AssetFilter.php +++ /dev/null @@ -1,58 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_ASSET->value) as $column) { - $assetQuery = $this->applyAssetFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyAssetFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_int($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for asset must be a integer (ID of the asset)'); - } - - $query->filterMetadata($column->getKey(), FilterType::ASSET->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/CheckboxFilter.php b/src/DataIndex/Filter/Asset/Metadata/CheckboxFilter.php deleted file mode 100644 index 6ac729651..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/CheckboxFilter.php +++ /dev/null @@ -1,58 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_CHECKBOX->value) as $column) { - $assetQuery = $this->applyCheckboxFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyCheckboxFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_bool($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for checkbox must be a boolean'); - } - - $query->filterMetadata($column->getKey(), FilterType::CHECKBOX->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/DateFilter.php b/src/DataIndex/Filter/Asset/Metadata/DateFilter.php deleted file mode 100644 index 6ec4819ce..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/DateFilter.php +++ /dev/null @@ -1,87 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_DATE->value) as $column) { - $assetQuery = $this->applyDateFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyDateFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_array($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for this filter must be an array'); - } - - $this->setFilterValue($column->getFilterValue()); - - $filterValue = $column->getFilterValue(); - - if (isset($filterValue['on'])) { - $query->filterMetadata( - $column->getKey(), - FilterType::DATE->value, - [GenericDateFilter::PARAM_ON => $this->getOnAsCarbon()] - ); - } - - if (isset($filterValue['to'])) { - $query->filterMetadata( - $column->getKey(), - FilterType::DATE->value, - [GenericDateFilter::PARAM_END => $this->getToAsCarbon()] - ); - } - - if (isset($filterValue['from'])) { - $query->filterMetadata( - $column->getKey(), - FilterType::DATE->value, - [GenericDateFilter::PARAM_START => $this->getFromAsCarbon()] - ); - } - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/DocumentFilter.php b/src/DataIndex/Filter/Asset/Metadata/DocumentFilter.php deleted file mode 100644 index 57c4c3553..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/DocumentFilter.php +++ /dev/null @@ -1,58 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_DOCUMENT->value) as $column) { - $assetQuery = $this->applyDocumentFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyDocumentFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_int($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for document must be a integer (ID of the document)'); - } - - $query->filterMetadata($column->getKey(), FilterType::DOCUMENT->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/FilterType.php b/src/DataIndex/Filter/Asset/Metadata/FilterType.php deleted file mode 100644 index 680ce6c1a..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/FilterType.php +++ /dev/null @@ -1,27 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_INPUT->value) as $column) { - $assetQuery = $this->applyInputFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyInputFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_string($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for input must be a string'); - } - - $query->filterMetadata($column->getKey(), FilterType::INPUT->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/ObjectFilter.php b/src/DataIndex/Filter/Asset/Metadata/ObjectFilter.php deleted file mode 100644 index 0f34770e4..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/ObjectFilter.php +++ /dev/null @@ -1,58 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_DATA_OBJECT->value) as $column) { - $assetQuery = $this->applyAssetFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyAssetFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_int($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for object must be a integer (ID of the object)'); - } - - $query->filterMetadata($column->getKey(), FilterType::OBJECT->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/SelectFilter.php b/src/DataIndex/Filter/Asset/Metadata/SelectFilter.php deleted file mode 100644 index 428986b4b..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/SelectFilter.php +++ /dev/null @@ -1,58 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_SELECT->value) as $column) { - $assetQuery = $this->applySelectFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applySelectFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_string($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for select must be a string'); - } - - $query->filterMetadata($column->getKey(), FilterType::SELECT->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/Asset/Metadata/TextAreaFilter.php b/src/DataIndex/Filter/Asset/Metadata/TextAreaFilter.php deleted file mode 100644 index 0af84fb0e..000000000 --- a/src/DataIndex/Filter/Asset/Metadata/TextAreaFilter.php +++ /dev/null @@ -1,58 +0,0 @@ -validateParameterType($parameters); - $assetQuery = $this->validateQueryType($query); - - if (!$parameters || !$assetQuery) { - return $query; - } - - foreach ($parameters->getColumnFilterByType(ColumnType::METADATA_TEXTAREA->value) as $column) { - $assetQuery = $this->applyTextAreaFilter($column, $assetQuery); - } - - return $assetQuery; - } - - private function applyTextAreaFilter(ColumnFilter $column, AssetQueryInterface $query): AssetQueryInterface - { - if (!is_string($column->getFilterValue())) { - throw new InvalidArgumentException('Filter value for textarea must be a string'); - } - - $query->filterMetadata($column->getKey(), FilterType::TEXTAREA->value, $column->getFilterValue()); - - return $query; - } -} diff --git a/src/DataIndex/Filter/DataObject/BooleanFilter.php b/src/DataIndex/Filter/BooleanFilter.php similarity index 80% rename from src/DataIndex/Filter/DataObject/BooleanFilter.php rename to src/DataIndex/Filter/BooleanFilter.php index e7198550c..0ee201f2d 100644 --- a/src/DataIndex/Filter/DataObject/BooleanFilter.php +++ b/src/DataIndex/Filter/BooleanFilter.php @@ -11,10 +11,8 @@ * @license Pimcore Open Core License (POCL) */ -namespace Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject; +namespace Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter; -use Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\FilterInterface; -use Pimcore\Bundle\StudioBackendBundle\DataIndex\Query\DataObjectQueryInterface; use Pimcore\Bundle\StudioBackendBundle\DataIndex\Query\QueryInterface; use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException; use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ColumnType; @@ -32,10 +30,6 @@ public function apply(mixed $parameters, QueryInterface $query): QueryInterface return $query; } - if (!$query instanceof DataObjectQueryInterface) { - return $query; - } - foreach ($parameters->getColumnFilterByType(ColumnType::SYSTEM_BOOLEAN->value) as $column) { if (!is_array($column->getFilterValue())) { throw new InvalidArgumentException('Filter value for this filter must be a array'); diff --git a/src/DataIndex/Query/AssetQuery.php b/src/DataIndex/Query/AssetQuery.php index aceb7caa1..abbb570c9 100644 --- a/src/DataIndex/Query/AssetQuery.php +++ b/src/DataIndex/Query/AssetQuery.php @@ -22,6 +22,7 @@ use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IntegerFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\NumberFilter; +use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\BooleanMultiSelectFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\DateFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\MultiSelectFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\NumberRangeFilter; @@ -230,4 +231,11 @@ public function filterMultiSelect( return $this; } + + public function booleanFilter(string $fieldName, array $values): self + { + $this->search->addModifier(new BooleanMultiSelectFilter($fieldName, $values)); + + return $this; + } } diff --git a/src/DataIndex/Query/DataObjectQueryInterface.php b/src/DataIndex/Query/DataObjectQueryInterface.php index 2b63c0e21..dae1184ef 100644 --- a/src/DataIndex/Query/DataObjectQueryInterface.php +++ b/src/DataIndex/Query/DataObjectQueryInterface.php @@ -40,8 +40,6 @@ public function setClassDefinition(string $classDefinitionId): self; public function setClassDefinitionIds(array $classDefinitionIds): self; - public function booleanFilter(string $fieldName, array $values): self; - public function classificationStoreFilter( string $fieldName, string $group, diff --git a/src/DataIndex/Query/DocumentQuery.php b/src/DataIndex/Query/DocumentQuery.php index fd7135622..aaf5e27b1 100644 --- a/src/DataIndex/Query/DocumentQuery.php +++ b/src/DataIndex/Query/DocumentQuery.php @@ -22,6 +22,7 @@ use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IntegerFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\NumberFilter; +use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\BooleanMultiSelectFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\DateFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\MultiSelectFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\NumberRangeFilter; @@ -238,4 +239,11 @@ public function filterMultiSelect( return $this; } + + public function booleanFilter(string $fieldName, array $values): self + { + $this->search->addModifier(new BooleanMultiSelectFilter($fieldName, $values)); + + return $this; + } } diff --git a/src/DataIndex/Query/QueryInterface.php b/src/DataIndex/Query/QueryInterface.php index 78c60d426..673a3297f 100644 --- a/src/DataIndex/Query/QueryInterface.php +++ b/src/DataIndex/Query/QueryInterface.php @@ -88,4 +88,6 @@ public function filterMultiSelect( array $values, bool $enablePqlFieldNameResolution = true ): self; + + public function booleanFilter(string $fieldName, array $values): self; } diff --git a/src/Listing/Filter/DateFilter.php b/src/Listing/Filter/DateFilter.php index b89c243b6..3b212b3d1 100644 --- a/src/Listing/Filter/DateFilter.php +++ b/src/Listing/Filter/DateFilter.php @@ -14,8 +14,8 @@ namespace Pimcore\Bundle\StudioBackendBundle\Listing\Filter; use Carbon\Carbon; -use Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\Metadata\FilterType; use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException; +use Pimcore\Bundle\StudioBackendBundle\Filter\FilterType; use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\ColumnFilter; use Pimcore\Model\Listing\AbstractListing; use function is_array; diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/AssetFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/AssetFilterTest.php deleted file mode 100644 index 046bc352f..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/AssetFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'not_at'); - - $stringFilter = new AssetFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for asset must be a integer (ID of the asset)'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyAssetFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 1); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::ASSET->value, $type); - $this->assertSame(1, $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new AssetFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/CheckboxFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/CheckboxFilterTest.php deleted file mode 100644 index 06cd52932..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/CheckboxFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'not_bool'); - - $stringFilter = new CheckboxFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for checkbox must be a boolean'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyCheckboxFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', true); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::CHECKBOX->value, $type); - $this->assertSame(true, $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new CheckboxFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/DateFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/DateFilterTest.php deleted file mode 100644 index d2e704051..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/DateFilterTest.php +++ /dev/null @@ -1,112 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'not_array'); - - $stringFilter = new DateFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for this filter must be an array'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyDateFilterForOn(): void - { - $time = Carbon::parse('2025-06-10T00:00:00+00:00'); - $columnFilterMock = $this->getColumnFilterMock('key', 'type', ['on' => $time]); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) use ($time) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::DATE->value, $type); - $this->assertSame( - $time->toDateTimeString(), - $value[GenericDateFilter::PARAM_ON]->toDateTimeString() - ); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new DateFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyDateFilterForTo(): void - { - $time = Carbon::parse('2025-06-10T00:00:00+00:00'); - $columnFilterMock = $this->getColumnFilterMock('key', 'type', ['to' => $time]); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) use ($time) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::DATE->value, $type); - $this->assertSame( - $time->toDateTimeString(), - $value[GenericDateFilter::PARAM_END]->toDateTimeString() - ); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new DateFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyDateFilterForFrom(): void - { - $time = Carbon::parse('2025-06-10T00:00:00+00:00'); - $columnFilterMock = $this->getColumnFilterMock('key', 'type', ['from' => $time]); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) use ($time) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::DATE->value, $type); - $this->assertSame( - $time->toDateTimeString(), - $value[GenericDateFilter::PARAM_START]->toDateTimeString() - ); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new DateFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/DocumentFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/DocumentFilterTest.php deleted file mode 100644 index 92ad2c0a2..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/DocumentFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'not_int'); - - $stringFilter = new DocumentFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for document must be a integer (ID of the document)'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyDocumentFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 1); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::DOCUMENT->value, $type); - $this->assertSame(1, $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new DocumentFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/InputFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/InputFilterTest.php deleted file mode 100644 index 536a90594..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/InputFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 123); - - $stringFilter = new InputFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for input must be a string'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyInputFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'test_value'); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::INPUT->value, $type); - $this->assertSame('test_value', $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new InputFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/ObjectFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/ObjectFilterTest.php deleted file mode 100644 index 9530660ec..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/ObjectFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'not_int'); - - $stringFilter = new ObjectFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for object must be a integer (ID of the object)'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyObjectFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 1); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::OBJECT->value, $type); - $this->assertSame(1, $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new ObjectFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/SelectFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/SelectFilterTest.php deleted file mode 100644 index a3cb486ed..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/SelectFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 123); - - $stringFilter = new SelectFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for select must be a string'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplySelectFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'value'); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::SELECT->value, $type); - $this->assertSame('value', $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new SelectFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/TextAreaFilterTest.php b/tests/Unit/DataIndex/Filter/Asset/Metadata/TextAreaFilterTest.php deleted file mode 100644 index ccb9b5e16..000000000 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/TextAreaFilterTest.php +++ /dev/null @@ -1,62 +0,0 @@ -makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::never(), - ]); - - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 123); - - $stringFilter = new TextAreaFilter(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Filter value for textarea must be a string'); - $stringFilter->apply($columnFilterMock, $queryMock); - } - - public function testApplyTextAreaFilter(): void - { - $columnFilterMock = $this->getColumnFilterMock('key', 'type', 'value'); - - $queryMock = $this->makeEmpty(AssetQueryInterface::class, [ - 'filterMetadata' => Expected::once(function ($key, $type, $value) { - $this->assertSame('key', $key); - $this->assertSame(FilterType::TEXTAREA->value, $type); - $this->assertSame('value', $value); - - return $this->makeEmpty(AssetQueryInterface::class); - }), - ]); - - $textAreaFilter = new TextAreaFilter(); - $textAreaFilter->apply($columnFilterMock, $queryMock); - } -} diff --git a/tests/Unit/DataIndex/Filter/Asset/Metadata/ColumnFilterMockTrait.php b/tests/Unit/DataIndex/Filter/ColumnFilterMockTrait.php similarity index 97% rename from tests/Unit/DataIndex/Filter/Asset/Metadata/ColumnFilterMockTrait.php rename to tests/Unit/DataIndex/Filter/ColumnFilterMockTrait.php index 70cd2fc59..fbde59c57 100644 --- a/tests/Unit/DataIndex/Filter/Asset/Metadata/ColumnFilterMockTrait.php +++ b/tests/Unit/DataIndex/Filter/ColumnFilterMockTrait.php @@ -11,7 +11,7 @@ * @license Pimcore Open Core License (POCL) */ -namespace Pimcore\Bundle\StudioBackendBundle\Tests\Unit\DataIndex\Filter\Asset\Metadata; +namespace Pimcore\Bundle\StudioBackendBundle\Tests\Unit\DataIndex\Filter; use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\ColumnFilter; use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\ColumnFiltersParameterInterface; diff --git a/tests/Unit/DataIndex/Filter/DatetimeFilterTest.php b/tests/Unit/DataIndex/Filter/DatetimeFilterTest.php index 7d9a1932c..2e2fa64ea 100644 --- a/tests/Unit/DataIndex/Filter/DatetimeFilterTest.php +++ b/tests/Unit/DataIndex/Filter/DatetimeFilterTest.php @@ -21,7 +21,6 @@ use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException; use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\ColumnFilter; use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\ColumnFiltersParameterInterface; -use Pimcore\Bundle\StudioBackendBundle\Tests\Unit\DataIndex\Filter\Asset\Metadata\ColumnFilterMockTrait; /** * @internal