testHandlerTransformsSearchTextFields()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
c 0
b 0
f 0
rs 8.8571
cc 1
eloc 17
nc 1
nop 0
1
<?php
2
namespace Netdudes\DataSourceryBundle\Tests\Query;
3
4
use Netdudes\DataSourceryBundle\DataSource\Configuration\Field;
5
use Netdudes\DataSourceryBundle\DataType\SearchTextDataType;
6
use Netdudes\DataSourceryBundle\DataType\StringDataType;
7
use Netdudes\DataSourceryBundle\Query\Filter;
8
use Netdudes\DataSourceryBundle\Query\FilterCondition;
9
use Netdudes\DataSourceryBundle\Query\SearchTextFieldHandler;
10
use Netdudes\DataSourceryBundle\Query\SearchTextFilterConditionTransformer;
11
use PHPUnit\Framework\TestCase;
12
use Prophecy\Argument;
13
14
class SearchTextFieldHandlerTest extends TestCase
15
{
16
    public function testHandlerDoesNotTransformNonSearchTextFields()
17
    {
18
        $fieldName = 'fieldName';
19
20
        $field = $this->prophesize(Field::class);
21
        $field->getUniqueName()->willReturn($fieldName);
22
        $field->getDataType()->willReturn(new StringDataType());
23
        $dataSourceFields = [$field->reveal()];
24
25
        $filterCondition = $this->prophesize(FilterCondition::class);
26
        $filterCondition->getFieldName()->willReturn($fieldName);
27
        $filter = new Filter([$filterCondition->reveal()]);
28
29
        $transformer = $this->prophesize(SearchTextFilterConditionTransformer::class);
30
        $transformer->transform(Argument::any(), Argument::any())->shouldNotBeCalled();
31
32
        $handler = new SearchTextFieldHandler($transformer->reveal());
33
        $handler->handle($filter, $dataSourceFields);
34
35
        $this->assertInstanceOf(Filter::class, $filter);
36
        $this->assertCount(1, $filter);
37
        $this->assertSame($filterCondition->reveal(), $filter[0]);
38
    }
39
40
    public function testHandlerTransformsSearchTextFields()
41
    {
42
        $fieldName = 'fieldName';
43
44
        $field = $this->prophesize(Field::class);
45
        $field->getUniqueName()->willReturn($fieldName);
46
        $field->getDataType()->willReturn(new SearchTextDataType());
47
        $dataSourceFields = [$field->reveal()];
48
49
        $filterCondition = $this->prophesize(FilterCondition::class);
50
        $filterCondition->getFieldName()->willReturn($fieldName);
51
        $filter = new Filter([$filterCondition->reveal()]);
52
53
        $transformedFilterCondition = $this->prophesize(FilterCondition::class);
54
55
        $transformer = $this->prophesize(SearchTextFilterConditionTransformer::class);
56
        $transformer->transform($filterCondition, $dataSourceFields)->shouldBeCalled()->willReturn($transformedFilterCondition);
57
58
        $handler = new SearchTextFieldHandler($transformer->reveal());
59
        $handler->handle($filter, $dataSourceFields);
60
61
        $this->assertInstanceOf(Filter::class, $filter);
62
        $this->assertCount(1, $filter);
63
        $this->assertSame($transformedFilterCondition->reveal(), $filter[0]);
64
    }
65
66
    public function testHandlerTransformsSearchTextFieldsForNestedFilterConditions()
67
    {
68
        $fieldName = 'fieldName';
69
70
        $field = $this->prophesize(Field::class);
71
        $field->getUniqueName()->willReturn($fieldName);
72
        $field->getDataType()->willReturn(new SearchTextDataType());
73
        $dataSourceFields = [$field->reveal()];
74
75
        $filterCondition = $this->prophesize(FilterCondition::class);
76
        $filterCondition->getFieldName()->willReturn($fieldName);
77
        $subFilter = new Filter([$filterCondition->reveal()]);
78
        $filter = new Filter([$subFilter]);
79
80
        $transformedFilterCondition = $this->prophesize(FilterCondition::class);
81
82
        $transformer = $this->prophesize(SearchTextFilterConditionTransformer::class);
83
        $transformer->transform($filterCondition, $dataSourceFields)->shouldBeCalled()->willReturn($transformedFilterCondition);
84
85
        $handler = new SearchTextFieldHandler($transformer->reveal());
86
        $handler->handle($filter, $dataSourceFields);
87
88
        $this->assertInstanceOf(Filter::class, $filter);
89
        $this->assertCount(1, $filter);
90
        $this->assertSame($subFilter, $filter[0]);
91
        $this->assertCount(1, $subFilter);
92
        $this->assertSame($transformedFilterCondition->reveal(), $subFilter[0]);
93
    }
94
}
95