diff options
author | David Baucum <david@baucum.me> | 2021-06-01 23:51:34 -0400 |
---|---|---|
committer | Benjamin Brahmer <info@b-brahmer.de> | 2021-07-24 18:17:31 +0200 |
commit | 21203dbf6386e72ef780d0b5d4b81a7e25e94485 (patch) | |
tree | c50e5be017c3a6630b63e37c3292566839dea622 /tests | |
parent | 65c15dac38358d5c3a619379b57bd498c070ea6f (diff) |
Update all feeds from command
Closes #1359
Signed-off-by: David Baucum <david@baucum.me>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Unit/Command/UpdateUserTest.php | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/Unit/Command/UpdateUserTest.php b/tests/Unit/Command/UpdateUserTest.php new file mode 100644 index 000000000..5d5bd8400 --- /dev/null +++ b/tests/Unit/Command/UpdateUserTest.php @@ -0,0 +1,140 @@ +<?php +/** + * Nextcloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + */ + +namespace OCA\News\Tests\Unit\Command; + +use OCA\News\Command\Updater\UpdateUser; +use OCA\News\Db\Feed; +use OCA\News\Service\Exceptions\ServiceNotFoundException; +use OCA\News\Service\FeedServiceV2; +use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class UpdateUserTest extends TestCase +{ + /** @var MockObject|FeedServiceV2 */ + protected $service; + /** @var MockObject|InputInterface */ + protected $consoleInput; + /** @var MockObject|OutputInterface */ + protected $consoleOutput; + + /** @var UpdateUser */ + protected $command; + + protected function setUp(): void + { + $this->service = $this->getMockBuilder(FeedServiceV2::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock(); + $this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock(); + + $this->command = new UpdateUser($this->service); + } + + /** + * Test a valid call will work + */ + public function testValid() + { + $this->consoleInput->expects($this->exactly(1)) + ->method('getArgument') + ->will($this->returnValueMap([ + ['user-id', 'admin'], + ])); + + $feed = $this->createMock(Feed::class); + + $feed->expects($this->exactly(1)) + ->method('getUpdateErrorCount') + ->willReturn(0); + $feed->expects($this->exactly(0)) + ->method('getLastUpdateError'); + + $this->service->expects($this->exactly(1)) + ->method('findAllForUser') + ->with('admin') + ->willReturn([$feed]); + + $this->service->expects($this->exactly(1)) + ->method('fetch') + ->with($feed) + ->willReturn($feed); + + $result = $this->command->run($this->consoleInput, $this->consoleOutput); + $this->assertSame(0, $result); + } + + /** + * Test valid calls that fails on some updates + */ + public function testValidFeedError() + { + $this->consoleInput->expects($this->exactly(1)) + ->method('getArgument') + ->will($this->returnValueMap([ + ['user-id', 'admin'], + ])); + + $feed = $this->createMock(Feed::class); + $feed->expects($this->exactly(1)) + ->method('getUpdateErrorCount') + ->willReturn(10); + $feed->expects($this->exactly(1)) + ->method('getLastUpdateError') + ->willReturn('Problem'); + + $this->service->expects($this->exactly(1)) + ->method('findAllForUser') + ->with('admin') + ->willReturn([$feed]); + + $this->service->expects($this->exactly(1)) + ->method('fetch') + ->with($feed) + ->willReturn($feed); + + $this->consoleOutput->expects($this->exactly(1)) + ->method('writeln') + ->with('Problem'); + + $result = $this->command->run($this->consoleInput, $this->consoleOutput); + $this->assertSame(255, $result); + } + + /** + * Test valid calls that fails completely + */ + public function testInValid() + { + $this->consoleInput->expects($this->exactly(1)) + ->method('getArgument') + ->will($this->returnValueMap([ + ['user-id', 'admin'], + ])); + + $feed = $this->createMock(Feed::class); + + $this->service->expects($this->exactly(1)) + ->method('findAllForUser') + ->with('admin') + ->willReturn([$feed]); + + $this->service->expects($this->exactly(1)) + ->method('fetch') + ->with($feed) + ->will($this->throwException(new ServiceNotFoundException(''))); + + $result = $this->command->run($this->consoleInput, $this->consoleOutput); + $this->assertSame(1, $result); + } +} |