|
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 |
|
|
|
|
|
|
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
|
|
|
|
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.