diff --git a/src/Validator/ModList/UniqueModListNameValidator.php b/src/Validator/ModList/UniqueModListNameValidator.php index e31e9e98..2ce9638c 100644 --- a/src/Validator/ModList/UniqueModListNameValidator.php +++ b/src/Validator/ModList/UniqueModListNameValidator.php @@ -23,8 +23,12 @@ public function validate(mixed $value, Constraint $constraint): void } $name = $value->getName(); + if ('' === $name || null === $name) { + return; + } + $id = $value->getId(); - if (!$name || $this->isColumnValueUnique(ModList::class, ['name' => $name], $id)) { + if ($this->isColumnValueUnique(ModList::class, ['name' => $name], $id)) { return; } diff --git a/tests/functional/Web/ModList/DeleteModListCest.php b/tests/functional/Web/ModList/DeleteModListCest.php new file mode 100644 index 00000000..9cabb50d --- /dev/null +++ b/tests/functional/Web/ModList/DeleteModListCest.php @@ -0,0 +1,53 @@ +stopFollowingRedirects(); + } + + public function deleteModListAsUnauthenticatedUser(FunctionalTester $I): void + { + $name = DefaultModListFixture::NAME; + $I->amOnPage(sprintf('/mod-list/%s/delete', $name)); + $I->seeResponseRedirectsToDiscordAuth(); + + $I->seeInRepository(ModList::class, ['name' => $name]); + } + + public function deleteModListAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $name = DefaultModListFixture::NAME; + $I->amOnPage(sprintf('/mod-list/%s/delete', $name)); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + + $I->seeInRepository(ModList::class, ['name' => $name]); + } + + public function deleteModListAsAuthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modListDelete = true; + }); + + $name = DefaultModListFixture::NAME; + $I->amOnPage(sprintf('/mod-list/%s/delete', $name)); + $I->seeResponseRedirectsTo('/mod-list/list'); + + $I->dontSeeInRepository(ModList::class, ['name' => $name]); + } +} diff --git a/tests/functional/Web/ModList/ListModListsCest.php b/tests/functional/Web/ModList/ListModListsCest.php new file mode 100644 index 00000000..c89cd042 --- /dev/null +++ b/tests/functional/Web/ModList/ListModListsCest.php @@ -0,0 +1,90 @@ +stopFollowingRedirects(); + } + + public function listModListsAsUnauthenticatedUser(FunctionalTester $I): void + { + $I->amOnPage('/mod-list/list'); + $I->seeResponseRedirectsToDiscordAuth(); + } + + public function listModListsAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $I->amOnPage('/mod-list/list'); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + } + + public function listModListsAsAuthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modListList = true; + }); + + $I->amOnPage('/mod-list/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeActionButton('Create mod list'); + $I->dontSeeActionButton('Edit mod list'); + } + + public function listModListsAsAuthorizedUserWithCreateModListPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modListList = true; + $user->getPermissions()->modListCreate = true; + }); + + $I->amOnPage('/mod-list/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->seeLink('Create mod list'); + $I->dontSeeActionButton('Edit mod list'); + $I->dontSeeActionButton('Delete mod list'); + } + + public function listModListsAsAuthorizedUserWithUpdateModListPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modListList = true; + $user->getPermissions()->modListUpdate = true; + }); + + $I->amOnPage('/mod-list/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeLink('Create mod list'); + $I->seeActionButton('Edit mod list'); + $I->dontSeeActionButton('Delete mod list'); + } + + public function listModListsAsAuthorizedUserWithDeleteModListPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modListList = true; + $user->getPermissions()->modListDelete = true; + }); + + $I->amOnPage('/mod-list/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeLink('Create mod list'); + $I->dontSeeActionButton('Edit mod list'); + $I->seeActionButton('Delete mod list'); + } +}