3 namespace Tests\Wallabag\CoreBundle\Controller
;
5 use Tests\Wallabag\CoreBundle\WallabagCoreTestCase
;
7 class RssControllerTest
extends WallabagCoreTestCase
9 public function validateDom($xml, $type, $urlPagination, $nb = null)
11 $doc = new \
DOMDocument();
14 $xpath = new \
DOMXpath($doc);
15 $xpath->registerNamespace('a', 'http://www.w3.org/2005/Atom');
18 $this->assertGreaterThan(0, $xpath->query('//a:entry')->length
);
20 $this->assertEquals($nb, $xpath->query('//a:entry')->length
);
23 $this->assertEquals(1, $xpath->query('/a:feed')->length
);
25 $this->assertEquals(1, $xpath->query('/a:feed/a:title')->length
);
26 $this->assertEquals('wallabag — '.$type.' feed', $xpath->query('/a:feed/a:title')->item(0)->nodeValue
);
28 $this->assertEquals(1, $xpath->query('/a:feed/a:updated')->length
);
30 $this->assertEquals(1, $xpath->query('/a:feed/a:generator')->length
);
31 $this->assertEquals('wallabag', $xpath->query('/a:feed/a:generator')->item(0)->nodeValue
);
33 $this->assertEquals(1, $xpath->query('/a:feed/a:subtitle')->length
);
34 $this->assertEquals('RSS feed for '.$type.' entries', $xpath->query('/a:feed/a:subtitle')->item(0)->nodeValue
);
36 $this->assertEquals(1, $xpath->query('/a:feed/a:link[@rel="self"]')->length
);
37 $this->assertContains($type, $xpath->query('/a:feed/a:link[@rel="self"]')->item(0)->getAttribute('href'));
39 $this->assertEquals(1, $xpath->query('/a:feed/a:link[@rel="last"]')->length
);
41 foreach ($xpath->query('//a:entry') as $item) {
42 $this->assertEquals(1, $xpath->query('a:title', $item)->length
);
43 $this->assertEquals(1, $xpath->query('a:link[@rel="via"]', $item)->length
);
44 $this->assertEquals(1, $xpath->query('a:link[@rel="alternate"]', $item)->length
);
45 $this->assertEquals(1, $xpath->query('a:id', $item)->length
);
46 $this->assertEquals(1, $xpath->query('a:published', $item)->length
);
47 $this->assertEquals(1, $xpath->query('a:content', $item)->length
);
51 public function dataForBadUrl()
55 '/feed/admin/YZIOAUZIAO/unread',
58 '/feed/wallace/YZIOAUZIAO/starred',
61 '/feed/wallace/YZIOAUZIAO/archives',
67 * @dataProvider dataForBadUrl
69 public function testBadUrl($url)
71 $client = $this->getClient();
73 $client->request('GET', $url);
75 $this->assertSame(404, $client->getResponse()->getStatusCode());
78 public function testUnread()
80 $client = $this->getClient();
81 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
83 ->getRepository('WallabagUserBundle:User')
84 ->findOneByUsername('admin');
86 $config = $user->getConfig();
87 $config->setRssToken('SUPERTOKEN');
88 $config->setRssLimit(2);
89 $em->persist($config);
92 $client->request('GET', '/feed/admin/SUPERTOKEN/unread');
94 $this->assertSame(200, $client->getResponse()->getStatusCode());
96 $this->validateDom($client->getResponse()->getContent(), 'unread', 'unread', 2);
99 public function testStarred()
101 $client = $this->getClient();
102 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
104 ->getRepository('WallabagUserBundle:User')
105 ->findOneByUsername('admin');
107 $config = $user->getConfig();
108 $config->setRssToken('SUPERTOKEN');
109 $config->setRssLimit(1);
110 $em->persist($config);
113 $client = $this->getClient();
114 $client->request('GET', '/feed/admin/SUPERTOKEN/starred');
116 $this->assertSame(200, $client->getResponse()->getStatusCode(), 1);
118 $this->validateDom($client->getResponse()->getContent(), 'starred', 'starred');
121 public function testArchives()
123 $client = $this->getClient();
124 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
126 ->getRepository('WallabagUserBundle:User')
127 ->findOneByUsername('admin');
129 $config = $user->getConfig();
130 $config->setRssToken('SUPERTOKEN');
131 $config->setRssLimit(null);
132 $em->persist($config);
135 $client = $this->getClient();
136 $client->request('GET', '/feed/admin/SUPERTOKEN/archive');
138 $this->assertSame(200, $client->getResponse()->getStatusCode());
140 $this->validateDom($client->getResponse()->getContent(), 'archive', 'archive');
143 public function testPagination()
145 $client = $this->getClient();
146 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
148 ->getRepository('WallabagUserBundle:User')
149 ->findOneByUsername('admin');
151 $config = $user->getConfig();
152 $config->setRssToken('SUPERTOKEN');
153 $config->setRssLimit(1);
154 $em->persist($config);
157 $client = $this->getClient();
159 $client->request('GET', '/feed/admin/SUPERTOKEN/unread');
160 $this->assertEquals(200, $client->getResponse()->getStatusCode());
161 $this->validateDom($client->getResponse()->getContent(), 'unread');
163 $client->request('GET', '/feed/admin/SUPERTOKEN/unread/2');
164 $this->assertEquals(200, $client->getResponse()->getStatusCode());
165 $this->validateDom($client->getResponse()->getContent(), 'unread');
167 $client->request('GET', '/feed/admin/SUPERTOKEN/unread/3000');
168 $this->assertEquals(302, $client->getResponse()->getStatusCode());
171 public function testTags()
173 $client = $this->getClient();
174 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
176 ->getRepository('WallabagUserBundle:User')
177 ->findOneByUsername('admin');
179 $config = $user->getConfig();
180 $config->setRssToken('SUPERTOKEN');
181 $config->setRssLimit(null);
182 $em->persist($config);
185 $client = $this->getClient();
186 $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml');
188 $this->assertSame(200, $client->getResponse()->getStatusCode());
190 $this->validateDom($client->getResponse()->getContent(), 'tag (foo bar)', 'tags/foo-bar');
192 $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml?page=3000');
193 $this->assertSame(302, $client->getResponse()->getStatusCode());