Completed
Push — refonte ( fa24e9...7ea448 )
by Arnaud
02:06
created

ORMSubscriberTest::testAddOrderWithSort()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 56

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 56
rs 8.9599
c 0
b 0
f 0
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace LAG\AdminBundle\Tests\Bridge\Doctrine\ORM\Event\Subscriber;
4
5
use Doctrine\ORM\QueryBuilder;
6
use LAG\AdminBundle\Admin\ActionInterface;
7
use LAG\AdminBundle\Admin\AdminInterface;
8
use LAG\AdminBundle\Bridge\Doctrine\ORM\Event\Subscriber\ORMSubscriber;
9
use LAG\AdminBundle\Configuration\ActionConfiguration;
10
use LAG\AdminBundle\Event\AdminEvents;
11
use LAG\AdminBundle\Event\DoctrineOrmFilterEvent;
12
use LAG\AdminBundle\Filter\FilterInterface;
13
use LAG\AdminBundle\Tests\AdminTestBase;
14
use Symfony\Component\HttpFoundation\Request;
15
use Symfony\Component\HttpFoundation\RequestStack;
16
17
class ORMSubscriberTest extends AdminTestBase
18
{
19
    public function testGetSubscribedEvents()
20
    {
21
        $events = ORMSubscriber::getSubscribedEvents();
22
        $this->assertArrayHasKey(AdminEvents::DOCTRINE_ORM_FILTER, $events);
23
        $this->assertContains('addOrder', $events[AdminEvents::DOCTRINE_ORM_FILTER][0]);
24
        $this->assertContains('addFilters', $events[AdminEvents::DOCTRINE_ORM_FILTER][1]);
25
    }
26
27
    public function testAddOrder()
28
    {
29
        $request = new Request();
30
31
        $requestStack = $this->getMockWithoutConstructor(RequestStack::class);
32
        $requestStack
33
            ->expects($this->atLeastOnce())
34
            ->method('getMasterRequest')
35
            ->willReturn($request)
36
        ;
37
        $admin = $this->getMockWithoutConstructor(AdminInterface::class);
38
        $action = $this->getMockWithoutConstructor(ActionInterface::class);
39
40
        $configuration = $this->getMockWithoutConstructor(ActionConfiguration::class);
41
        $configuration
42
            ->expects($this->once())
43
            ->method('getParameter')
44
            ->with('order')
45
            ->willReturn([
46
                'id' => 'desc',
47
            ])
48
        ;
49
50
        $queryBuilder = $this->getMockWithoutConstructor(QueryBuilder::class);
51
        $queryBuilder
52
            ->expects($this->once())
53
            ->method('getRootAliases')
54
            ->willReturn([
55
                'entity',
56
            ])
57
        ;
58
        $queryBuilder
59
            ->expects($this->once())
60
            ->method('addOrderBy')
61
            ->with('entity.id', 'desc')
62
        ;
63
64
        $event = $this->getMockWithoutConstructor(DoctrineOrmFilterEvent::class);
65
        $event
66
            ->expects($this->once())
67
            ->method('getQueryBuilder')
68
            ->willReturn($queryBuilder)
69
        ;
70
        $event
71
            ->expects($this->once())
72
            ->method('getAdmin')
73
            ->willReturn($admin)
74
        ;
75
        $admin
76
            ->expects($this->once())
77
            ->method('getAction')
78
            ->willReturn($action)
79
        ;
80
        $action
81
            ->expects($this->once())
82
            ->method('getConfiguration')
83
            ->willReturn($configuration)
84
        ;
85
86
        $subscriber = new ORMSubscriber($requestStack);
87
        $subscriber->addOrder($event);
88
    }
89
90
    public function testAddOrderWithSort()
91
    {
92
        $request = new Request([
93
            'sort' => 'name',
94
        ]);
95
96
        $requestStack = $this->getMockWithoutConstructor(RequestStack::class);
97
        $requestStack
98
            ->expects($this->atLeastOnce())
99
            ->method('getMasterRequest')
100
            ->willReturn($request)
101
        ;
102
        $admin = $this->getMockWithoutConstructor(AdminInterface::class);
103
        $action = $this->getMockWithoutConstructor(ActionInterface::class);
104
105
        $configuration = $this->getMockWithoutConstructor(ActionConfiguration::class);
106
107
        $queryBuilder = $this->getMockWithoutConstructor(QueryBuilder::class);
108
        $queryBuilder
109
            ->expects($this->once())
110
            ->method('getRootAliases')
111
            ->willReturn([
112
                'entity',
113
            ])
114
        ;
115
        $queryBuilder
116
            ->expects($this->once())
117
            ->method('addOrderBy')
118
            ->with('entity.name', 'asc')
119
        ;
120
121
        $event = $this->getMockWithoutConstructor(DoctrineOrmFilterEvent::class);
122
        $event
123
            ->expects($this->once())
124
            ->method('getQueryBuilder')
125
            ->willReturn($queryBuilder)
126
        ;
127
        $event
128
            ->expects($this->once())
129
            ->method('getAdmin')
130
            ->willReturn($admin)
131
        ;
132
        $admin
133
            ->expects($this->once())
134
            ->method('getAction')
135
            ->willReturn($action)
136
        ;
137
        $action
138
            ->expects($this->once())
139
            ->method('getConfiguration')
140
            ->willReturn($configuration)
141
        ;
142
143
        $subscriber = new ORMSubscriber($requestStack);
144
        $subscriber->addOrder($event);
145
    }
146
147
    public function testAddFilters()
148
    {
149
        $requestStack = $this->getMockWithoutConstructor(RequestStack::class);
150
        $queryBuilder = $this->getMockWithoutConstructor(QueryBuilder::class);
151
        $queryBuilder
152
            ->expects($this->once())
153
            ->method('getRootAliases')
154
            ->willReturn([
155
                'entity',
156
            ])
157
        ;
158
        $queryBuilder
159
            ->expects($this->once())
160
            ->method('andWhere')
161
            ->with('entity.name like :filter_name')
162
        ;
163
        $queryBuilder
164
            ->expects($this->once())
165
            ->method('setParameter')
166
            ->with('filter_name', '%test%')
167
        ;
168
169
        $filter1 = $this->getMockWithoutConstructor(FilterInterface::class);
170
        $filter1
171
            ->method('getName')
172
            ->willReturn('name')
173
        ;
174
        $filter1
175
            ->method('getOperator')
176
            ->willReturn('like')
177
        ;
178
        $filter1
179
            ->expects($this->once())
180
            ->method('getValue')
181
            ->willReturn('test')
182
        ;
183
184
        $event = $this->getMockWithoutConstructor(DoctrineOrmFilterEvent::class);
185
        $event
186
            ->expects($this->once())
187
            ->method('getQueryBuilder')
188
            ->willReturn($queryBuilder)
189
        ;
190
        $event
191
            ->expects($this->once())
192
            ->method('getFilters')
193
            ->willReturn([
194
                $filter1,
195
            ])
196
        ;
197
198
        $subscriber = new ORMSubscriber($requestStack);
199
        $subscriber->addFilters($event);
200
    }
201
}
202