|                                                                                                                                                                                                                                             |  | <?phpuse Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;
class FindFeedsTest extends PHPUnit\Framework\TestCase{
    private $http;
    public function setUp(): void    {        $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 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);    }}
 |