From ee6bb6ce70b1362bde39aa8183b407555f418204 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Thu, 31 Jan 2019 13:40:52 +0100 Subject: Fix mismatched interface --- lib/Fetcher/FeedFetcher.php | 19 ++++--------------- lib/Fetcher/IFeedFetcher.php | 14 +++++++------- lib/Fetcher/YoutubeFetcher.php | 15 +++------------ tests/Unit/Fetcher/FeedFetcherTest.php | 28 +++++++++++++++++----------- tests/Unit/Fetcher/FetcherTest.php | 2 +- tests/Unit/Fetcher/YoutubeFetcherTest.php | 19 ++++++++++++++++--- 6 files changed, 48 insertions(+), 49 deletions(-) diff --git a/lib/Fetcher/FeedFetcher.php b/lib/Fetcher/FeedFetcher.php index abfd0095b..38fcab823 100644 --- a/lib/Fetcher/FeedFetcher.php +++ b/lib/Fetcher/FeedFetcher.php @@ -58,20 +58,9 @@ class FeedFetcher implements IFeedFetcher /** * Fetch a feed from remote * - * @param string $url Remote url of the feed - * @param boolean $getFavicon If the favicon should also be fetched, - * defaults to true - * @param string $lastModified A last modified value from an http header - * defaults to false. If lastModified matches - * the header from the feed no results are fetched - * @param string $user If given, basic auth is set for this feed - * @param string $password If given, basic auth is set for this feed. - * Ignored if user is null or an empty string. - * - * @return array an array containing the new feed and its items, first - * element being the Feed and second element being an array of Items + * @inheritdoc */ - public function fetch(string $url, $getFavicon = true, $lastModified = null, $user = null, $password = null): array + public function fetch(string $url, bool $favicon, $lastModified, $user, $password): array { if ($user !== null && trim($user) !== '') { $url = explode('://', $url); @@ -88,7 +77,7 @@ class FeedFetcher implements IFeedFetcher $feed = $this->buildFeed( $parsedFeed, $url, - $getFavicon, + $favicon, $location ); @@ -220,7 +209,7 @@ class FeedFetcher implements IFeedFetcher * * @return Feed */ - protected function buildFeed(FeedInterface $feed, string $url, boolean $getFavicon, string $location): Feed + protected function buildFeed(FeedInterface $feed, string $url, bool $getFavicon, string $location): Feed { $newFeed = new Feed(); diff --git a/lib/Fetcher/IFeedFetcher.php b/lib/Fetcher/IFeedFetcher.php index 70f153d2e..ecc0ffc16 100644 --- a/lib/Fetcher/IFeedFetcher.php +++ b/lib/Fetcher/IFeedFetcher.php @@ -19,18 +19,18 @@ interface IFeedFetcher /** * Fetch feed content. * - * @param string $url remote url of the feed - * @param boolean $getFavicon if the favicon should also be fetched, defaults to true - * @param string $lastModified a last modified value from an http header defaults to false. + * @param string $url remote url of the feed + * @param boolean $favicon if the favicon should also be fetched, defaults to true + * @param string|null $lastModified a last modified value from an http header defaults to false. * If lastModified matches the http header from the feed no results are fetched - * @param string $user if given, basic auth is set for this feed - * @param string $password if given, basic auth is set for this feed. Ignored if user is empty + * @param string|null $user if given, basic auth is set for this feed + * @param string|null $password if given, basic auth is set for this feed. Ignored if user is empty * - * @throws FetcherException if the fetcher encounters a problem * @return array an array containing the new feed and its items, first * element being the Feed and second element being an array of Items + * @throws FetcherException if the fetcher encounters a problem */ - public function fetch($url, $getFavicon = true, $lastModified = null, $user = null, $password = null): array; + public function fetch(string $url, bool $favicon, $lastModified, $user, $password): array; /** * Can a fetcher handle a feed. diff --git a/lib/Fetcher/YoutubeFetcher.php b/lib/Fetcher/YoutubeFetcher.php index fd4e7d2fb..41319a36b 100644 --- a/lib/Fetcher/YoutubeFetcher.php +++ b/lib/Fetcher/YoutubeFetcher.php @@ -48,24 +48,15 @@ class YoutubeFetcher implements IFeedFetcher /** * Fetch a feed from remote * - * @param string $url remote url of the feed - * @param boolean $getFavicon if the favicon should also be fetched, defaults to true - * @param string $lastModified a last modified value from an http header defaults to false. - * If lastModified matches the http header from the feed no results are fetched - * @param string $user if given, basic auth is set for this feed - * @param string $password if given, basic auth is set for this feed. Ignored if user is empty - * - * @throws FetcherException if it fails - * @return array an array containing the new feed and its items, first - * element being the Feed and second element being an array of Items + * @inheritdoc */ - public function fetch($url, $getFavicon = true, $lastModified = null, $user = null, $password = null): array + public function fetch(string $url, bool $favicon, $lastModified, $user, $password): array { $transformedUrl = $this->buildUrl($url); $result = $this->feedFetcher->fetch( $transformedUrl, - $getFavicon, + $favicon, $lastModified, $user, $password diff --git a/tests/Unit/Fetcher/FeedFetcherTest.php b/tests/Unit/Fetcher/FeedFetcherTest.php index f6ef47602..510e5471d 100644 --- a/tests/Unit/Fetcher/FeedFetcherTest.php +++ b/tests/Unit/Fetcher/FeedFetcherTest.php @@ -165,10 +165,16 @@ class FeedFetcherTest extends TestCase $this->assertTrue($this->_fetcher->canHandle($url)); } + /** + * Test if error is thrown when the feed remain the same. + * + * @expectedException \OCA\News\Fetcher\FetcherException + * @expectedExceptionMessage Feed was not modified since last fetch + */ public function testNoFetchIfNotModified() { $this->_setUpReader($this->_url, false);; - $result = $this->_fetcher->fetch($this->_url, false); + $result = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertSame([null, null], $result); } @@ -178,7 +184,7 @@ class FeedFetcherTest extends TestCase $item = $this->_createItem(); $feed = $this->_createFeed(); $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - $result = $this->_fetcher->fetch($this->_url, false); + $result = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertEquals([$feed, [$item]], $result); } @@ -190,7 +196,7 @@ class FeedFetcherTest extends TestCase $item = $this->_createItem('audio/ogg'); $feed = $this->_createFeed(); $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - $result = $this->_fetcher->fetch($this->_url, false); + $result = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertEquals([$feed, [$item]], $result); } @@ -202,7 +208,7 @@ class FeedFetcherTest extends TestCase $item = $this->_createItem('video/ogg'); $feed = $this->_createFeed(); $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - $result = $this->_fetcher->fetch($this->_url, false); + $result = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertEquals([$feed, [$item]], $result); } @@ -214,7 +220,7 @@ class FeedFetcherTest extends TestCase $feed = $this->_createFeed('de-DE', true); $item = $this->_createItem(); $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - $result = $this->_fetcher->fetch($this->_url, true); + $result = $this->_fetcher->fetch($this->_url, true, null, null, null); $this->assertEquals([$feed, [$item]], $result); } @@ -230,7 +236,7 @@ class FeedFetcherTest extends TestCase $item = $this->_createItem(); $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - $result = $this->_fetcher->fetch($this->_url, false); + $result = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertEquals([$feed, [$item]], $result); } @@ -241,9 +247,7 @@ class FeedFetcherTest extends TestCase $this->_createFeed('he-IL'); $this->_createItem(); $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - list($feed, $items) = $this->_fetcher->fetch( - $this->_url, false - ); + list($feed, $items) = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertTrue($items[0]->getRtl()); } @@ -262,7 +266,7 @@ class FeedFetcherTest extends TestCase $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - list($feed, $items) = $this->_fetcher->fetch($this->_url, false); + list($feed, $items) = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertSame($items[0]->getPubDate(), 1522180229); } @@ -281,7 +285,7 @@ class FeedFetcherTest extends TestCase $this->_mockIterator($this->_feed_mock, [$this->_item_mock]); - list($feed, $items) = $this->_fetcher->fetch($this->_url, false); + list($feed, $items) = $this->_fetcher->fetch($this->_url, false, null, null, null); $this->assertSame($items[0]->getPubDate(), 1519761029); } @@ -374,6 +378,7 @@ class FeedFetcherTest extends TestCase $this->_response->expects($this->once()) ->method('isModified') ->will($this->returnValue($modified)); + $this->_location = $url; if (!$modified) { $this->_result->expects($this->never()) @@ -462,6 +467,7 @@ class FeedFetcherTest extends TestCase $feed->setTitle('&its a title'); $feed->setLink($this->_feed_link); + $feed->setLocation($this->_location); $feed->setUrl($this->_url); $feed->setLastModified(3); $feed->setAdded($this->_time); diff --git a/tests/Unit/Fetcher/FetcherTest.php b/tests/Unit/Fetcher/FetcherTest.php index e8c648177..2549ff606 100644 --- a/tests/Unit/Fetcher/FetcherTest.php +++ b/tests/Unit/Fetcher/FetcherTest.php @@ -118,7 +118,7 @@ class FetcherTest extends TestCase public function testMultipleFetchersOnlyOneShouldHandle() { $url = 'hi'; - $return = 'zeas'; + $return = []; $mockFetcher = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/Unit/Fetcher/YoutubeFetcherTest.php b/tests/Unit/Fetcher/YoutubeFetcherTest.php index f53958b8f..80f50b9d6 100644 --- a/tests/Unit/Fetcher/YoutubeFetcherTest.php +++ b/tests/Unit/Fetcher/YoutubeFetcherTest.php @@ -13,6 +13,7 @@ namespace OCA\News\Tests\Unit\Fetcher; use \OCA\News\Db\Feed; use OCA\News\Fetcher\FeedFetcher; +use OCA\News\Fetcher\Fetcher; use OCA\News\Fetcher\YoutubeFetcher; use PHPUnit\Framework\TestCase; @@ -20,7 +21,18 @@ use PHPUnit\Framework\TestCase; class YoutubeFetcherTest extends TestCase { + /** + * Mocked fetcher. + * + * @var Fetcher + */ private $fetcher; + + /** + * Mocked Feed Fetcher. + * + * @var FeedFetcher + */ private $feedFetcher; public function setUp() @@ -52,7 +64,8 @@ class YoutubeFetcherTest extends TestCase $transformedUrl = 'http://gdata.youtube.com/feeds/api/playlists/sobo3'; $favicon = true; $modified = 3; - $etag = 5; + $user = 5; + $password = 5; $feed = new Feed(); $feed->setUrl('http://google.de'); $result = [$feed, []]; @@ -63,10 +76,10 @@ class YoutubeFetcherTest extends TestCase $this->equalTo($transformedUrl), $this->equalTo($favicon), $this->equalTo($modified), - $this->equalTo($etag) + $this->equalTo($user) ) ->will($this->returnValue($result)); - $feed = $this->fetcher->fetch($url, $favicon, $modified, $etag); + $feed = $this->fetcher->fetch($url, $favicon, $modified, $user, $password); $this->assertEquals($url, $result[0]->getUrl()); } -- cgit v1.2.3