. */ namespace OCA\News\Tests\Unit\Fetcher; use OCA\News\Fetcher\Fetcher; use OCA\News\Fetcher\IFeedFetcher; use PHPUnit\Framework\TestCase; class FetcherTest extends TestCase { private $fetcher; protected function setUp() { $this->fetcher = new Fetcher(); } public function testFetch() { $url = 'hi'; $mockFetcher = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher->expects($this->once()) ->method('canHandle') ->with($this->equalTo($url)) ->will($this->returnValue(true)); $mockFetcher->expects($this->once()) ->method('fetch') ->with( $this->equalTo($url), $this->equalTo(true), $this->equalTo(1), $this->equalTo(2), $this->equalTo(3) ); $this->fetcher->registerFetcher($mockFetcher); $this->fetcher->fetch($url, true, 1, 2, 3); } public function testNoFetchers() { $url = 'hi'; $mockFetcher = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher->expects($this->once()) ->method('canHandle') ->with($this->equalTo($url)) ->will($this->returnValue(false)); $mockFetcher2 = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher2->expects($this->once()) ->method('canHandle') ->with($this->equalTo($url)) ->will($this->returnValue(false)); $this->fetcher->registerFetcher($mockFetcher); $this->fetcher->registerFetcher($mockFetcher2); $result = $this->fetcher->fetch($url); $this->assertEquals([null, []], $result); } public function testMultipleFetchers() { $url = 'hi'; $mockFetcher = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher->expects($this->once()) ->method('canHandle') ->with($this->equalTo($url)) ->will($this->returnValue(false)); $mockFetcher2 = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher2->expects($this->once()) ->method('canHandle') ->with($this->equalTo($url)) ->will($this->returnValue(true)); $this->fetcher->registerFetcher($mockFetcher); $this->fetcher->registerFetcher($mockFetcher2); $this->fetcher->fetch($url); } public function testMultipleFetchersOnlyOneShouldHandle() { $url = 'hi'; $return = 'zeas'; $mockFetcher = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher->expects($this->once()) ->method('canHandle') ->with($this->equalTo($url)) ->will($this->returnValue(true)); $mockFetcher->expects($this->once()) ->method('fetch') ->with($this->equalTo($url)) ->will($this->returnValue($return)); $mockFetcher2 = $this->getMockBuilder(IFeedFetcher::class) ->disableOriginalConstructor() ->getMock(); $mockFetcher2->expects($this->never()) ->method('canHandle'); $this->fetcher->registerFetcher($mockFetcher); $this->fetcher->registerFetcher($mockFetcher2); $result = $this->fetcher->fetch($url); $this->assertEquals($return, $result); } }