client = new Feeds(); $this->client->http = new p3k\HTTP\Test(dirname(__FILE__).'/data/'); $this->client->mc = null; } private function parse($params) { $request = new Request($params); $response = new Response(); return $this->client->find($request, $response); } // h-feed with no alternates public function testMf2HFeed() { $url = 'http://feed.example.com/h-feed-with-child-author'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/h-feed-with-child-author', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); } // h-feed that links to Atom alternate public function testMf2WithAtomAlternate() { $url = 'http://feed.example.com/h-feed-with-atom-alternate'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(2, count($feeds)); // Should rank h-feed above Atom $this->assertEquals('http://feed.example.com/h-feed-with-atom-alternate', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); $this->assertEquals('http://feed.example.com/atom', $feeds[1]->url); $this->assertEquals('atom', $feeds[1]->type); } // h-feed that links to RSS alternate public function testMf2WithRSSAlternate() { $url = 'http://feed.example.com/h-feed-with-rss-alternate'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(2, count($feeds)); // Should rank JSONFeed above Atom $this->assertEquals('http://feed.example.com/h-feed-with-rss-alternate', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); $this->assertEquals('http://feed.example.com/podcast.xml', $feeds[1]->url); $this->assertEquals('rss', $feeds[1]->type); } // No mf2 but links to Atom alternate public function testNoMf2() { $url = 'http://feed.example.com/html-with-atom-alternate'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/atom', $feeds[0]->url); $this->assertEquals('atom', $feeds[0]->type); } public function testNoMf2WithJSONAndAtom() { $url = 'http://feed.example.com/html-with-json-and-atom'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(2, count($feeds)); // Should rank JSONFeed above Atom $this->assertEquals('http://feed.example.com/jsonfeed', $feeds[0]->url); $this->assertEquals('jsonfeed', $feeds[0]->type); $this->assertEquals('http://feed.example.com/atom', $feeds[1]->url); $this->assertEquals('atom', $feeds[1]->type); } // input URL is an Atom feed public function testInputIsAtom() { $url = 'http://feed.example.com/atom'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/atom', $feeds[0]->url); $this->assertEquals('atom', $feeds[0]->type); } // input URL is an RSS feed with xml content type public function testInputIsRSSWithXML() { $url = 'http://feed.example.com/rss-xml-content-type'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/rss-xml-content-type', $feeds[0]->url); $this->assertEquals('rss', $feeds[0]->type); } // input URL redirects to an Atom feed public function testInputIsRedirectToAtom() { $url = 'http://feed.example.com/redirect-to-atom'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/atom', $feeds[0]->url); $this->assertEquals('atom', $feeds[0]->type); } // input URL is a temporary redirect to another page. // report the original input URL public function testInputIsTemporaryRedirect() { $url = 'http://feed.example.com/temporary-redirect'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/temporary-redirect', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); } public function testInputIsPermanentRedirect() { $url = 'http://feed.example.com/permanent-redirect'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/permanent-redirect-target', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); } // input URL is an RSS feed public function testInputIsRSS() { $url = 'http://feed.example.com/rss'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/rss', $feeds[0]->url); $this->assertEquals('rss', $feeds[0]->type); } // input URL is a JSON feed public function testInputIsJSONFeed() { $url = 'http://feed.example.com/jsonfeed'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/jsonfeed', $feeds[0]->url); $this->assertEquals('jsonfeed', $feeds[0]->type); } public function testInputIsMicroformats2JSON() { $url = 'http://feed.example.com/microformats2-json'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/microformats2-json', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); } public function testInputIsMF2JSON() { $url = 'http://feed.example.com/mf2-json'; $response = $this->parse(['url' => $url]); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $feeds = json_decode($body)->feeds; $this->assertEquals(1, count($feeds)); $this->assertEquals('http://feed.example.com/mf2-json', $feeds[0]->url); $this->assertEquals('microformats', $feeds[0]->type); } }