|  | <?php | 
						
						
							|  | use Symfony\Component\HttpFoundation\Request; | 
						
						
							|  | use Symfony\Component\HttpFoundation\Response; | 
						
						
							|  | 
 | 
						
						
							|  | class FindFeedsTest extends PHPUnit_Framework_TestCase { | 
						
						
							|  | 
 | 
						
						
							|  |   private $http; | 
						
						
							|  | 
 | 
						
						
							|  |   public function setUp() { | 
						
						
							|  |     $this->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 JSONFeed 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 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); | 
						
						
							|  |   } | 
						
						
							|  | 
 | 
						
						
							|  | 
 | 
						
						
							|  | }
 |