From cdeb22d826819ce0fa4a3a0521b00934627597e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Skowro=C5=84ski?= Date: Wed, 1 Nov 2023 00:02:13 +0100 Subject: [PATCH] Add DLC tests --- src/Form/Dlc/Dto/DlcFormDto.php | 5 +- .../Dlc/SteamStoreArma3DlcUrlValidator.php | 3 + .../Dlc/UniqueDirectoryDlcValidator.php | 6 +- tests/functional/Web/Dlc/CreateDlcCest.php | 221 +++++++++++++++++ tests/functional/Web/Dlc/DeleteDlcCest.php | 53 +++++ tests/functional/Web/Dlc/ListDlcsCest.php | 90 +++++++ tests/functional/Web/Dlc/UpdateDlcCest.php | 223 ++++++++++++++++++ 7 files changed, 598 insertions(+), 3 deletions(-) create mode 100644 tests/functional/Web/Dlc/CreateDlcCest.php create mode 100644 tests/functional/Web/Dlc/DeleteDlcCest.php create mode 100644 tests/functional/Web/Dlc/ListDlcsCest.php create mode 100644 tests/functional/Web/Dlc/UpdateDlcCest.php diff --git a/src/Form/Dlc/Dto/DlcFormDto.php b/src/Form/Dlc/Dto/DlcFormDto.php index e56695f1..a0f2bba0 100644 --- a/src/Form/Dlc/Dto/DlcFormDto.php +++ b/src/Form/Dlc/Dto/DlcFormDto.php @@ -13,8 +13,8 @@ use Symfony\Component\Validator\Constraints as Assert; #[SteamStoreArma3DlcUrl(errorPath: 'url')] -#[UniqueSteamStoreDlc] -#[UniqueDirectoryDlc] +#[UniqueSteamStoreDlc(errorPath: 'url')] +#[UniqueDirectoryDlc(errorPath: 'directory')] class DlcFormDto extends AbstractFormDto { protected ?UuidInterface $id = null; @@ -25,6 +25,7 @@ class DlcFormDto extends AbstractFormDto #[Assert\Length(min: 1, max: 255)] protected ?string $description = null; + #[Assert\NotBlank] protected ?string $url = null; #[Assert\NotBlank] diff --git a/src/Validator/Dlc/SteamStoreArma3DlcUrlValidator.php b/src/Validator/Dlc/SteamStoreArma3DlcUrlValidator.php index 064aa217..8f30c74a 100644 --- a/src/Validator/Dlc/SteamStoreArma3DlcUrlValidator.php +++ b/src/Validator/Dlc/SteamStoreArma3DlcUrlValidator.php @@ -36,6 +36,9 @@ public function validate(mixed $value, Constraint $constraint): void } $url = $value->getUrl(); + if ('' === $url || null === $url) { + return; + } try { $appId = SteamHelper::appUrlToAppId($url); diff --git a/src/Validator/Dlc/UniqueDirectoryDlcValidator.php b/src/Validator/Dlc/UniqueDirectoryDlcValidator.php index 2c4c854f..04e5f6ff 100644 --- a/src/Validator/Dlc/UniqueDirectoryDlcValidator.php +++ b/src/Validator/Dlc/UniqueDirectoryDlcValidator.php @@ -23,8 +23,12 @@ public function validate(mixed $value, Constraint $constraint): void } $directory = $value->getDirectory(); + if ('' === $directory || null === $directory) { + return; + } + $id = $value->getId(); - if (!$directory || $this->isColumnValueUnique(Dlc::class, ['directory' => $directory], $id)) { + if ($this->isColumnValueUnique(Dlc::class, ['directory' => $directory], $id)) { return; } diff --git a/tests/functional/Web/Dlc/CreateDlcCest.php b/tests/functional/Web/Dlc/CreateDlcCest.php new file mode 100644 index 00000000..5df002ae --- /dev/null +++ b/tests/functional/Web/Dlc/CreateDlcCest.php @@ -0,0 +1,221 @@ +stopFollowingRedirects(); + $I->freezeTime('2020-01-01T00:00:00+00:00'); + } + + public function createDlcAsUnauthenticatedUser(FunctionalTester $I): void + { + $I->amOnPage('/dlc/create'); + $I->seeResponseRedirectsToDiscordAuth(); + } + + public function createDlcAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $I->amOnPage('/dlc/create'); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + } + + public function createDlcAsAuthorizedUser(FunctionalTester $I): void + { + $user = $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + // Default form values + $I->seeInField('Steam Store URL', ''); + $I->seeInField('DLC directory', ''); + $I->seeInField('DLC name', ''); + $I->seeInField('DLC description', ''); + + // Fill form + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'ws'); + $I->fillField('DLC name', 'Western Sahara'); + $I->fillField('DLC description', 'Western Sahara Arma 3 DLC'); + $I->click('Create DLC'); + + $I->seeResponseRedirectsTo('/dlc/list'); + + /** @var Dlc $dlc */ + $dlc = $I->grabEntityFromRepository(Dlc::class, ['appId' => 1681170]); + $I->assertSame(1681170, $dlc->getAppId()); + $I->assertSame('ws', $dlc->getDirectory()); + $I->assertSame('Western Sahara', $dlc->getName()); + $I->assertSame('Western Sahara Arma 3 DLC', $dlc->getDescription()); + + $I->assertSame('2020-01-01T00:00:00+00:00', $dlc->getCreatedAt()->format(DATE_ATOM)); + // $I->assertSame($user, $dlc->getCreatedBy()); // FIXME + $I->assertSame(null, $dlc->getLastUpdatedAt()); + $I->assertSame(null, $dlc->getLastUpdatedBy()); + } + + public function createDlcAsAuthorizedUserWithNameProvidedBySteamWorkshop(FunctionalTester $I): void + { + $user = $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + // Default form values + $I->seeInField('Steam Store URL', ''); + $I->seeInField('DLC directory', ''); + $I->seeInField('DLC name', ''); + $I->seeInField('DLC description', ''); + + // Fill form + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'ws'); + $I->fillField('DLC name', ''); + $I->fillField('DLC description', ''); + $I->click('Create DLC'); + + $I->seeResponseRedirectsTo('/dlc/list'); + + /** @var Dlc $dlc */ + $dlc = $I->grabEntityFromRepository(Dlc::class, ['appId' => 1681170]); + $I->assertSame(1681170, $dlc->getAppId()); + $I->assertSame('ws', $dlc->getDirectory()); + $I->assertSame('Arma 3 Creator DLC: Western Sahara', $dlc->getName()); // From Steam Workshop + $I->assertSame(null, $dlc->getDescription()); + + $I->assertSame('2020-01-01T00:00:00+00:00', $dlc->getCreatedAt()->format(DATE_ATOM)); + // $I->assertSame($user, $dlc->getCreatedBy()); // FIXME + $I->assertSame(null, $dlc->getLastUpdatedAt()); + $I->assertSame(null, $dlc->getLastUpdatedBy()); + } + + public function createDlcAsAuthorizedUserWhenDlcAlreadyExists(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $url = 'https://store.steampowered.com/app/1227700/Arma_3_Creator_DLC_SOG_Prairie_Fire/'; + $I->fillField('Steam Store URL', $url); + $I->fillField('DLC directory', 'vn'); + $I->click('Create DLC'); + + $message = sprintf('DLC associated with url "%s" already exist.', $url); + $I->canSeeFormErrorMessage('url', $message); + $I->canSeeFormErrorMessage('directory', 'DLC associated with directory "vn" already exist.'); + } + + public function createDlcAsAuthorizedUserWithInvalidDlcUrl(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $I->fillField('Steam Store URL', 'https://example.com'); + $I->fillField('DLC directory', 'ws'); + $I->click('Create DLC'); + + $I->canSeeFormErrorMessage('url', 'Invalid Steam Store DLC url.'); + } + + public function createDlcAsAuthorizedUserWhenDlcDoesNotExist(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $url = SteamHelper::appIdToAppUrl(9999999); + $I->fillField('Steam Store URL', $url); + $I->fillField('DLC directory', 'ws'); + $I->click('Create DLC'); + + $I->canSeeFormErrorMessage('url', 'DLC not found.'); + } + + public function createDlcAsAuthorizedUserWhenUrlIsNotAnArma3Dlc(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $url = SteamHelper::appIdToAppUrl(2138330); + $I->fillField('Steam Store URL', $url); + $I->fillField('DLC directory', 'ws'); + $I->click('Create DLC'); + + $I->canSeeFormErrorMessage('url', 'Url is not an Arma 3 DLC.'); + } + + public function createDlcAsAuthorizedUserWithInvalidDirectoryName(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'w/s'); + $I->click('Create DLC'); + + $I->canSeeFormErrorMessage('directory', 'Invalid directory name.'); + } + + public function createDlcAsAuthorizedUserWithoutRequiredData(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $I->fillField('Steam Store URL', ''); + $I->fillField('DLC directory', ''); + $I->click('Create DLC'); + + $I->canSeeFormErrorMessage('url', 'This value should not be blank.'); + $I->canSeeFormErrorMessage('directory', 'This value should not be blank.'); + } + + public function createDlcAsAuthorizedUserWithDataTooLong(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/create'); + + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'ws'); + $I->fillField('DLC name', str_repeat('a', 256)); + $I->fillField('DLC description', str_repeat('a', 256)); + $I->click('Create DLC'); + + $I->canSeeFormErrorMessage('name', 'This value is too long. It should have 255 characters or less.'); + $I->canSeeFormErrorMessage('description', 'This value is too long. It should have 255 characters or less.'); + } +} diff --git a/tests/functional/Web/Dlc/DeleteDlcCest.php b/tests/functional/Web/Dlc/DeleteDlcCest.php new file mode 100644 index 00000000..7b1368c4 --- /dev/null +++ b/tests/functional/Web/Dlc/DeleteDlcCest.php @@ -0,0 +1,53 @@ +stopFollowingRedirects(); + } + + public function deleteDlcAsUnauthenticatedUser(FunctionalTester $I): void + { + $id = SogPrairieFireDlcFixture::ID; + $I->amOnPage(sprintf('/dlc/%s/delete', $id)); + $I->seeResponseRedirectsToDiscordAuth(); + + $I->seeInRepository(Dlc::class, ['id' => $id]); + } + + public function deleteDlcAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $id = SogPrairieFireDlcFixture::ID; + $I->amOnPage(sprintf('/dlc/%s/delete', $id)); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + + $I->seeInRepository(Dlc::class, ['id' => $id]); + } + + public function deleteDlcAsAuthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcDelete = true; + }); + + $id = SogPrairieFireDlcFixture::ID; + $I->amOnPage(sprintf('/dlc/%s/delete', $id)); + $I->seeResponseRedirectsTo('/dlc/list'); + + $I->dontSeeInRepository(Dlc::class, ['id' => $id]); + } +} diff --git a/tests/functional/Web/Dlc/ListDlcsCest.php b/tests/functional/Web/Dlc/ListDlcsCest.php new file mode 100644 index 00000000..cc3692ed --- /dev/null +++ b/tests/functional/Web/Dlc/ListDlcsCest.php @@ -0,0 +1,90 @@ +stopFollowingRedirects(); + } + + public function listDlcsAsUnauthenticatedUser(FunctionalTester $I): void + { + $I->amOnPage('/dlc/list'); + $I->seeResponseRedirectsToDiscordAuth(); + } + + public function listDlcsAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $I->amOnPage('/dlc/list'); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + } + + public function listDlcsAsAuthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcList = true; + }); + + $I->amOnPage('/dlc/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeActionButton('Create DLC'); + $I->dontSeeActionButton('Edit DLC'); + } + + public function listDlcsAsAuthorizedUserWithCreateModPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcList = true; + $user->getPermissions()->dlcCreate = true; + }); + + $I->amOnPage('/dlc/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->seeLink('Create DLC'); + $I->dontSeeActionButton('Edit DLC'); + $I->dontSeeActionButton('Delete DLC'); + } + + public function listDlcsAsAuthorizedUserWithUpdateModPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcList = true; + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage('/dlc/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeLink('Create DLC'); + $I->seeActionButton('Edit DLC'); + $I->dontSeeActionButton('Delete DLC'); + } + + public function listDlcsAsAuthorizedUserWithDeleteModPermission(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcList = true; + $user->getPermissions()->dlcDelete = true; + }); + + $I->amOnPage('/dlc/list'); + $I->seeResponseCodeIs(Response::HTTP_OK); + + $I->dontSeeLink('Create DLC'); + $I->dontSeeActionButton('Edit DLC'); + $I->seeActionButton('Delete DLC'); + } +} diff --git a/tests/functional/Web/Dlc/UpdateDlcCest.php b/tests/functional/Web/Dlc/UpdateDlcCest.php new file mode 100644 index 00000000..236cde80 --- /dev/null +++ b/tests/functional/Web/Dlc/UpdateDlcCest.php @@ -0,0 +1,223 @@ +stopFollowingRedirects(); + $I->freezeTime('2021-01-01T00:00:00+00:00'); + } + + public function updateDlcAsUnauthenticatedUser(FunctionalTester $I): void + { + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + $I->seeResponseRedirectsToDiscordAuth(); + } + + public function updateDlcAsUnauthorizedUser(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + $I->seeResponseCodeIs(Response::HTTP_FORBIDDEN); + } + + public function updateDlcAsAuthorizedUser(FunctionalTester $I): void + { + $user = $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + // Default form values + $I->seeInField('Steam Store URL', 'https://store.steampowered.com/app/1227700'); + $I->seeInField('DLC directory', 'vn'); + $I->seeInField('DLC name', 'Arma 3 Creator DLC: S.O.G. Prairie Fire'); + $I->seeInField('DLC description', ''); + + // Fill form + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'ws'); + $I->fillField('DLC name', 'Western Sahara'); + $I->fillField('DLC description', 'Western Sahara Arma 3 DLC'); + $I->click('Apply'); + + $I->seeResponseRedirectsTo('/dlc/list'); + + /** @var Dlc $dlc */ + $dlc = $I->grabEntityFromRepository(Dlc::class, ['appId' => 1681170]); + $I->assertSame(1681170, $dlc->getAppId()); + $I->assertSame('ws', $dlc->getDirectory()); + $I->assertSame('Western Sahara', $dlc->getName()); + $I->assertSame('Western Sahara Arma 3 DLC', $dlc->getDescription()); + + $I->assertSame('2020-01-01T00:00:00+00:00', $dlc->getCreatedAt()->format(DATE_ATOM)); + $I->assertSame(null, $dlc->getCreatedBy()); + // $I->assertSame('2021-01-01T00:00:00+00:00', $dlc->getLastUpdatedAt()->format(DATE_ATOM)); // FIXME + // $I->assertSame($user, $dlc->getLastUpdatedBy()); // FIXME + } + + public function updateDlcAsAuthorizedUserWithNameProvidedBySteamWorkshop(FunctionalTester $I): void + { + $user = $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + // Default form values + $I->seeInField('Steam Store URL', 'https://store.steampowered.com/app/1227700'); + $I->seeInField('DLC directory', 'vn'); + $I->seeInField('DLC name', 'Arma 3 Creator DLC: S.O.G. Prairie Fire'); + $I->seeInField('DLC description', ''); + + // Fill form + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'ws'); + $I->fillField('DLC name', ''); + $I->fillField('DLC description', ''); + $I->click('Apply'); + + $I->seeResponseRedirectsTo('/dlc/list'); + + /** @var Dlc $dlc */ + $dlc = $I->grabEntityFromRepository(Dlc::class, ['appId' => 1681170]); + $I->assertSame(1681170, $dlc->getAppId()); + $I->assertSame('ws', $dlc->getDirectory()); + $I->assertSame('Arma 3 Creator DLC: Western Sahara', $dlc->getName()); // From Steam Workshop + $I->assertSame(null, $dlc->getDescription()); + + $I->assertSame('2020-01-01T00:00:00+00:00', $dlc->getCreatedAt()->format(DATE_ATOM)); + $I->assertSame(null, $dlc->getCreatedBy()); + // $I->assertSame('2021-01-01T00:00:00+00:00', $dlc->getLastUpdatedAt()->format(DATE_ATOM)); // FIXME + // $I->assertSame($user, $dlc->getLastUpdatedBy()); // FIXME + } + + public function updateDlcAsAuthorizedUserWhenDlcAlreadyExists(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', CslaIronCurtainDlcFixture::ID)); + + $url = 'https://store.steampowered.com/app/1227700/Arma_3_Creator_DLC_SOG_Prairie_Fire/'; + $I->fillField('Steam Store URL', $url); + $I->fillField('DLC directory', 'vn'); + $I->click('Apply'); + + $message = sprintf('DLC associated with url "%s" already exist.', $url); + $I->canSeeFormErrorMessage('url', $message); + $I->canSeeFormErrorMessage('directory', 'DLC associated with directory "vn" already exist.'); + } + + public function updateDlcAsAuthorizedUserWithInvalidDlcUrl(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + $I->fillField('Steam Store URL', 'https://example.com'); + $I->fillField('DLC directory', 'ws'); + $I->click('Apply'); + + $I->canSeeFormErrorMessage('url', 'Invalid Steam Store DLC url.'); + } + + public function updateDlcAsAuthorizedUserWhenDlcDoesNotExist(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + $url = SteamHelper::appIdToAppUrl(9999999); + $I->fillField('Steam Store URL', $url); + $I->fillField('DLC directory', 'ws'); + $I->click('Apply'); + + $I->canSeeFormErrorMessage('url', 'DLC not found.'); + } + + public function updateDlcAsAuthorizedUserWhenUrlIsNotAnArma3Dlc(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + $url = SteamHelper::appIdToAppUrl(2138330); + $I->fillField('Steam Store URL', $url); + $I->fillField('DLC directory', 'ws'); + $I->click('Apply'); + + $I->canSeeFormErrorMessage('url', 'Url is not an Arma 3 DLC.'); + } + + public function updateDlcAsAuthorizedUserWithInvalidDirectoryName(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'w/s'); + $I->click('Apply'); + + $I->canSeeFormErrorMessage('directory', 'Invalid directory name.'); + } + + public function updateDlcAsAuthorizedUserWithoutRequiredData(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + $I->fillField('Steam Store URL', ''); + $I->fillField('DLC directory', ''); + $I->click('Apply'); + + $I->canSeeFormErrorMessage('url', 'This value should not be blank.'); + $I->canSeeFormErrorMessage('directory', 'This value should not be blank.'); + } + + public function updateDlcAsAuthorizedUserWithDataTooLong(FunctionalTester $I): void + { + $I->amDiscordAuthenticatedAs(RegularUserFixture::ID, function (User $user): void { + $user->getPermissions()->dlcUpdate = true; + }); + + $I->amOnPage(sprintf('/dlc/%s/update', SogPrairieFireDlcFixture::ID)); + + $I->fillField('Steam Store URL', 'https://store.steampowered.com/app/1681170/Arma_3_Creator_DLC_Western_Sahara'); + $I->fillField('DLC directory', 'ws'); + $I->fillField('DLC name', str_repeat('a', 256)); + $I->fillField('DLC description', str_repeat('a', 256)); + $I->click('Apply'); + + $I->canSeeFormErrorMessage('name', 'This value is too long. It should have 255 characters or less.'); + $I->canSeeFormErrorMessage('description', 'This value is too long. It should have 255 characters or less.'); + } +}