diff options
author | Julius Härtl <jus@bitgrid.net> | 2022-10-31 14:46:51 +0300 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2022-10-31 14:47:35 +0300 |
commit | bfec6f5ad4c662b14d39f98a4f7ea80d55a82a47 (patch) | |
tree | 0627dbbfddf865a719eb4877e776f4374bf25b5b /tests | |
parent | 1217b37b19127305ce77340e69765c6b244c2cf3 (diff) |
Add some tests for parameter validation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/integration/features/decks.feature | 19 | ||||
-rw-r--r-- | tests/unit/Validators/StackServiceValidatorTest.php | 77 | ||||
-rw-r--r-- | tests/unit/Validators/ValidatorTestBase.php | 57 |
3 files changed, 153 insertions, 0 deletions
diff --git a/tests/integration/features/decks.feature b/tests/integration/features/decks.feature index bb141ef7..22a74bae 100644 --- a/tests/integration/features/decks.feature +++ b/tests/integration/features/decks.feature @@ -13,3 +13,22 @@ Feature: decks |key|value| |title|MyBoard| |color|000000| + + Scenario: Fail to create a board with invalid parameters + Given acting as user "user0" + When creates a board named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 100 characters" with color "ff0000" + Then the response should have a status code 400 + When creates a board named "Example board" with color "invalid" + Then the response should have a status code 400 + + Scenario: Fail to create a list with invalid parameters + Given acting as user "user0" + And creates a board named "MyBoard" with color "000000" + When create a stack named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 100 characters" + Then the response should have a status code 400 + + Scenario: Fail to create a card with invalid parameters + Given acting as user "user0" + And creates a board named "MyBoard" with color "000000" + And create a stack named "ToDo" + When create a card named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters" diff --git a/tests/unit/Validators/StackServiceValidatorTest.php b/tests/unit/Validators/StackServiceValidatorTest.php new file mode 100644 index 00000000..052f7972 --- /dev/null +++ b/tests/unit/Validators/StackServiceValidatorTest.php @@ -0,0 +1,77 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @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 <http://www.gnu.org/licenses/>. + */ + + +namespace OCA\Deck\Validators; + +use OCA\Deck\Tests\unit\Validators\ValidatorTestBase; + +class StackServiceValidatorTest extends ValidatorTestBase { + public function setUp(): void { + parent::setUpValidatorTest(StackServiceValidator::class); + } + + public function testTitle() { + $this->assertPass([ + 'title' => 'Short title', + ]); + $this->assertPass([ + 'title' => str_repeat('A', 100) + ]); + $this->assertFail([ + 'title' => str_repeat('A', 101) + ]); + $this->assertFail([ + 'title' => '', + ]); + $this->assertFail([ + 'title' => null, + ]); + } + + public function testId() { + $this->assertPass([ 'id' => 1234 ]); + $this->assertPass([ 'id' => '1234' ]); + $this->assertFail([ 'id' => 'a1234' ]); + $this->assertFail([ 'id' => '' ]); + $this->assertFail([ 'id' => null ]); + } + + public function testBoardId() { + $this->assertPass([ 'boardId' => 1234 ]); + $this->assertPass([ 'boardId' => '1234' ]); + $this->assertFail([ 'boardId' => 'a1234' ]); + $this->assertFail([ 'boardId' => '' ]); + $this->assertFail([ 'boardId' => null ]); + } + + public function testOrder() { + $this->assertPass([ 'order' => 1234 ]); + $this->assertPass([ 'order' => '1234' ]); + $this->assertFail([ 'order' => 'a1234' ]); + $this->assertFail([ 'order' => '' ]); + $this->assertFail([ 'order' => null ]); + } +} diff --git a/tests/unit/Validators/ValidatorTestBase.php b/tests/unit/Validators/ValidatorTestBase.php new file mode 100644 index 00000000..cce03f6e --- /dev/null +++ b/tests/unit/Validators/ValidatorTestBase.php @@ -0,0 +1,57 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @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 <http://www.gnu.org/licenses/>. + */ + + +namespace OCA\Deck\Tests\unit\Validators; + +use OCA\Deck\BadRequestException; +use OCA\Deck\Validators\BaseValidator; + +abstract class ValidatorTestBase extends \PHPUnit\Framework\TestCase { + protected BaseValidator $validator; + + public function setUpValidatorTest($class = null): void { + parent::setUp(); + + $this->validator = new $class(); + } + + protected function assertPass($values) { + self::assertTrue($this->check($values)); + } + + protected function assertFail($values) { + self::assertFalse($this->check($values)); + } + + private function check($values) { + try { + $this->validator->check($values); + return true; + } catch (BadRequestException $e) { + return false; + } + } +} |