diff options
author | Jeremy <jeremy.benoist@gmail.com> | 2015-03-28 21:43:49 +0100 |
---|---|---|
committer | Jeremy <jeremy.benoist@gmail.com> | 2015-03-31 22:48:00 +0200 |
commit | 371ac69a6bd6325929e4efee7958682a6b1666f7 (patch) | |
tree | 781e6aa505f3c163e8385a662e1befc2f38885a3 /src/Wallabag/CoreBundle/Tests | |
parent | 2385f891e5992e84501d4cd47565a7bf0af14331 (diff) | |
download | wallabag-371ac69a6bd6325929e4efee7958682a6b1666f7.tar.gz wallabag-371ac69a6bd6325929e4efee7958682a6b1666f7.tar.zst wallabag-371ac69a6bd6325929e4efee7958682a6b1666f7.zip |
Add tests
and fix few mistakes
Diffstat (limited to 'src/Wallabag/CoreBundle/Tests')
3 files changed, 472 insertions, 0 deletions
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php index d7d341aa..11c86423 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php | |||
@@ -28,6 +28,8 @@ class ConfigControllerTest extends WallabagTestCase | |||
28 | $this->assertCount(1, $crawler->filter('button[id=config_save]')); | 28 | $this->assertCount(1, $crawler->filter('button[id=config_save]')); |
29 | $this->assertCount(1, $crawler->filter('button[id=change_passwd_save]')); | 29 | $this->assertCount(1, $crawler->filter('button[id=change_passwd_save]')); |
30 | $this->assertCount(1, $crawler->filter('button[id=user_save]')); | 30 | $this->assertCount(1, $crawler->filter('button[id=user_save]')); |
31 | $this->assertCount(1, $crawler->filter('button[id=new_user_save]')); | ||
32 | $this->assertCount(1, $crawler->filter('button[id=rss_config_save]')); | ||
31 | } | 33 | } |
32 | 34 | ||
33 | public function testUpdate() | 35 | public function testUpdate() |
@@ -347,4 +349,128 @@ class ConfigControllerTest extends WallabagTestCase | |||
347 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 349 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
348 | $this->assertContains('User "wallace" added', $alert[0]); | 350 | $this->assertContains('User "wallace" added', $alert[0]); |
349 | } | 351 | } |
352 | |||
353 | public function testRssUpdateResetToken() | ||
354 | { | ||
355 | $this->logInAs('admin'); | ||
356 | $client = $this->getClient(); | ||
357 | |||
358 | // reset the token | ||
359 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
360 | $user = $em | ||
361 | ->getRepository('WallabagCoreBundle:User') | ||
362 | ->findOneByUsername('admin'); | ||
363 | |||
364 | if (!$user) { | ||
365 | $this->markTestSkipped('No user found in db.'); | ||
366 | } | ||
367 | |||
368 | $config = $user->getConfig(); | ||
369 | $config->setRssToken(null); | ||
370 | $em->persist($config); | ||
371 | $em->flush(); | ||
372 | |||
373 | $crawler = $client->request('GET', '/config'); | ||
374 | |||
375 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
376 | |||
377 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | ||
378 | $this->assertContains('You need to generate a token first.', $body[0]); | ||
379 | |||
380 | $client->request('GET', '/generate-token'); | ||
381 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
382 | |||
383 | $crawler = $client->followRedirect(); | ||
384 | |||
385 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | ||
386 | $this->assertNotContains('You need to generate a token first.', $body[0]); | ||
387 | } | ||
388 | |||
389 | public function testGenerateTokenAjax() | ||
390 | { | ||
391 | $this->logInAs('admin'); | ||
392 | $client = $this->getClient(); | ||
393 | |||
394 | $client->request( | ||
395 | 'GET', | ||
396 | '/generate-token', | ||
397 | array(), | ||
398 | array(), | ||
399 | array('HTTP_X-Requested-With' => 'XMLHttpRequest') | ||
400 | ); | ||
401 | |||
402 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
403 | $content = json_decode($client->getResponse()->getContent(), true);; | ||
404 | $this->assertArrayHasKey('token', $content); | ||
405 | } | ||
406 | |||
407 | public function testRssUpdate() | ||
408 | { | ||
409 | $this->logInAs('admin'); | ||
410 | $client = $this->getClient(); | ||
411 | |||
412 | $crawler = $client->request('GET', '/config'); | ||
413 | |||
414 | if (500 == $client->getResponse()->getStatusCode()) { | ||
415 | var_export($client->getResponse()->getContent()); | ||
416 | die(); | ||
417 | } | ||
418 | |||
419 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
420 | |||
421 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | ||
422 | |||
423 | $data = array( | ||
424 | 'rss_config[rss_limit]' => 12, | ||
425 | ); | ||
426 | |||
427 | $client->submit($form, $data); | ||
428 | |||
429 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
430 | |||
431 | $crawler = $client->followRedirect(); | ||
432 | |||
433 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | ||
434 | $this->assertContains('RSS information updated', $alert[0]); | ||
435 | } | ||
436 | |||
437 | public function dataForRssFailed() | ||
438 | { | ||
439 | return array( | ||
440 | array( | ||
441 | array( | ||
442 | 'rss_config[rss_limit]' => 0, | ||
443 | ), | ||
444 | 'This value should be 1 or more.', | ||
445 | ), | ||
446 | array( | ||
447 | array( | ||
448 | 'rss_config[rss_limit]' => 1000000000000, | ||
449 | ), | ||
450 | 'This will certainly kill the app', | ||
451 | ), | ||
452 | ); | ||
453 | } | ||
454 | |||
455 | /** | ||
456 | * @dataProvider dataForRssFailed | ||
457 | */ | ||
458 | public function testRssFailed($data, $expectedMessage) | ||
459 | { | ||
460 | $this->logInAs('admin'); | ||
461 | $client = $this->getClient(); | ||
462 | |||
463 | $crawler = $client->request('GET', '/config'); | ||
464 | |||
465 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
466 | |||
467 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | ||
468 | |||
469 | $crawler = $client->submit($form, $data); | ||
470 | |||
471 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
472 | |||
473 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); | ||
474 | $this->assertContains($expectedMessage, $alert[0]); | ||
475 | } | ||
350 | } | 476 | } |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php new file mode 100644 index 00000000..8f627b4b --- /dev/null +++ b/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php | |||
@@ -0,0 +1,126 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | ||
4 | |||
5 | use Wallabag\CoreBundle\Tests\WallabagTestCase; | ||
6 | |||
7 | class RssControllerTest extends WallabagTestCase | ||
8 | { | ||
9 | public function validateDom($xml, $nb = null) | ||
10 | { | ||
11 | $doc = new \DOMDocument(); | ||
12 | $doc->loadXML($xml); | ||
13 | |||
14 | $xpath = new \DOMXpath($doc); | ||
15 | |||
16 | if (null === $nb) { | ||
17 | $this->assertGreaterThan(0, $xpath->query('//item')->length); | ||
18 | } else { | ||
19 | $this->assertEquals($nb, $xpath->query('//item')->length); | ||
20 | } | ||
21 | |||
22 | $this->assertEquals(1, $xpath->query('/rss')->length); | ||
23 | $this->assertEquals(1, $xpath->query('/rss/channel')->length); | ||
24 | |||
25 | foreach ($xpath->query('//item') as $item) { | ||
26 | $this->assertEquals(1, $xpath->query('title', $item)->length); | ||
27 | $this->assertEquals(1, $xpath->query('source', $item)->length); | ||
28 | $this->assertEquals(1, $xpath->query('link', $item)->length); | ||
29 | $this->assertEquals(1, $xpath->query('guid', $item)->length); | ||
30 | $this->assertEquals(1, $xpath->query('pubDate', $item)->length); | ||
31 | $this->assertEquals(1, $xpath->query('description', $item)->length); | ||
32 | } | ||
33 | } | ||
34 | |||
35 | public function dataForBadUrl() | ||
36 | { | ||
37 | return array( | ||
38 | array( | ||
39 | '/admin/YZIOAUZIAO/unread.xml' | ||
40 | ), | ||
41 | array( | ||
42 | '/wallace/YZIOAUZIAO/starred.xml' | ||
43 | ), | ||
44 | array( | ||
45 | '/wallace/YZIOAUZIAO/archives.xml' | ||
46 | ), | ||
47 | ); | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | * @dataProvider dataForBadUrl | ||
52 | */ | ||
53 | public function testBadUrl($url) | ||
54 | { | ||
55 | $client = $this->getClient(); | ||
56 | |||
57 | $client->request('GET', $url); | ||
58 | |||
59 | $this->assertEquals(404, $client->getResponse()->getStatusCode()); | ||
60 | } | ||
61 | |||
62 | public function testUnread() | ||
63 | { | ||
64 | $client = $this->getClient(); | ||
65 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
66 | $user = $em | ||
67 | ->getRepository('WallabagCoreBundle:User') | ||
68 | ->findOneByUsername('admin'); | ||
69 | |||
70 | $config = $user->getConfig(); | ||
71 | $config->setRssToken('SUPERTOKEN'); | ||
72 | $config->setRssLimit(2); | ||
73 | $em->persist($config); | ||
74 | $em->flush(); | ||
75 | |||
76 | $client->request('GET', '/admin/SUPERTOKEN/unread.xml'); | ||
77 | |||
78 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
79 | |||
80 | $this->validateDom($client->getResponse()->getContent(), 2); | ||
81 | } | ||
82 | |||
83 | public function testStarred() | ||
84 | { | ||
85 | $client = $this->getClient(); | ||
86 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
87 | $user = $em | ||
88 | ->getRepository('WallabagCoreBundle:User') | ||
89 | ->findOneByUsername('admin'); | ||
90 | |||
91 | $config = $user->getConfig(); | ||
92 | $config->setRssToken('SUPERTOKEN'); | ||
93 | $config->setRssLimit(1); | ||
94 | $em->persist($config); | ||
95 | $em->flush(); | ||
96 | |||
97 | $client = $this->getClient(); | ||
98 | $client->request('GET', '/admin/SUPERTOKEN/starred.xml'); | ||
99 | |||
100 | $this->assertEquals(200, $client->getResponse()->getStatusCode(), 1); | ||
101 | |||
102 | $this->validateDom($client->getResponse()->getContent()); | ||
103 | } | ||
104 | |||
105 | public function testArchives() | ||
106 | { | ||
107 | $client = $this->getClient(); | ||
108 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
109 | $user = $em | ||
110 | ->getRepository('WallabagCoreBundle:User') | ||
111 | ->findOneByUsername('admin'); | ||
112 | |||
113 | $config = $user->getConfig(); | ||
114 | $config->setRssToken('SUPERTOKEN'); | ||
115 | $config->setRssLimit(null); | ||
116 | $em->persist($config); | ||
117 | $em->flush(); | ||
118 | |||
119 | $client = $this->getClient(); | ||
120 | $client->request('GET', '/admin/SUPERTOKEN/archive.xml'); | ||
121 | |||
122 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
123 | |||
124 | $this->validateDom($client->getResponse()->getContent()); | ||
125 | } | ||
126 | } | ||
diff --git a/src/Wallabag/CoreBundle/Tests/ParamConverter/UsernameRssTokenConverterTest.php b/src/Wallabag/CoreBundle/Tests/ParamConverter/UsernameRssTokenConverterTest.php new file mode 100644 index 00000000..ebb550b5 --- /dev/null +++ b/src/Wallabag/CoreBundle/Tests/ParamConverter/UsernameRssTokenConverterTest.php | |||
@@ -0,0 +1,220 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Tests\Command; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; | ||
6 | use Wallabag\CoreBundle\ParamConverter\UsernameRssTokenConverter; | ||
7 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; | ||
8 | use Symfony\Component\HttpFoundation\Request; | ||
9 | use Wallabag\CoreBundle\Entity\User; | ||
10 | |||
11 | class UsernameRssTokenConverterTest extends KernelTestCase | ||
12 | { | ||
13 | public function testSupportsWithNoRegistry() | ||
14 | { | ||
15 | $params = new ParamConverter(array()); | ||
16 | $converter = new UsernameRssTokenConverter(); | ||
17 | |||
18 | $this->assertFalse($converter->supports($params)); | ||
19 | } | ||
20 | |||
21 | public function testSupportsWithNoRegistryManagers() | ||
22 | { | ||
23 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
24 | ->disableOriginalConstructor() | ||
25 | ->getMock(); | ||
26 | |||
27 | $registry->expects($this->once()) | ||
28 | ->method('getManagers') | ||
29 | ->will($this->returnValue(array())); | ||
30 | |||
31 | $params = new ParamConverter(array()); | ||
32 | $converter = new UsernameRssTokenConverter($registry); | ||
33 | |||
34 | $this->assertFalse($converter->supports($params)); | ||
35 | } | ||
36 | |||
37 | public function testSupportsWithNoConfigurationClass() | ||
38 | { | ||
39 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
40 | ->disableOriginalConstructor() | ||
41 | ->getMock(); | ||
42 | |||
43 | $registry->expects($this->once()) | ||
44 | ->method('getManagers') | ||
45 | ->will($this->returnValue(array('default' => null))); | ||
46 | |||
47 | $params = new ParamConverter(array()); | ||
48 | $converter = new UsernameRssTokenConverter($registry); | ||
49 | |||
50 | $this->assertFalse($converter->supports($params)); | ||
51 | } | ||
52 | |||
53 | public function testSupportsWithNotTheGoodClass() | ||
54 | { | ||
55 | $meta = $this->getMockBuilder('Doctrine\Common\Persistence\Mapping\ClassMetadata') | ||
56 | ->disableOriginalConstructor() | ||
57 | ->getMock(); | ||
58 | |||
59 | $meta->expects($this->once()) | ||
60 | ->method('getName') | ||
61 | ->will($this->returnValue('nothingrelated')); | ||
62 | |||
63 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
64 | ->disableOriginalConstructor() | ||
65 | ->getMock(); | ||
66 | |||
67 | $em->expects($this->once()) | ||
68 | ->method('getClassMetadata') | ||
69 | ->with('superclass') | ||
70 | ->will($this->returnValue($meta)); | ||
71 | |||
72 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
73 | ->disableOriginalConstructor() | ||
74 | ->getMock(); | ||
75 | |||
76 | $registry->expects($this->once()) | ||
77 | ->method('getManagers') | ||
78 | ->will($this->returnValue(array('default' => null))); | ||
79 | |||
80 | $registry->expects($this->once()) | ||
81 | ->method('getManagerForClass') | ||
82 | ->with('superclass') | ||
83 | ->will($this->returnValue($em)); | ||
84 | |||
85 | $params = new ParamConverter(array('class' => 'superclass')); | ||
86 | $converter = new UsernameRssTokenConverter($registry); | ||
87 | |||
88 | $this->assertFalse($converter->supports($params)); | ||
89 | } | ||
90 | |||
91 | public function testSupportsWithGoodClass() | ||
92 | { | ||
93 | $meta = $this->getMockBuilder('Doctrine\Common\Persistence\Mapping\ClassMetadata') | ||
94 | ->disableOriginalConstructor() | ||
95 | ->getMock(); | ||
96 | |||
97 | $meta->expects($this->once()) | ||
98 | ->method('getName') | ||
99 | ->will($this->returnValue('Wallabag\CoreBundle\Entity\User')); | ||
100 | |||
101 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
102 | ->disableOriginalConstructor() | ||
103 | ->getMock(); | ||
104 | |||
105 | $em->expects($this->once()) | ||
106 | ->method('getClassMetadata') | ||
107 | ->with('WallabagCoreBundle:User') | ||
108 | ->will($this->returnValue($meta)); | ||
109 | |||
110 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
111 | ->disableOriginalConstructor() | ||
112 | ->getMock(); | ||
113 | |||
114 | $registry->expects($this->once()) | ||
115 | ->method('getManagers') | ||
116 | ->will($this->returnValue(array('default' => null))); | ||
117 | |||
118 | $registry->expects($this->once()) | ||
119 | ->method('getManagerForClass') | ||
120 | ->with('WallabagCoreBundle:User') | ||
121 | ->will($this->returnValue($em)); | ||
122 | |||
123 | $params = new ParamConverter(array('class' => 'WallabagCoreBundle:User')); | ||
124 | $converter = new UsernameRssTokenConverter($registry); | ||
125 | |||
126 | $this->assertTrue($converter->supports($params)); | ||
127 | } | ||
128 | |||
129 | /** | ||
130 | * @expectedException InvalidArgumentException | ||
131 | * @expectedExceptionMessage Route attribute is missing | ||
132 | */ | ||
133 | public function testApplyEmptyRequest() | ||
134 | { | ||
135 | $params = new ParamConverter(array()); | ||
136 | $converter = new UsernameRssTokenConverter(); | ||
137 | |||
138 | $converter->apply(new Request(), $params); | ||
139 | } | ||
140 | |||
141 | /** | ||
142 | * @expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException | ||
143 | * @expectedExceptionMessage User not found | ||
144 | */ | ||
145 | public function testApplyUserNotFound() | ||
146 | { | ||
147 | $repo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\UserRepository') | ||
148 | ->disableOriginalConstructor() | ||
149 | ->getMock(); | ||
150 | |||
151 | $repo->expects($this->once()) | ||
152 | ->method('findOneByUsernameAndRsstoken') | ||
153 | ->with('test', 'test') | ||
154 | ->will($this->returnValue(null)); | ||
155 | |||
156 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
157 | ->disableOriginalConstructor() | ||
158 | ->getMock(); | ||
159 | |||
160 | $em->expects($this->once()) | ||
161 | ->method('getRepository') | ||
162 | ->with('WallabagCoreBundle:User') | ||
163 | ->will($this->returnValue($repo)); | ||
164 | |||
165 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
166 | ->disableOriginalConstructor() | ||
167 | ->getMock(); | ||
168 | |||
169 | $registry->expects($this->once()) | ||
170 | ->method('getManagerForClass') | ||
171 | ->with('WallabagCoreBundle:User') | ||
172 | ->will($this->returnValue($em)); | ||
173 | |||
174 | $params = new ParamConverter(array('class' => 'WallabagCoreBundle:User')); | ||
175 | $converter = new UsernameRssTokenConverter($registry); | ||
176 | $request = new Request(array(), array(), array('username' => 'test', 'token' => 'test')); | ||
177 | |||
178 | $converter->apply($request, $params); | ||
179 | } | ||
180 | |||
181 | public function testApplyUserFound() | ||
182 | { | ||
183 | $user = new User(); | ||
184 | |||
185 | $repo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\UserRepository') | ||
186 | ->disableOriginalConstructor() | ||
187 | ->getMock(); | ||
188 | |||
189 | $repo->expects($this->once()) | ||
190 | ->method('findOneByUsernameAndRsstoken') | ||
191 | ->with('test', 'test') | ||
192 | ->will($this->returnValue($user)); | ||
193 | |||
194 | $em = $this->getMockBuilder('Doctrine\Common\Persistence\ObjectManager') | ||
195 | ->disableOriginalConstructor() | ||
196 | ->getMock(); | ||
197 | |||
198 | $em->expects($this->once()) | ||
199 | ->method('getRepository') | ||
200 | ->with('WallabagCoreBundle:User') | ||
201 | ->will($this->returnValue($repo)); | ||
202 | |||
203 | $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry') | ||
204 | ->disableOriginalConstructor() | ||
205 | ->getMock(); | ||
206 | |||
207 | $registry->expects($this->once()) | ||
208 | ->method('getManagerForClass') | ||
209 | ->with('WallabagCoreBundle:User') | ||
210 | ->will($this->returnValue($em)); | ||
211 | |||
212 | $params = new ParamConverter(array('class' => 'WallabagCoreBundle:User', 'name' => 'user')); | ||
213 | $converter = new UsernameRssTokenConverter($registry); | ||
214 | $request = new Request(array(), array(), array('username' => 'test', 'token' => 'test')); | ||
215 | |||
216 | $converter->apply($request, $params); | ||
217 | |||
218 | $this->assertEquals($user, $request->attributes->get('user')); | ||
219 | } | ||
220 | } | ||