From 56f45e49601be8ba9da159a468a06298383c20af Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Nov 2016 10:47:55 +0100 Subject: [PATCH] Add tests for the filters Signed-off-by: Joas Schilling --- .../CalDAV/Activity/Filter/CalendarTest.php | 84 +++++++++++++ .../unit/CalDAV/Activity/Filter/TodoTest.php | 84 +++++++++++++ .../CalDAV/Activity/GenericFilterTest.php | 110 ++++++++++++++++++ 3 files changed, 278 insertions(+) create mode 100644 apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php create mode 100644 apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php create mode 100644 apps/dav/tests/unit/CalDAV/Activity/GenericFilterTest.php diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php new file mode 100644 index 0000000000..895a404acf --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php @@ -0,0 +1,84 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\DAV\Tests\unit\CalDAV\Activity\Filter; + +use OCA\DAV\CalDAV\Activity\Filter\Calendar; +use OCP\Activity\IFilter; +use OCP\IL10N; +use OCP\IURLGenerator; +use Test\TestCase; + +class CalendarTest extends TestCase { + + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + protected $url; + + /** @var IFilter|\PHPUnit_Framework_MockObject_MockObject */ + protected $filter; + + protected function setUp() { + parent::setUp(); + $this->url = $this->createMock(IURLGenerator::class); + $l = $this->createMock(IL10N::class); + $l->expects($this->any()) + ->method('t') + ->willReturnCallback(function($string, $args) { + return vsprintf($string, $args); + }); + + $this->filter = new Calendar( + $l, $this->url + ); + } + + public function testGetIcon() { + $this->url->expects($this->once()) + ->method('imagePath') + ->with('core', 'places/calendar-dark.svg') + ->willReturn('path-to-icon'); + + $this->url->expects($this->once()) + ->method('getAbsoluteURL') + ->with('path-to-icon') + ->willReturn('absolute-path-to-icon'); + + $this->assertEquals('absolute-path-to-icon', $this->filter->getIcon()); + } + + public function dataFilterTypes() { + return [ + [[], []], + [['calendar', 'calendar_event'], ['calendar', 'calendar_event']], + [['calendar', 'calendar_event', 'calendar_todo'], ['calendar', 'calendar_event']], + [['calendar', 'calendar_event', 'files'], ['calendar', 'calendar_event']], + ]; + } + + /** + * @dataProvider dataFilterTypes + * @param string[] $types + * @param string[] $expected + */ + public function testFilterTypes($types, $expected) { + $this->assertEquals($expected, $this->filter->filterTypes($types)); + } +} diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php new file mode 100644 index 0000000000..54a5a6f5f9 --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php @@ -0,0 +1,84 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\DAV\Tests\unit\CalDAV\Activity\Filter; + +use OCA\DAV\CalDAV\Activity\Filter\Todo; +use OCP\Activity\IFilter; +use OCP\IL10N; +use OCP\IURLGenerator; +use Test\TestCase; + +class TodoTest extends TestCase { + + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + protected $url; + + /** @var IFilter|\PHPUnit_Framework_MockObject_MockObject */ + protected $filter; + + protected function setUp() { + parent::setUp(); + $this->url = $this->createMock(IURLGenerator::class); + $l = $this->createMock(IL10N::class); + $l->expects($this->any()) + ->method('t') + ->willReturnCallback(function($string, $args) { + return vsprintf($string, $args); + }); + + $this->filter = new Todo( + $l, $this->url + ); + } + + public function testGetIcon() { + $this->url->expects($this->once()) + ->method('imagePath') + ->with('core', 'actions/checkmark.svg') + ->willReturn('path-to-icon'); + + $this->url->expects($this->once()) + ->method('getAbsoluteURL') + ->with('path-to-icon') + ->willReturn('absolute-path-to-icon'); + + $this->assertEquals('absolute-path-to-icon', $this->filter->getIcon()); + } + + public function dataFilterTypes() { + return [ + [[], []], + [['calendar_todo'], ['calendar_todo']], + [['calendar', 'calendar_event', 'calendar_todo'], ['calendar_todo']], + [['calendar', 'calendar_todo', 'files'], ['calendar_todo']], + ]; + } + + /** + * @dataProvider dataFilterTypes + * @param string[] $types + * @param string[] $expected + */ + public function testFilterTypes($types, $expected) { + $this->assertEquals($expected, $this->filter->filterTypes($types)); + } +} diff --git a/apps/dav/tests/unit/CalDAV/Activity/GenericFilterTest.php b/apps/dav/tests/unit/CalDAV/Activity/GenericFilterTest.php new file mode 100644 index 0000000000..b7297b6eba --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Activity/GenericFilterTest.php @@ -0,0 +1,110 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\DAV\Tests\unit\CalDAV\Activity; + +use OCA\DAV\CalDAV\Activity\Filter\Calendar; +use OCA\DAV\CalDAV\Activity\Filter\Todo; +use OCP\Activity\IFilter; +use Test\TestCase; + +class GenericFilterTest extends TestCase { + + public function dataFilters() { + return [ + [Calendar::class], + [Todo::class], + ]; + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testImplementsInterface($filterClass) { + $filter = \OC::$server->query($filterClass); + $this->assertInstanceOf(IFilter::class, $filter); + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testGetIdentifier($filterClass) { + /** @var IFilter $filter */ + $filter = \OC::$server->query($filterClass); + $this->assertInternalType('string', $filter->getIdentifier()); + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testGetName($filterClass) { + /** @var IFilter $filter */ + $filter = \OC::$server->query($filterClass); + $this->assertInternalType('string', $filter->getName()); + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testGetPriority($filterClass) { + /** @var IFilter $filter */ + $filter = \OC::$server->query($filterClass); + $priority = $filter->getPriority(); + $this->assertInternalType('int', $filter->getPriority()); + $this->assertGreaterThanOrEqual(0, $priority); + $this->assertLessThanOrEqual(100, $priority); + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testGetIcon($filterClass) { + /** @var IFilter $filter */ + $filter = \OC::$server->query($filterClass); + $this->assertInternalType('string', $filter->getIcon()); + $this->assertStringStartsWith('http', $filter->getIcon()); + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testFilterTypes($filterClass) { + /** @var IFilter $filter */ + $filter = \OC::$server->query($filterClass); + $this->assertInternalType('array', $filter->filterTypes([])); + } + + /** + * @dataProvider dataFilters + * @param string $filterClass + */ + public function testAllowedApps($filterClass) { + /** @var IFilter $filter */ + $filter = \OC::$server->query($filterClass); + $this->assertInternalType('array', $filter->allowedApps()); + } +}