| 
								
							 | 
							
								<?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);
							 | 
						
						
						
							| 
								
							 | 
							
								  }
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								}
							 |