]> git.immae.eu Git - github/wallabag/wallabag.git/blob - tests/Wallabag/CoreBundle/Controller/FeedControllerTest.php
Rebase & Rename all rss to feeds
[github/wallabag/wallabag.git] / tests / Wallabag / CoreBundle / Controller / FeedControllerTest.php
1 <?php
2
3 namespace Tests\Wallabag\CoreBundle\Controller;
4
5 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6
7 class FeedControllerTest extends WallabagCoreTestCase
8 {
9 public function validateDom($xml, $type, $nb = null, $tagValue = null)
10 {
11 $doc = new \DOMDocument();
12 $doc->loadXML($xml);
13
14 $xpath = new \DOMXpath($doc);
15 $xpath->registerNamespace('a', 'http://www.w3.org/2005/Atom');
16
17 if (null === $nb) {
18 $this->assertGreaterThan(0, $xpath->query('//a:entry')->length);
19 } else {
20 $this->assertEquals($nb, $xpath->query('//a:entry')->length);
21 }
22
23 $this->assertEquals(1, $xpath->query('/a:feed')->length);
24
25 $this->assertEquals(1, $xpath->query('/a:feed/a:title')->length);
26
27 $this->assertEquals(1, $xpath->query('/a:feed/a:updated')->length);
28
29 $this->assertEquals(1, $xpath->query('/a:feed/a:generator')->length);
30 $this->assertEquals('wallabag', $xpath->query('/a:feed/a:generator')->item(0)->nodeValue);
31
32 $this->assertEquals(1, $xpath->query('/a:feed/a:subtitle')->length);
33 if (null !== $tagValue && 0 === strpos($type, 'tag')) {
34 $this->assertEquals('wallabag — '.$type.' '.$tagValue.' feed', $xpath->query('/a:feed/a:title')->item(0)->nodeValue);
35 $this->assertEquals('Atom feed for entries tagged with ' . $tagValue, $xpath->query('/a:feed/a:subtitle')->item(0)->nodeValue);
36 } else {
37 $this->assertEquals('wallabag — '.$type.' feed', $xpath->query('/a:feed/a:title')->item(0)->nodeValue);
38 $this->assertEquals('Atom feed for ' . $type . ' entries', $xpath->query('/a:feed/a:subtitle')->item(0)->nodeValue);
39 }
40
41 $this->assertEquals(1, $xpath->query('/a:feed/a:link[@rel="self"]')->length);
42 $this->assertContains($type, $xpath->query('/a:feed/a:link[@rel="self"]')->item(0)->getAttribute('href'));
43
44 $this->assertEquals(1, $xpath->query('/a:feed/a:link[@rel="last"]')->length);
45
46 foreach ($xpath->query('//a:entry') as $item) {
47 $this->assertEquals(1, $xpath->query('a:title', $item)->length);
48 $this->assertEquals(1, $xpath->query('a:link[@rel="via"]', $item)->length);
49 $this->assertEquals(1, $xpath->query('a:link[@rel="alternate"]', $item)->length);
50 $this->assertEquals(1, $xpath->query('a:id', $item)->length);
51 $this->assertEquals(1, $xpath->query('a:published', $item)->length);
52 $this->assertEquals(1, $xpath->query('a:content', $item)->length);
53 }
54 }
55
56 public function dataForBadUrl()
57 {
58 return [
59 [
60 '/feed/admin/YZIOAUZIAO/unread',
61 ],
62 [
63 '/feed/wallace/YZIOAUZIAO/starred',
64 ],
65 [
66 '/feed/wallace/YZIOAUZIAO/archives',
67 ],
68 ];
69 }
70
71 /**
72 * @dataProvider dataForBadUrl
73 */
74 public function testBadUrl($url)
75 {
76 $client = $this->getClient();
77
78 $client->request('GET', $url);
79
80 $this->assertSame(404, $client->getResponse()->getStatusCode());
81 }
82
83 public function testUnread()
84 {
85 $client = $this->getClient();
86 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
87 $user = $em
88 ->getRepository('WallabagUserBundle:User')
89 ->findOneByUsername('admin');
90
91 $config = $user->getConfig();
92 $config->setFeedToken('SUPERTOKEN');
93 $config->setFeedLimit(2);
94 $em->persist($config);
95 $em->flush();
96
97 $client->request('GET', '/feed/admin/SUPERTOKEN/unread');
98
99 $this->assertSame(200, $client->getResponse()->getStatusCode());
100
101 $this->validateDom($client->getResponse()->getContent(), 'unread', 2);
102 }
103
104 public function testStarred()
105 {
106 $client = $this->getClient();
107 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
108 $user = $em
109 ->getRepository('WallabagUserBundle:User')
110 ->findOneByUsername('admin');
111
112 $config = $user->getConfig();
113 $config->setFeedToken('SUPERTOKEN');
114 $config->setFeedLimit(1);
115 $em->persist($config);
116 $em->flush();
117
118 $client = $this->getClient();
119 $client->request('GET', '/feed/admin/SUPERTOKEN/starred');
120
121 $this->assertSame(200, $client->getResponse()->getStatusCode(), 1);
122
123 $this->validateDom($client->getResponse()->getContent(), 'starred');
124 }
125
126 public function testArchives()
127 {
128 $client = $this->getClient();
129 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
130 $user = $em
131 ->getRepository('WallabagUserBundle:User')
132 ->findOneByUsername('admin');
133
134 $config = $user->getConfig();
135 $config->setFeedToken('SUPERTOKEN');
136 $config->setFeedLimit(null);
137 $em->persist($config);
138 $em->flush();
139
140 $client = $this->getClient();
141 $client->request('GET', '/feed/admin/SUPERTOKEN/archive');
142
143 $this->assertSame(200, $client->getResponse()->getStatusCode());
144
145 $this->validateDom($client->getResponse()->getContent(), 'archive');
146 }
147
148 public function testPagination()
149 {
150 $client = $this->getClient();
151 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
152 $user = $em
153 ->getRepository('WallabagUserBundle:User')
154 ->findOneByUsername('admin');
155
156 $config = $user->getConfig();
157 $config->setFeedToken('SUPERTOKEN');
158 $config->setFeedLimit(1);
159 $em->persist($config);
160 $em->flush();
161
162 $client = $this->getClient();
163
164 $client->request('GET', '/feed/admin/SUPERTOKEN/unread');
165 $this->assertEquals(200, $client->getResponse()->getStatusCode());
166 $this->validateDom($client->getResponse()->getContent(), 'unread');
167
168 $client->request('GET', '/feed/admin/SUPERTOKEN/unread/2');
169 $this->assertEquals(200, $client->getResponse()->getStatusCode());
170 $this->validateDom($client->getResponse()->getContent(), 'unread');
171
172 $client->request('GET', '/feed/admin/SUPERTOKEN/unread/3000');
173 $this->assertEquals(302, $client->getResponse()->getStatusCode());
174 }
175
176 public function testTags()
177 {
178 $client = $this->getClient();
179 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
180 $user = $em
181 ->getRepository('WallabagUserBundle:User')
182 ->findOneByUsername('admin');
183
184 $config = $user->getConfig();
185 $config->setFeedToken('SUPERTOKEN');
186 $config->setFeedLimit(null);
187 $em->persist($config);
188 $em->flush();
189
190 $client = $this->getClient();
191 $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml');
192
193 $this->assertSame(200, $client->getResponse()->getStatusCode());
194
195 $this->validateDom($client->getResponse()->getContent(), 'tag', 2, 'foo-bar');
196
197 $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml?page=3000');
198 $this->assertSame(302, $client->getResponse()->getStatusCode());
199 }
200 }