Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
"mikey179/vfsstream": "^1.6",
"overblog/graphiql-bundle": "^1.0",
"phpspec/phpspec": "^7.1",
"phpstan/phpstan": "^1.10",
"phpstan/phpstan-phpunit": "^1.3",
"phpstan/phpstan-symfony": "^1.3"
"phpstan/phpstan": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-symfony": "^2.0"
},
"autoload": {
"psr-4": {
Expand Down
1,885 changes: 614 additions & 1,271 deletions phpstan-baseline.neon

Large diffs are not rendered by default.

66 changes: 36 additions & 30 deletions spec/InputMapper/SearchQueryMapperSpec.php
Original file line number Diff line number Diff line change
@@ -1,145 +1,150 @@
<?php

/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/

namespace spec\Ibexa\GraphQL\InputMapper;

use Ibexa\Contracts\Core\Repository\Values\Content\Query;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Subtree;
use Ibexa\GraphQL\InputMapper\ContentCollectionFilterBuilder;
use Ibexa\GraphQL\InputMapper\SearchQueryMapper;
use Ibexa\Contracts\Core\Repository\Values\Content\Query;
use PhpSpec\ObjectBehavior;

class SearchQueryMapperSpec extends ObjectBehavior
{
function let(ContentCollectionFilterBuilder $filterBuilder)
public function let(ContentCollectionFilterBuilder $filterBuilder): void
{
$this->beConstructedWith($filterBuilder);

$filterBuilder->buildFilter()->willReturn(new Subtree('/1/2/'));
}

function it_is_initializable()
public function it_is_initializable(): void
{
$this->shouldHaveType(SearchQueryMapper::class);
}

public function it_maps_ContentTypeIdentifier_to_a_ContentTypeIdentifier_criterion()
public function it_maps_ContentTypeIdentifier_to_a_ContentTypeIdentifier_criterion(): void
{
$this->mapInputToQuery(['ContentTypeIdentifier' => ['article']])->shouldFilterByContentType(['article']);
}

public function it_maps_Text_to_a_FullText_criterion()
public function it_maps_Text_to_a_FullText_criterion(): void
{
$this
->mapInputToQuery(['Text' => 'graphql'])
->shouldFilterByFullText('graphql');
}

public function it_maps_Modified_before_to_a_created_lte_DateMetaData_criterion()
public function it_maps_Modified_before_to_a_created_lte_DateMetaData_criterion(): void
{
$this
->mapInputToQuery(['Modified' => ['before' => '1977/05/04']])
->shouldFilterByDateModified(Query\Criterion\Operator::LTE, '1977/05/04');
}

public function it_maps_Modified_on_to_a_created_eq_DateMetaData_criterion()
public function it_maps_Modified_on_to_a_created_eq_DateMetaData_criterion(): void
{
$this
->mapInputToQuery(['Modified' => ['on' => '1977/05/04']])
->shouldFilterByDateModified(Query\Criterion\Operator::EQ, '1977/05/04');
}

public function it_maps_Modified_after_to_a_created_gte_DateMetaData_criterion()
public function it_maps_Modified_after_to_a_created_gte_DateMetaData_criterion(): void
{
$this
->mapInputToQuery(['Modified' => ['after' => '1977/05/04']])
->shouldFilterByDateModified(Query\Criterion\Operator::GTE, '1977/05/04');
}

public function it_maps_Created_before_to_a_created_lte_DateMetaData_criterion()
public function it_maps_Created_before_to_a_created_lte_DateMetaData_criterion(): void
{
$this
->mapInputToQuery(['Created' => ['before' => '1977/05/04']])
->shouldFilterByDateCreated(Query\Criterion\Operator::LTE, '1977/05/04');
}

public function it_maps_Created_on_to_a_created_eq_DateMetaData_criterion()
public function it_maps_Created_on_to_a_created_eq_DateMetaData_criterion(): void
{
$this
->mapInputToQuery(['Created' => ['on' => '1977/05/04']])
->shouldFilterByDateCreated(Query\Criterion\Operator::EQ, '1977/05/04');
}

public function it_maps_Created_after_to_a_created_gte_DateMetaData_criterion()
public function it_maps_Created_after_to_a_created_gte_DateMetaData_criterion(): void
{
$this
->mapInputToQuery(['Created' => ['after' => '1977/05/04']])
->shouldFilterByDateCreated(Query\Criterion\Operator::GTE, '1977/05/04');
}

function it_maps_Field_to_a_Field_criterion()
public function it_maps_Field_to_a_Field_criterion(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'eq' => 'bar']])
->shouldFilterByField('target_field');
}

function it_maps_Field_target_to_the_Field_criterion_target()
public function it_maps_Field_target_to_the_Field_criterion_target(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'eq' => 'bar']])
->shouldFilterByField('target_field', Query\Criterion\Operator::EQ, 'bar');
}

function it_maps_Field_with_value_at_operator_key_to_the_Field_criterion_value()
public function it_maps_Field_with_value_at_operator_key_to_the_Field_criterion_value(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'eq' => 'bar']])
->shouldFilterByField('target_field', null, 'bar');
}

