diff --git a/src/Validator/ModGroup/UniqueModGroupNameValidator.php b/src/Validator/ModGroup/UniqueModGroupNameValidator.php index 6c254ca2..7261dc0c 100644 --- a/src/Validator/ModGroup/UniqueModGroupNameValidator.php +++ b/src/Validator/ModGroup/UniqueModGroupNameValidator.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(ModGroup::class, ['name' => $name], $id)) { + if ($this->isColumnValueUnique(ModGroup::class, ['name' => $name], $id)) { return; } diff --git a/tests/functional/Web/ModGroup/DeleteModGroupCest.php b/tests/functional/Web/ModGroup/DeleteModGroupCest.php new file mode 100644 index 00000000..00c4ba0c --- /dev/null +++ b/tests/functional/Web/ModGroup/DeleteModGroupCest.php @@ -0,0 +1,53 @@ +stopFollowingRedirects(); + } + + public function deleteModGroupAsUnauthenticatedUser(FunctionalTester $I): void + { + $name = CupModGroupFixture::NAME; + $I->amOnPage(sprintf('/mod-group/%s/delete', $name)); + $I->seeResponseRedirectsToDiscordAuth(); + + $I->seeInRepository(ModGroup::class, ['name' => CupModGroupFixture::NAME]); + } + + public function deleteModGroupAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $name = CupModGroupFixture::NAME; + $I->amOnPage(sprintf('/mod-group/%s/delete', $name)); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + + $I->seeInRepository(ModGroup::class, ['name' => $name]); + } + + public function deleteModGroupAsAuthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modGroupDelete = true; + }); + + $name = CupModGroupFixture::NAME; + $I->amOnPage(sprintf('/mod-group/%s/delete', $name)); + $I->seeResponseRedirectsTo('/mod-group/list'); + + $I->dontSeeInRepository(ModGroup::class, ['name' => $name]); + } +} diff --git a/tests/functional/Web/ModGroup/ListModGroupsCest.php b/tests/functional/Web/ModGroup/ListModGroupsCest.php new file mode 100644 index 00000000..4d208b3a --- /dev/null +++ b/tests/functional/Web/ModGroup/ListModGroupsCest.php @@ -0,0 +1,90 @@ +stopFollowingRedirects(); + } + + public function listModGroupsAsUnauthenticatedUser(FunctionalTester $I): void + { + $I->amOnPage('/mod-group/list'); + $I->seeResponseRedirectsToDiscordAuth(); + } + + public function listModGroupsAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $I->amOnPage('/mod-group/list'); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + } + + public function listModGroupsAsAuthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modGroupList = true; + }); + + $I->amOnPage('/mod-group/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeActionButton('Create mod group'); + $I->dontSeeActionButton('Edit mod group'); + } + + public function listModGroupsAsAuthorizedUserWithCreateModPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modGroupList = true; + $user->getPermissions()->modGroupCreate = true; + }); + + $I->amOnPage('/mod-group/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->seeLink('Create mod group'); + $I->dontSeeActionButton('Edit mod group'); + $I->dontSeeActionButton('Delete mod group'); + } + + public function listModGroupsAsAuthorizedUserWithUpdateModPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modGroupList = true; + $user->getPermissions()->modGroupUpdate = true; + }); + + $I->amOnPage('/mod-group/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeLink('Create mod group'); + $I->seeActionButton('Edit mod group'); + $I->dontSeeActionButton('Delete mod group'); + } + + public function listModGroupsAsAuthorizedUserWithDeleteModPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->modGroupList = true; + $user->getPermissions()->modGroupDelete = true; + }); + + $I->amOnPage('/mod-group/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeLink('Create mod group'); + $I->dontSeeActionButton('Edit mod group'); + $I->seeActionButton('Delete mod group'); + } +}