From 4fe9899141bfb4ce583c98631b91dc0803186eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarmo=20Lepp=C3=A4nen?= Date: Thu, 5 Sep 2024 19:57:06 +0300 Subject: [PATCH 1/5] Bug - Fixed falsy E2E test case --- .../Controller/v1/Profile/GroupsControllerTest.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php index 0cb2b71b3..3b67dca7a 100644 --- a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php @@ -141,10 +141,12 @@ static function (stdClass $userGroup): string { * @throws JsonException */ #[DataProvider('dataProviderTestThatGroupsActionReturnExpectedWithValidApiKey')] - #[TestDox('Test that `GET /v1/profile/groups` request returns `401` with valid `$token` API key token')] - public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token): void + #[TestDox( + 'Test that `GET /v1/profile/groups` request returns `401` with valid `$token` API key token ($role - ROLE)' + )] + public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token, string $role): void { - $client = $this->getApiKeyClient($token); + $client = $this->getApiKeyClient($role); $client->request('GET', $this->baseUrl); $response = $client->getResponse(); @@ -163,7 +165,7 @@ public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token) self::assertSame(401, $responseContent->code, 'Response code was not expected' . $info); self::assertTrue(property_exists($responseContent, 'message'), 'Response does not contain "message"' . $info); self::assertSame( - 'JWT Token not found', + 'Invalid API key', $responseContent->message, 'Response message was not expected' . $info, ); @@ -202,10 +204,10 @@ public static function dataProviderTestThatGroupsActionReturnExpectedWithValidAp if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { foreach ($rolesService->getRoles() as $role) { - yield [str_pad($rolesService->getShort($role), 40, '_')]; + yield [str_pad($rolesService->getShort($role), 40, '_'), $role]; } } else { - yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_')]; + yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_'), Role::LOGGED->value]; } } From ba5049f715a2bbcef042c2efdee41d1fe29430fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarmo=20Lepp=C3=A4nen?= Date: Thu, 5 Sep 2024 20:09:06 +0300 Subject: [PATCH 2/5] Better fix --- tests/E2E/Controller/v1/Profile/GroupsControllerTest.php | 4 ++-- tests/E2E/TestCase/Auth.php | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php index 3b67dca7a..9b95a673d 100644 --- a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php @@ -146,7 +146,7 @@ static function (stdClass $userGroup): string { )] public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token, string $role): void { - $client = $this->getApiKeyClient($role); + $client = $this->getApiKeyClient($token); $client->request('GET', $this->baseUrl); $response = $client->getResponse(); @@ -165,7 +165,7 @@ public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token, self::assertSame(401, $responseContent->code, 'Response code was not expected' . $info); self::assertTrue(property_exists($responseContent, 'message'), 'Response does not contain "message"' . $info); self::assertSame( - 'Invalid API key', + 'JWT Token not found', $responseContent->message, 'Response message was not expected' . $info, ); diff --git a/tests/E2E/TestCase/Auth.php b/tests/E2E/TestCase/Auth.php index 6d5225392..7fb981a0b 100644 --- a/tests/E2E/TestCase/Auth.php +++ b/tests/E2E/TestCase/Auth.php @@ -8,6 +8,7 @@ namespace App\Tests\E2E\TestCase; +use App\Enum\Role; use App\Utils\JSON; use JsonException; use Symfony\Bundle\FrameworkBundle\KernelBrowser; @@ -58,10 +59,13 @@ public function getAuthorizationHeadersForUser(string $username, string $passwor */ public function getAuthorizationHeadersForApiKey(string $role): array { + // If role is not valid role enum value then we assume that it's API key token + $token = (Role::tryFrom($role) === null ? $role : str_pad($role, 40, '_')); + return [ ...$this->getContentTypeHeader(), ...[ - 'HTTP_AUTHORIZATION' => 'ApiKey ' . str_pad($role, 40, '_'), + 'HTTP_AUTHORIZATION' => 'ApiKey ' . $token, ], ]; } From 547b4b0350ca4e5f2224a62dcd18692ad68650fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarmo=20Lepp=C3=A4nen?= Date: Thu, 5 Sep 2024 22:48:04 +0300 Subject: [PATCH 3/5] Next step is to change that `getAuthorizationHeadersForApiKey(string $role)` to `getAuthorizationHeadersForApiKey(Role $role)` --- .../v1/Profile/GroupsControllerTest.php | 12 ++++++------ .../v1/Profile/IndexControllerTest.php | 19 ++++++++++--------- .../v1/Profile/RolesControllerTest.php | 16 +++++++++------- tests/E2E/TestCase/Auth.php | 5 +---- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php index 9b95a673d..967880025 100644 --- a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php @@ -142,11 +142,11 @@ static function (stdClass $userGroup): string { */ #[DataProvider('dataProviderTestThatGroupsActionReturnExpectedWithValidApiKey')] #[TestDox( - 'Test that `GET /v1/profile/groups` request returns `401` with valid `$token` API key token ($role - ROLE)' + 'Test that `GET /v1/profile/groups` request returns `401` with valid `$token` API key token ($role - role)' )] public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token, string $role): void { - $client = $this->getApiKeyClient($token); + $client = $this->getApiKeyClient($role); $client->request('GET', $this->baseUrl); $response = $client->getResponse(); @@ -165,7 +165,7 @@ public function testThatGroupsActionReturnExpectedWithValidApiKey(string $token, self::assertSame(401, $responseContent->code, 'Response code was not expected' . $info); self::assertTrue(property_exists($responseContent, 'message'), 'Response does not contain "message"' . $info); self::assertSame( - 'JWT Token not found', + 'Invalid API key', $responseContent->message, 'Response message was not expected' . $info, ); @@ -202,13 +202,13 @@ public static function dataProviderTestThatGroupsActionReturnExpectedWithValidAp { $rolesService = self::getRolesService(); - if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { + #if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { foreach ($rolesService->getRoles() as $role) { yield [str_pad($rolesService->getShort($role), 40, '_'), $role]; } - } else { + #} else { yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_'), Role::LOGGED->value]; - } + #} } /** diff --git a/tests/E2E/Controller/v1/Profile/IndexControllerTest.php b/tests/E2E/Controller/v1/Profile/IndexControllerTest.php index 1f998e211..8e5000cb0 100644 --- a/tests/E2E/Controller/v1/Profile/IndexControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/IndexControllerTest.php @@ -112,10 +112,11 @@ public function testThatProfileActionReturns401WithInvalidApiKey(): void * @throws JsonException */ #[DataProvider('dataProviderTestThatProfileActionReturnsExpectedWithValidApiKeyToken')] - #[TestDox('Test that `GET /v1/profile` request returns `401` with valid `$token` API key token')] - public function testThatProfileActionReturnsExpectedWithValidApiKeyToken(string $token): void + #[TestDox('Test that `GET /v1/profile` request returns `401` with valid `$token` API key token ($role - role)')] + public function testThatProfileActionReturnsExpectedWithValidApiKeyToken(string $token, string $role): void { - $client = $this->getApiKeyClient($token); + + $client = $this->getApiKeyClient($role); $client->request('GET', $this->baseUrl); $response = $client->getResponse(); @@ -134,7 +135,7 @@ public function testThatProfileActionReturnsExpectedWithValidApiKeyToken(string self::assertSame(401, $responseContent->code, 'Response code was not expected' . $info); self::assertTrue(property_exists($responseContent, 'message'), 'Response does not contain "message"' . $info); self::assertSame( - 'JWT Token not found', + 'Invalid API key', $responseContent->message, 'Response message was not expected' . $info, ); @@ -175,13 +176,13 @@ public static function dataProviderTestThatProfileActionReturnsExpectedWithValid { $rolesService = self::getRolesService(); - if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { + #if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { foreach ($rolesService->getRoles() as $role) { - yield [str_pad($rolesService->getShort($role), 40, '_')]; + yield [str_pad($rolesService->getShort($role), 40, '_'), $role]; } - } else { - yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_')]; - } + #} else { + yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_'), Role::LOGGED->value]; + #} } /** diff --git a/tests/E2E/Controller/v1/Profile/RolesControllerTest.php b/tests/E2E/Controller/v1/Profile/RolesControllerTest.php index 5351ba334..aa240fe7a 100644 --- a/tests/E2E/Controller/v1/Profile/RolesControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/RolesControllerTest.php @@ -113,10 +113,12 @@ public function testThatRolesActionReturnsExpected(string $u, string $p, Stringa * @throws JsonException */ #[DataProvider('dataProviderTestThatRolesActionReturnsExpectedWithValidApiKey')] - #[TestDox('Test that `GET /v1/profile/roles` request returns `401` with valid API key `$token` token')] - public function testThatRolesActionReturnsExpectedWithValidApiKey(string $token): void + #[TestDox( + 'Test that `GET /v1/profile/roles` request returns `401` with valid API key `$token` token ($role - role)' + )] + public function testThatRolesActionReturnsExpectedWithValidApiKey(string $token, string $role): void { - $client = $this->getApiKeyClient($token); + $client = $this->getApiKeyClient($role); $client->request('GET', $this->baseUrl); $response = $client->getResponse(); @@ -135,7 +137,7 @@ public function testThatRolesActionReturnsExpectedWithValidApiKey(string $token) self::assertSame(401, $responseContent->code, 'Response code was not expected' . $info); self::assertTrue(property_exists($responseContent, 'message'), 'Response does not contain "message"' . $info); self::assertSame( - 'JWT Token not found', + 'Invalid API key', $responseContent->message, 'Response message was not expected' . $info, ); @@ -212,7 +214,7 @@ public static function dataProviderTestThatRolesActionReturnsExpected(): Generat } /** - * @return Generator + * @return Generator * * @throws Throwable */ @@ -222,10 +224,10 @@ public static function dataProviderTestThatRolesActionReturnsExpectedWithValidAp if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { foreach ($rolesService->getRoles() as $role) { - yield [str_pad($rolesService->getShort($role), 40, '_')]; + yield [str_pad($rolesService->getShort($role), 40, '_'), $role]; } } else { - yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_')]; + yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_'), Role::LOGGED->value]; } } diff --git a/tests/E2E/TestCase/Auth.php b/tests/E2E/TestCase/Auth.php index 7fb981a0b..8adec49f0 100644 --- a/tests/E2E/TestCase/Auth.php +++ b/tests/E2E/TestCase/Auth.php @@ -59,13 +59,10 @@ public function getAuthorizationHeadersForUser(string $username, string $passwor */ public function getAuthorizationHeadersForApiKey(string $role): array { - // If role is not valid role enum value then we assume that it's API key token - $token = (Role::tryFrom($role) === null ? $role : str_pad($role, 40, '_')); - return [ ...$this->getContentTypeHeader(), ...[ - 'HTTP_AUTHORIZATION' => 'ApiKey ' . $token, + 'HTTP_AUTHORIZATION' => 'ApiKey ' . str_pad($role, 40, '_'), ], ]; } From 6fe74be195488fe23233c1bfc1e4fb3fe81ad747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarmo=20Lepp=C3=A4nen?= Date: Thu, 5 Sep 2024 22:56:20 +0300 Subject: [PATCH 4/5] Removed debug comments --- tests/E2E/Controller/v1/Profile/GroupsControllerTest.php | 6 +++--- tests/E2E/Controller/v1/Profile/IndexControllerTest.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php index 967880025..95dc676ae 100644 --- a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php @@ -202,13 +202,13 @@ public static function dataProviderTestThatGroupsActionReturnExpectedWithValidAp { $rolesService = self::getRolesService(); - #if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { + if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { foreach ($rolesService->getRoles() as $role) { yield [str_pad($rolesService->getShort($role), 40, '_'), $role]; } - #} else { + } else { yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_'), Role::LOGGED->value]; - #} + } } /** diff --git a/tests/E2E/Controller/v1/Profile/IndexControllerTest.php b/tests/E2E/Controller/v1/Profile/IndexControllerTest.php index 8e5000cb0..90724d2bf 100644 --- a/tests/E2E/Controller/v1/Profile/IndexControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/IndexControllerTest.php @@ -176,13 +176,13 @@ public static function dataProviderTestThatProfileActionReturnsExpectedWithValid { $rolesService = self::getRolesService(); - #if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { + if (getenv('USE_ALL_USER_COMBINATIONS') === 'yes') { foreach ($rolesService->getRoles() as $role) { yield [str_pad($rolesService->getShort($role), 40, '_'), $role]; } - #} else { + } else { yield [str_pad($rolesService->getShort(Role::LOGGED->value), 40, '_'), Role::LOGGED->value]; - #} + } } /** From eba55d305747ec0623ad49ca93d24af9a23a1ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarmo=20Lepp=C3=A4nen?= Date: Thu, 5 Sep 2024 23:04:13 +0300 Subject: [PATCH 5/5] Fixed return type annotations --- tests/E2E/Controller/v1/Profile/GroupsControllerTest.php | 4 ++-- tests/E2E/Controller/v1/Profile/IndexControllerTest.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php index 95dc676ae..0985f0c2a 100644 --- a/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/GroupsControllerTest.php @@ -194,9 +194,9 @@ public static function dataProviderTestThatGroupsActionReturnExpected(): Generat } /** - * @return Generator - * * @throws Throwable + * + * @return Generator */ public static function dataProviderTestThatGroupsActionReturnExpectedWithValidApiKey(): Generator { diff --git a/tests/E2E/Controller/v1/Profile/IndexControllerTest.php b/tests/E2E/Controller/v1/Profile/IndexControllerTest.php index 90724d2bf..61da92c9c 100644 --- a/tests/E2E/Controller/v1/Profile/IndexControllerTest.php +++ b/tests/E2E/Controller/v1/Profile/IndexControllerTest.php @@ -168,9 +168,9 @@ public static function dataProviderTestThatProfileActionReturnExpectedWithValidU } /** - * @return Generator - * * @throws Throwable + * + * @return Generator */ public static function dataProviderTestThatProfileActionReturnsExpectedWithValidApiKeyToken(): Generator {