]> git.immae.eu Git - github/wallabag/wallabag.git/blob - src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
Merge pull request #1472 from wallabag/v2-clean-views
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Tests / Controller / EntryControllerTest.php
1 <?php
2
3 namespace Wallabag\CoreBundle\Tests\Controller;
4
5 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
6
7 class EntryControllerTest extends WallabagCoreTestCase
8 {
9 public $url = 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html';
10
11 public function testLogin()
12 {
13 $client = $this->getClient();
14
15 $client->request('GET', '/new');
16
17 $this->assertEquals(302, $client->getResponse()->getStatusCode());
18 $this->assertContains('login', $client->getResponse()->headers->get('location'));
19 }
20
21 public function testGetNew()
22 {
23 $this->logInAs('admin');
24 $client = $this->getClient();
25
26 $crawler = $client->request('GET', '/new');
27
28 $this->assertEquals(200, $client->getResponse()->getStatusCode());
29
30 $this->assertCount(1, $crawler->filter('input[type=url]'));
31 $this->assertCount(1, $crawler->filter('button[type=submit]'));
32 }
33
34 public function testPostNewViaBookmarklet()
35 {
36 $this->logInAs('admin');
37 $client = $this->getClient();
38
39 $crawler = $client->request('GET', '/');
40
41 $this->assertCount(4, $crawler->filter('div[class=entry]'));
42
43 // Good URL
44 $crawler = $client->request('GET', '/bookmarklet', array('url' => $this->url));
45 $this->assertEquals(302, $client->getResponse()->getStatusCode());
46 $crawler = $client->followRedirect();
47 $crawler = $client->request('GET', '/');
48 $this->assertCount(5, $crawler->filter('div[class=entry]'));
49
50 $em = $client->getContainer()
51 ->get('doctrine.orm.entity_manager');
52 $entry = $em
53 ->getRepository('WallabagCoreBundle:Entry')
54 ->findOneByUrl($this->url);
55 $em->remove($entry);
56 $em->flush();
57 }
58
59 public function testPostNewEmpty()
60 {
61 $this->logInAs('admin');
62 $client = $this->getClient();
63
64 $crawler = $client->request('GET', '/new');
65
66 $this->assertEquals(200, $client->getResponse()->getStatusCode());
67
68 $form = $crawler->filter('button[type=submit]')->form();
69
70 $crawler = $client->submit($form);
71
72 $this->assertEquals(200, $client->getResponse()->getStatusCode());
73 $this->assertCount(1, $alert = $crawler->filter('form ul li')->extract(array('_text')));
74 $this->assertEquals('This value should not be blank.', $alert[0]);
75 }
76
77 public function testPostNewOk()
78 {
79 $this->logInAs('admin');
80 $client = $this->getClient();
81
82 $crawler = $client->request('GET', '/new');
83
84 $this->assertEquals(200, $client->getResponse()->getStatusCode());
85
86 $form = $crawler->filter('button[type=submit]')->form();
87
88 $data = array(
89 'entry[url]' => $this->url,
90 );
91
92 $client->submit($form, $data);
93
94 $this->assertEquals(302, $client->getResponse()->getStatusCode());
95
96 $crawler = $client->followRedirect();
97
98 $this->assertGreaterThan(1, $alert = $crawler->filter('h2 a')->extract(array('_text')));
99 $this->assertContains('Google', $alert[0]);
100 }
101
102 public function testArchive()
103 {
104 $this->logInAs('admin');
105 $client = $this->getClient();
106
107 $client->request('GET', '/archive/list');
108
109 $this->assertEquals(200, $client->getResponse()->getStatusCode());
110 }
111
112 public function testStarred()
113 {
114 $this->logInAs('admin');
115 $client = $this->getClient();
116
117 $client->request('GET', '/starred/list');
118
119 $this->assertEquals(200, $client->getResponse()->getStatusCode());
120 }
121
122 public function testView()
123 {
124 $this->logInAs('admin');
125 $client = $this->getClient();
126
127 $content = $client->getContainer()
128 ->get('doctrine.orm.entity_manager')
129 ->getRepository('WallabagCoreBundle:Entry')
130 ->findOneByUrl($this->url);
131
132 $client->request('GET', '/view/'.$content->getId());
133
134 $this->assertEquals(200, $client->getResponse()->getStatusCode());
135 $this->assertContains($content->getTitle(), $client->getResponse()->getContent());
136 }
137
138 public function testEdit()
139 {
140 $this->logInAs('admin');
141 $client = $this->getClient();
142
143 $content = $client->getContainer()
144 ->get('doctrine.orm.entity_manager')
145 ->getRepository('WallabagCoreBundle:Entry')
146 ->findOneByUrl($this->url);
147
148 $crawler = $client->request('GET', '/edit/'.$content->getId());
149
150 $this->assertEquals(200, $client->getResponse()->getStatusCode());
151
152 $this->assertCount(1, $crawler->filter('input[id=entry_title]'));
153 $this->assertCount(1, $crawler->filter('button[id=entry_save]'));
154 }
155
156 public function testEditUpdate()
157 {
158 $this->logInAs('admin');
159 $client = $this->getClient();
160
161 $content = $client->getContainer()
162 ->get('doctrine.orm.entity_manager')
163 ->getRepository('WallabagCoreBundle:Entry')
164 ->findOneByUrl($this->url);
165
166 $crawler = $client->request('GET', '/edit/'.$content->getId());
167
168 $this->assertEquals(200, $client->getResponse()->getStatusCode());
169
170 $form = $crawler->filter('button[type=submit]')->form();
171
172 $data = array(
173 'entry[title]' => 'My updated title hehe :)',
174 );
175
176 $client->submit($form, $data);
177
178 $this->assertEquals(302, $client->getResponse()->getStatusCode());
179
180 $crawler = $client->followRedirect();
181
182 $this->assertGreaterThan(1, $alert = $crawler->filter('div[id=article] h1')->extract(array('_text')));
183 $this->assertContains('My updated title hehe :)', $alert[0]);
184 }
185
186 public function testToggleArchive()
187 {
188 $this->logInAs('admin');
189 $client = $this->getClient();
190
191 $content = $client->getContainer()
192 ->get('doctrine.orm.entity_manager')
193 ->getRepository('WallabagCoreBundle:Entry')
194 ->findOneByUrl($this->url);
195
196 $client->request('GET', '/archive/'.$content->getId());
197
198 $this->assertEquals(302, $client->getResponse()->getStatusCode());
199
200 $res = $client->getContainer()
201 ->get('doctrine.orm.entity_manager')
202 ->getRepository('WallabagCoreBundle:Entry')
203 ->find($content->getId());
204
205 $this->assertEquals($res->isArchived(), true);
206 }
207
208 public function testToggleStar()
209 {
210 $this->logInAs('admin');
211 $client = $this->getClient();
212
213 $content = $client->getContainer()
214 ->get('doctrine.orm.entity_manager')
215 ->getRepository('WallabagCoreBundle:Entry')
216 ->findOneByUrl($this->url);
217
218 $client->request('GET', '/star/'.$content->getId());
219
220 $this->assertEquals(302, $client->getResponse()->getStatusCode());
221
222 $res = $client->getContainer()
223 ->get('doctrine.orm.entity_manager')
224 ->getRepository('WallabagCoreBundle:Entry')
225 ->findOneById($content->getId());
226
227 $this->assertEquals($res->isStarred(), true);
228 }
229
230 public function testDelete()
231 {
232 $this->logInAs('admin');
233 $client = $this->getClient();
234
235 $content = $client->getContainer()
236 ->get('doctrine.orm.entity_manager')
237 ->getRepository('WallabagCoreBundle:Entry')
238 ->findOneByUrl($this->url);
239
240 $client->request('GET', '/delete/'.$content->getId());
241
242 $this->assertEquals(302, $client->getResponse()->getStatusCode());
243
244 $client->request('GET', '/delete/'.$content->getId());
245
246 $this->assertEquals(404, $client->getResponse()->getStatusCode());
247 }
248
249 public function testViewOtherUserEntry()
250 {
251 $this->logInAs('admin');
252 $client = $this->getClient();
253
254 $content = $client->getContainer()
255 ->get('doctrine.orm.entity_manager')
256 ->getRepository('WallabagCoreBundle:Entry')
257 ->findOneByUsernameAndNotArchived('bob');
258
259 $client->request('GET', '/view/'.$content->getId());
260
261 $this->assertEquals(403, $client->getResponse()->getStatusCode());
262 }
263
264 public function testFilterOnReadingTime()
265 {
266 $this->logInAs('admin');
267 $client = $this->getClient();
268
269 $crawler = $client->request('GET', '/unread/list');
270
271 $form = $crawler->filter('button[id=submit-filter]')->form();
272
273 $data = array(
274 'entry_filter[readingTime][right_number]' => 11,
275 'entry_filter[readingTime][left_number]' => 11,
276 );
277
278 $crawler = $client->submit($form, $data);
279
280 $this->assertCount(1, $crawler->filter('div[class=entry]'));
281 }
282
283 public function testFilterOnCreationDate()
284 {
285 $this->logInAs('admin');
286 $client = $this->getClient();
287
288 $crawler = $client->request('GET', '/unread/list');
289
290 $form = $crawler->filter('button[id=submit-filter]')->form();
291
292 $data = array(
293 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
294 'entry_filter[createdAt][right_date]' => date('d/m/Y', strtotime('+1 day')),
295 );
296
297 $crawler = $client->submit($form, $data);
298
299 $this->assertCount(5, $crawler->filter('div[class=entry]'));
300
301 $data = array(
302 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
303 'entry_filter[createdAt][right_date]' => date('d/m/Y'),
304 );
305
306 $crawler = $client->submit($form, $data);
307
308 $this->assertCount(5, $crawler->filter('div[class=entry]'));
309
310 $data = array(
311 'entry_filter[createdAt][left_date]' => '01/01/1970',
312 'entry_filter[createdAt][right_date]' => '01/01/1970',
313 );
314
315 $crawler = $client->submit($form, $data);
316
317 $this->assertCount(0, $crawler->filter('div[class=entry]'));
318 }
319
320 public function testPaginationWithFilter()
321 {
322 $this->logInAs('admin');
323 $client = $this->getClient();
324 $crawler = $client->request('GET', '/config');
325
326 $form = $crawler->filter('button[id=config_save]')->form();
327
328 $data = array(
329 'config[items_per_page]' => '1',
330 );
331
332 $client->submit($form, $data);
333
334 $parameters = '?entry_filter%5BreadingTime%5D%5Bleft_number%5D=&amp;entry_filter%5BreadingTime%5D%5Bright_number%5D=';
335
336 $crawler = $client->request('GET', 'unread/list'.$parameters);
337
338 $this->assertContains($parameters, $client->getResponse()->getContent());
339
340 // reset pagination
341 $crawler = $client->request('GET', '/config');
342 $form = $crawler->filter('button[id=config_save]')->form();
343 $data = array(
344 'config[items_per_page]' => '12',
345 );
346 $client->submit($form, $data);
347 }
348
349 public function testFilterOnDomainName()
350 {
351 $this->logInAs('admin');
352 $client = $this->getClient();
353
354 $crawler = $client->request('GET', '/unread/list');
355 $form = $crawler->filter('button[id=submit-filter]')->form();
356 $data = array(
357 'entry_filter[domainName]' => 'domain',
358 );
359
360 $crawler = $client->submit($form, $data);
361 $this->assertCount(5, $crawler->filter('div[class=entry]'));
362
363 $form = $crawler->filter('button[id=submit-filter]')->form();
364 $data = array(
365 'entry_filter[domainName]' => 'wallabag',
366 );
367
368 $crawler = $client->submit($form, $data);
369 $this->assertCount(0, $crawler->filter('div[class=entry]'));
370 }
371
372 public function testFilterOnStatus()
373 {
374 $this->logInAs('admin');
375 $client = $this->getClient();
376
377 $crawler = $client->request('GET', '/unread/list');
378 $form = $crawler->filter('button[id=submit-filter]')->form();
379 $form['entry_filter[isArchived]']->tick();
380 $form['entry_filter[isStarred]']->untick();
381
382 $crawler = $client->submit($form);
383 $this->assertCount(1, $crawler->filter('div[class=entry]'));
384
385 $form = $crawler->filter('button[id=submit-filter]')->form();
386 $form['entry_filter[isArchived]']->untick();
387 $form['entry_filter[isStarred]']->tick();
388
389 $crawler = $client->submit($form);
390 $this->assertCount(1, $crawler->filter('div[class=entry]'));
391 }
392
393 public function testPreviewPictureFilter()
394 {
395 $this->logInAs('admin');
396 $client = $this->getClient();
397
398 $crawler = $client->request('GET', '/unread/list');
399 $form = $crawler->filter('button[id=submit-filter]')->form();
400 $form['entry_filter[previewPicture]']->tick();
401
402 $crawler = $client->submit($form);
403 $this->assertCount(1, $crawler->filter('div[class=entry]'));
404 }
405
406 public function testFilterOnLanguage()
407 {
408 $this->logInAs('admin');
409 $client = $this->getClient();
410
411 $crawler = $client->request('GET', '/unread/list');
412 $form = $crawler->filter('button[id=submit-filter]')->form();
413 $data = array(
414 'entry_filter[language]' => 'fr',
415 );
416
417 $crawler = $client->submit($form, $data);
418 $this->assertCount(2, $crawler->filter('div[class=entry]'));
419
420 $form = $crawler->filter('button[id=submit-filter]')->form();
421 $data = array(
422 'entry_filter[language]' => 'en',
423 );
424
425 $crawler = $client->submit($form, $data);
426 $this->assertCount(2, $crawler->filter('div[class=entry]'));
427 }
428 }