]>
Commit | Line | Data |
---|---|---|
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 | } |