function it_maps_Field_operator_eq_to_Field_criterion_operator_EQ()
public function it_maps_Field_operator_eq_to_Field_criterion_operator_EQ(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'eq' => 'bar']])
->shouldFilterByFieldWithOperator(Query\Criterion\Operator::EQ);
}

function it_maps_Field_operator_in_to_Field_criterion_operator_IN()
public function it_maps_Field_operator_in_to_Field_criterion_operator_IN(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'eq' => 'bar']])
->shouldFilterByFieldWithOperator(Query\Criterion\Operator::EQ);
}

function it_maps_Field_operator_lt_to_Field_criterion_operator_LT()
public function it_maps_Field_operator_lt_to_Field_criterion_operator_LT(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'lt' => 'bar']])
->shouldFilterByFieldWithOperator(Query\Criterion\Operator::LT);
}

function it_maps_Field_operator_lte_to_Field_criterion_operator_LTE()
public function it_maps_Field_operator_lte_to_Field_criterion_operator_LTE(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'lte' => 'bar']])
->shouldFilterByFieldWithOperator(Query\Criterion\Operator::LTE);
}

function it_maps_Field_operator_gte_to_Field_criterion_operator_GTE()
public function it_maps_Field_operator_gte_to_Field_criterion_operator_GTE(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'gte' => 'bar']])
->shouldFilterByFieldWithOperator(Query\Criterion\Operator::GTE);
}

function it_maps_Field_operator_gt_to_Field_criterion_operator_GT()
public function it_maps_Field_operator_gt_to_Field_criterion_operator_GT(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'gt' => 'bar']])
->shouldFilterByFieldWithOperator(Query\Criterion\Operator::GT);
}

function it_maps_Field_operator_between_to_Field_criterion_operator_BETWEEN()
public function it_maps_Field_operator_between_to_Field_criterion_operator_BETWEEN(): void
{
$this
->mapInputToQuery(['Field' => ['target' => 'target_field', 'between' => [10, 20]]])
Expand All @@ -149,7 +154,7 @@ function it_maps_Field_operator_between_to_Field_criterion_operator_BETWEEN()
public function getMatchers(): array
{
return [
'filterByContentType' => function(Query $query, array $contentTypes) {
'filterByContentType' => function (Query $query, array $contentTypes): bool {
$criterion = $this->findCriterionInQueryFilter(
$query,
Query\Criterion\ContentTypeIdentifier::class
Expand All @@ -161,7 +166,7 @@ public function getMatchers(): array

return $criterion->value === $contentTypes;
},
'filterByFullText' => function(Query $query, $text) {
'filterByFullText' => function (Query $query, $text): bool {
$criterion = $this->findCriterionInQueryFilter(
$query,
Query\Criterion\FullText::class
Expand All @@ -173,7 +178,7 @@ public function getMatchers(): array

return $criterion->value === $text;
},
'filterByDateModified' => function(Query $query, $operator, $date) {
'filterByDateModified' => function (Query $query, $operator, $date): bool {
$criterion = $this->findCriterionInQueryFilter($query, Query\Criterion\DateMetadata::class);

if ($criterion === null) {
Expand All @@ -187,7 +192,7 @@ public function getMatchers(): array
return $criterion->operator == $operator
&& $criterion->value[0] == strtotime($date);
},
'filterByDateCreated' => function(Query $query, $operator, $date) {
'filterByDateCreated' => function (Query $query, $operator, $date): bool {
$criterion = $this->findCriterionInQueryFilter($query, Query\Criterion\DateMetadata::class);

if ($criterion === null) {
Expand All @@ -201,7 +206,7 @@ public function getMatchers(): array
return $criterion->operator == $operator
&& $criterion->value[0] == strtotime($date);
},
'filterByField' => function(Query $query, $field, $operator = null, $value = null) {
'filterByField' => function (Query $query, $field, $operator = null, $value = null): bool {
$criterion = $this->findCriterionInQueryFilter($query, Query\Criterion\Field::class);

if ($criterion === null) {
Expand All @@ -215,20 +220,21 @@ public function getMatchers(): array
if ($operator !== null && $criterion->operator != $operator) {
return false;
}
return ($value === null || $criterion->value == $value);

return $value === null || $criterion->value == $value;
},
'filterByFieldWithOperator' => function(Query $query, $operator) {
'filterByFieldWithOperator' => function (Query $query, $operator): bool {
$criterion = $this->findCriterionInQueryFilter($query, Query\Criterion\Field::class);
if ($criterion === null) {
return false;
}

return $criterion->operator == $operator;
}
},
];
}

private function findCriterionInQueryFilter(Query $query, $searchedCriterionClass)
private function findCriterionInQueryFilter(Query $query, string $searchedCriterionClass)
{
if ($query->filter instanceof Query\Criterion\LogicalOperator) {
return $this->findCriterionInCriterion($query->filter, $searchedCriterionClass);
Expand Down
Loading
Loading