ConciergeControllerTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 201
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 5
Bugs 0 Features 0
Metric Value
wmc 5
c 5
b 0
f 0
lcom 1
cbo 5
dl 0
loc 201
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setUpBeforeClass() 0 4 1
B theTicketSearchApiShouldWork() 0 39 1
A eventCheckin() 0 60 1
B doubleCheckinShouldNotWork() 0 38 1
B checkinsOnTheWrongDayShouldNotWork() 0 32 1
1
<?php
2
3
/**
4
 * @author    Markus Tacker <[email protected]>
5
 * @copyright 2013-2016 Verein zur Förderung der Netzkultur im Rhein-Main-Gebiet e.V. | http://netzkultur-rheinmain.de/
6
 */
7
8
namespace BCRM\WebBundle\Tests\Functional;
9
10
use BCRM\BackendBundle\Entity\Event\Ticket;
11
12
class ConciergeControllerTest extends Base
13
{
14
    /**
15
     * The setUpBeforeClass() and tearDownAfterClass() template methods are called before the first test of the test
16
     * case class is run and after the last test of the test case class is run, respectively.
17
     */
18
    public static function setUpBeforeClass()
19
    {
20
        static::resetDatabase();
21
    }
22
23
    /**
24
     * @test
25
     * @group functional
26
     */
27
    public function eventCheckin()
28
    {
29
        $client    = static::createClient();
30
        $container = $client->getContainer();
31
32
        /* @var $em \Doctrine\Common\Persistence\ObjectManager */
33
        $em = $container
34
            ->get('doctrine')
35
            ->getManager();
36
37
        // Create a ticket
38
        $event  = $em->getRepository('BCRMBackendBundle:Event\Event')->findAll()[0];
39
        $ticket = new Ticket();
40
        $ticket->setEmail('[email protected]');
41
        $ticket->setName('John Doe');
42
        $ticket->setEvent($event);
43
        $ticket->setDay(Ticket::DAY_SUNDAY);
44
        $ticket->setCode('WOOT');
45
        $em->persist($ticket);
46
        $em->flush();
47
48
        $ticket = $em->getRepository('BCRMBackendBundle:Event\Ticket')->findOneBy(array('code' => 'WOOT'));
49
        $this->assertEquals(false, $ticket->isCheckedIn());
50
51
        $client   = static::createClient(array(), array(
52
            'PHP_AUTH_USER' => 'concierge',
53
            'PHP_AUTH_PW'   => 'letmein',
54
        ));
55
        $crawler  = $client->request('GET', sprintf('/checkin/%d/%s', $ticket->getId(), $ticket->getCode()));
56
        $response = $client->getResponse();
57
        $this->assertEquals(200, $response->getStatusCode());
58
59
        // Page must contain correct ticket details
60
        $this->assertGreaterThan(
61
            0,
62
            $crawler->filter('html:contains("John Doe")')->count(),
63
            'Visitor name is not shown'
64
        );
65
        $this->assertGreaterThan(
66
            0,
67
            $crawler->filter('html:contains("WOOT")')->count(),
68
            'Ticket code is not shown'
69
        );
70
        $this->assertGreaterThan(
71
            0,
72
            $crawler->filter('html:contains("Sonntag")')->count(),
73
            'Ticket day is not shown'
74
        );
75
76
        /* @var $ticket Ticket */
77
        $qb = $em->getRepository('BCRMBackendBundle:Event\Ticket')->createQueryBuilder('t');
78
        $qb->andWhere('t.code = :code')->setParameter('code', 'WOOT');
79
        $qb->andWhere('t.checkedIn IS NOT NULL');
80
        $ticket = $qb->getQuery()->getOneOrNullResult();
81
82
        // $this->assertEquals(true, $ticket->isCheckedIn()); // FIXME: actually it is 1, possible bug in Doctrine 
0 ignored issues
show
Unused Code Comprehensibility introduced by
69% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
83
        $this->assertEquals('WOOT', $ticket->getCode());
84
        $em->remove($ticket);
85
        $em->flush();
86
    }
87
88
    /**
89
     * @test
90
     * @depends eventCheckin
91
     */
92
    public function doubleCheckinShouldNotWork()
93
    {
94
        $client    = static::createClient();
95
        $container = $client->getContainer();
96
97
        /* @var $em \Doctrine\Common\Persistence\ObjectManager */
98
        $em = $container
99
            ->get('doctrine')
100
            ->getManager();
101
102
        // Create a ticket
103
        $event  = $em->getRepository('BCRMBackendBundle:Event\Event')->findAll()[0];
104
        $ticket = new Ticket();
105
        $ticket->setEmail('[email protected]');
106
        $ticket->setName('John Doe');
107
        $ticket->setEvent($event);
108
        $ticket->setDay(Ticket::DAY_SUNDAY);
109
        $ticket->setCode('DBLCHKN');
110
        $em->persist($ticket);
111
        $em->flush();
112
113
        /* @var $ticket Ticket */
114
        $ticket = $em->getRepository('BCRMBackendBundle:Event\Ticket')->findOneBy(array('code' => 'DBLCHKN'));
115
116
        $client = static::createClient(array(), array(
117
            'PHP_AUTH_USER' => 'concierge',
118
            'PHP_AUTH_PW'   => 'letmein',
119
        ));
120
        $client->request('GET', sprintf('/checkin/%d/%s', $ticket->getId(), $ticket->getCode()));
121
        $response = $client->getResponse();
122
        $this->assertEquals(200, $response->getStatusCode());
123
124
        // Second checkin attempt should not work
125
        $client->request('GET', sprintf('/checkin/%d/%s', $ticket->getId(), $ticket->getCode()));
126
        $response = $client->getResponse();
127
        $this->assertEquals(400, $response->getStatusCode());
128
129
    }
130
131
    /**
132
     * @test
133
     * @depends eventCheckin
134
     */
135
    public function checkinsOnTheWrongDayShouldNotWork()
136
    {
137
        $client    = static::createClient();
138
        $container = $client->getContainer();
139
140
        /* @var $em \Doctrine\Common\Persistence\ObjectManager */
141
        $em = $container
142
            ->get('doctrine')
143
            ->getManager();
144
145
        // Create a ticket
146
        $event  = $em->getRepository('BCRMBackendBundle:Event\Event')->findAll()[0];
147
        $ticket = new Ticket();
148
        $ticket->setEmail('[email protected]');
149
        $ticket->setName('John Doe');
150
        $ticket->setEvent($event);
151
        $ticket->setDay(Ticket::DAY_SATURDAY);
152
        $ticket->setCode('STRDYCHKN');
153
        $em->persist($ticket);
154
        $em->flush();
155
156
        /* @var $ticket Ticket */
157
        $ticket = $em->getRepository('BCRMBackendBundle:Event\Ticket')->findOneBy(array('code' => 'STRDYCHKN'));
158
159
        $client = static::createClient(array(), array(
160
            'PHP_AUTH_USER' => 'concierge',
161
            'PHP_AUTH_PW'   => 'letmein',
162
        ));
163
        $client->request('GET', sprintf('/checkin/%d/%s', $ticket->getId(), $ticket->getCode()));
164
        $response = $client->getResponse();
165
        $this->assertEquals(400, $response->getStatusCode());
166
    }
167
168
    /**
169
     * @test
170
     * @group   functional
171
     * @depends checkinsOnTheWrongDayShouldNotWork
172
     */
173
    public function theTicketSearchApiShouldWork()
174
    {
175
        $client    = static::createClient(array(), array(
176
            'PHP_AUTH_USER' => 'concierge',
177
            'PHP_AUTH_PW'   => 'letmein',
178
        ));
179
        $container = $client->getContainer();
180
181
        /* @var $em \Doctrine\Common\Persistence\ObjectManager */
182
        $em = $container
183
            ->get('doctrine')
184
            ->getManager();
185
186
        // Create a ticket
187
        $event  = $em->getRepository('BCRMBackendBundle:Event\Event')->findAll()[0];
188
        $ticket = new Ticket();
189
        $ticket->setEmail('[email protected]');
190
        $ticket->setName('John Doe');
191
        $ticket->setEvent($event);
192
        $ticket->setDay(Ticket::DAY_SUNDAY);
193
        $ticket->setCode('SRCHTCKT');
194
        $em->persist($ticket);
195
        $em->flush();
196
197
        $client->request('GET', '/api/concierge/ticketsearch?q=SRCHTCKT');
198
        $response = $client->getResponse();
199
        $this->assertEquals(200, $response->getStatusCode());
200
        $this->assertEquals("application/json", $response->headers->get('Content-Type'));
201
        $this->assertEquals("utf-8", $response->getCharset());
202
        $result = json_decode($response->getContent());
203
        $this->assertEquals(1, count($result->items));
204
205
        $ticket = $result->items[0];
206
        $this->assertEquals('[email protected]', $ticket->email);
207
        $this->assertEquals(false, $ticket->checkedIn);
208
        $this->assertEquals(2, $ticket->day);
209
        $this->assertEquals('SRCHTCKT', $ticket->code);
210
        $this->assertTrue($ticket->id > 1);
211
    }
212
}
213