From cc66b32a0a5d6a6c2d5c8354ef6bdf59f06b887a Mon Sep 17 00:00:00 2001 From: Jeremiah VALERIE Date: Thu, 30 Mar 2017 11:33:42 +0200 Subject: [PATCH] Refactor access public and complexity query tests --- .../Generator/TypeGeneratorTest.php | 47 ++------------- Tests/Functional/Security/AccessTest.php | 60 +++++-------------- .../Security/QueryComplexityTest.php | 20 ++----- Tests/Functional/TestCase.php | 39 ++++++++++++ Tests/Functional/app/config/access/config.yml | 21 +------ Tests/Functional/app/config/public/config.yml | 21 +------ Tests/Functional/app/config/security.yml | 19 ++++++ 7 files changed, 83 insertions(+), 144 deletions(-) create mode 100644 Tests/Functional/app/config/security.yml diff --git a/Tests/Functional/Generator/TypeGeneratorTest.php b/Tests/Functional/Generator/TypeGeneratorTest.php index 6187f01a6..44cd8e800 100644 --- a/Tests/Functional/Generator/TypeGeneratorTest.php +++ b/Tests/Functional/Generator/TypeGeneratorTest.php @@ -15,9 +15,6 @@ class TypeGeneratorTest extends TestCase { - private $user = 'ryan'; - private $adminUser = 'admin'; - public function testPublicCallback() { $expected = [ @@ -29,19 +26,15 @@ public function testPublicCallback() ], ]; - $client = static::query( - 'query { object { name privateData } }', - $this->adminUser - ); - - $this->assertResponse('query { object { name privateData } }', $expected, $this->adminUser); + $this->assertResponse('query { object { name privateData } }', $expected, self::USER_ADMIN, 'public'); $this->assertEquals( 'Cannot query field "privateData" on type "ObjectWithPrivateField".', json_decode( static::query( 'query { object { name privateData } }', - $this->user + self::USER_RYAN, + 'public' )->getResponse()->getContent(), true )['errors'][0]['message'] @@ -50,38 +43,6 @@ public function testPublicCallback() $expectedWithoutPrivateData = $expected; unset($expectedWithoutPrivateData['data']['object']['privateData']); - $this->assertResponse('query { object { name } }', $expectedWithoutPrivateData, $this->user); - } - - private static function assertResponse($query, array $expected, $username) - { - $client = self::query($query, $username); - $result = $client->getResponse()->getContent(); - - static::assertEquals($expected, json_decode($result, true), $result); - - return $client; - } - - private static function query($query, $username) - { - $client = self::createClientAuthenticated($username); - $client->request('GET', '/', ['query' => $query]); - - return $client; - } - - private static function createClientAuthenticated($username) - { - $client = static::createClient(['test_case' => 'public']); - - if ($username) { - $client->setServerParameters([ - 'PHP_AUTH_USER' => $username, - 'PHP_AUTH_PW' => '123', - ]); - } - - return $client; + $this->assertResponse('query { object { name } }', $expectedWithoutPrivateData, self::USER_RYAN, 'public'); } } diff --git a/Tests/Functional/Security/AccessTest.php b/Tests/Functional/Security/AccessTest.php index e2db5d89d..23889b538 100644 --- a/Tests/Functional/Security/AccessTest.php +++ b/Tests/Functional/Security/AccessTest.php @@ -16,18 +16,14 @@ class AccessTest extends TestCase { - const USER_RYAN = 'ryan'; - const USER_ADMIN = 'admin'; - const ANONYMOUS_USER = null; + private $userNameQuery = 'query { user { name } }'; - private $userNameQuery = 'query MyQuery { user { name } }'; + private $userRolesQuery = 'query { user { roles } }'; - private $userRolesQuery = 'query MyQuery { user { roles } }'; - - private $userIsEnabledQuery = 'query MyQuery { user { isEnabled } }'; + private $userIsEnabledQuery = 'query { user { isEnabled } }'; private $userFriendsQuery = <<<'EOF' -query MyQuery { +query { user { friends(first: 2) { edges { @@ -61,14 +57,14 @@ public function testNotAuthenticatedUserAccessToUserName() 'warnings' => [ [ 'message' => 'Access denied to this field.', - 'locations' => [['line' => 1, 'column' => 24]], + 'locations' => [['line' => 1, 'column' => 16]], 'path' => ['user', 'name'], ], ], ], ]; - $this->assertResponse($this->userNameQuery, $expected, static::ANONYMOUS_USER); + $this->assertResponse($this->userNameQuery, $expected, static::ANONYMOUS_USER, 'access'); } public function testFullyAuthenticatedUserAccessToUserName() @@ -81,17 +77,17 @@ public function testFullyAuthenticatedUserAccessToUserName() ], ]; - $this->assertResponse($this->userNameQuery, $expected, static::USER_RYAN); + $this->assertResponse($this->userNameQuery, $expected, static::USER_RYAN, 'access'); } public function testNotAuthenticatedUserAccessToUserRoles() { - $this->assertResponse($this->userRolesQuery, $this->expectedFailedUserRoles(), static::ANONYMOUS_USER); + $this->assertResponse($this->userRolesQuery, $this->expectedFailedUserRoles(), static::ANONYMOUS_USER, 'access'); } public function testAuthenticatedUserAccessToUserRolesWithoutEnoughRights() { - $this->assertResponse($this->userRolesQuery, $this->expectedFailedUserRoles(), static::USER_RYAN); + $this->assertResponse($this->userRolesQuery, $this->expectedFailedUserRoles(), static::USER_RYAN, 'access'); } public function testUserWithCorrectRightsAccessToUserRoles() @@ -104,7 +100,7 @@ public function testUserWithCorrectRightsAccessToUserRoles() ], ]; - $this->assertResponse($this->userRolesQuery, $expected, static::USER_ADMIN); + $this->assertResponse($this->userRolesQuery, $expected, static::USER_ADMIN, 'access'); } public function testUserForbiddenField() @@ -137,7 +133,7 @@ public function testUserForbiddenField() } EOF; - $this->assertResponse($query, $expected, static::USER_ADMIN); + $this->assertResponse($query, $expected, static::USER_ADMIN, 'access'); } public function testUserAccessToUserFriends() @@ -155,7 +151,7 @@ public function testUserAccessToUserFriends() ], ]; - $this->assertResponse($this->userFriendsQuery, $expected, static::USER_ADMIN); + $this->assertResponse($this->userFriendsQuery, $expected, static::USER_ADMIN, 'access'); } public function testMutationAllowedUser() @@ -171,7 +167,7 @@ public function testMutationAllowedUser() ], ]; - $this->assertResponse(sprintf($this->simpleMutationWithThunkQuery, $result), $expected, static::USER_ADMIN); + $this->assertResponse(sprintf($this->simpleMutationWithThunkQuery, $result), $expected, static::USER_ADMIN, 'access'); $this->assertTrue(SimpleMutationWithThunkFieldsMutation::hasMutate(true)); } @@ -200,7 +196,7 @@ public function testMutationAllowedButNoRightsToDisplayPayload() ], ]; - $this->assertResponse(sprintf($this->simpleMutationWithThunkQuery, 321), $expected, static::USER_ADMIN); + $this->assertResponse(sprintf($this->simpleMutationWithThunkQuery, 321), $expected, static::USER_ADMIN, 'access'); $this->assertTrue(SimpleMutationWithThunkFieldsMutation::hasMutate(true)); } @@ -224,7 +220,7 @@ public function testMutationNotAllowedUser() ], ]; - $this->assertResponse(sprintf($this->simpleMutationWithThunkQuery, 123), $expected, static::USER_RYAN); + $this->assertResponse(sprintf($this->simpleMutationWithThunkQuery, 123), $expected, static::USER_RYAN, 'access'); $this->assertFalse(SimpleMutationWithThunkFieldsMutation::hasMutate(true)); } @@ -238,30 +234,4 @@ private function expectedFailedUserRoles() ], ]; } - - private static function assertResponse($query, array $expected, $username) - { - $client = self::createClientAuthenticated($username); - $client->request('GET', '/', ['query' => $query]); - - $result = $client->getResponse()->getContent(); - - static::assertEquals($expected, json_decode($result, true), $result); - - return $client; - } - - private static function createClientAuthenticated($username) - { - $client = static::createClient(['test_case' => 'access']); - - if ($username) { - $client->setServerParameters([ - 'PHP_AUTH_USER' => $username, - 'PHP_AUTH_PW' => '123', - ]); - } - - return $client; - } } diff --git a/Tests/Functional/Security/QueryComplexityTest.php b/Tests/Functional/Security/QueryComplexityTest.php index e3992da86..e9a811370 100644 --- a/Tests/Functional/Security/QueryComplexityTest.php +++ b/Tests/Functional/Security/QueryComplexityTest.php @@ -16,7 +16,7 @@ class QueryComplexityTest extends TestCase { private $userFriendsWithoutLimitQuery = <<<'EOF' -query MyQuery { +query { user { friends { edges { @@ -30,7 +30,7 @@ class QueryComplexityTest extends TestCase EOF; private $userFriendsWithLimitQuery = <<<'EOF' -query MyQuery { +query { user { friends(first: 1) { edges { @@ -53,7 +53,7 @@ public function testComplexityReachLimitation() ], ]; - $this->assertResponse($this->userFriendsWithoutLimitQuery, $expected); + $this->assertResponse($this->userFriendsWithoutLimitQuery, $expected, self::ANONYMOUS_USER, 'queryComplexity'); } public function testComplexityUnderLimitation() @@ -70,18 +70,6 @@ public function testComplexityUnderLimitation() ], ]; - $this->assertResponse($this->userFriendsWithLimitQuery, $expected); - } - - private static function assertResponse($query, array $expected) - { - $client = static::createClient(['test_case' => 'queryComplexity']); - $client->request('GET', '/', ['query' => $query]); - - $result = $client->getResponse()->getContent(); - - static::assertEquals($expected, json_decode($result, true), $result); - - return $client; + $this->assertResponse($this->userFriendsWithLimitQuery, $expected, self::ANONYMOUS_USER, 'queryComplexity'); } } diff --git a/Tests/Functional/TestCase.php b/Tests/Functional/TestCase.php index d5033c25a..4914b8b8d 100644 --- a/Tests/Functional/TestCase.php +++ b/Tests/Functional/TestCase.php @@ -21,6 +21,11 @@ */ abstract class TestCase extends WebTestCase { + const USER_RYAN = 'ryan'; + const USER_ADMIN = 'admin'; + const ANONYMOUS_USER = null; + const DEFAULT_PASSWORD = '123'; + /** * @var AppKernel[] */ @@ -115,4 +120,38 @@ protected static function getContainer() { return static::$kernel->getContainer(); } + + protected static function query($query, $username, $testCase, $password = self::DEFAULT_PASSWORD) + { + $client = static::createClientAuthenticated($username, $testCase, $password); + $client->request('GET', '/', ['query' => $query]); + + return $client; + } + + protected static function createClientAuthenticated($username, $testCase, $password = self::DEFAULT_PASSWORD) + { + $client = static::createClient(['test_case' => $testCase]); + + if ($username) { + $client->setServerParameters([ + 'PHP_AUTH_USER' => $username, + 'PHP_AUTH_PW' => $password, + ]); + } + + return $client; + } + + protected static function assertResponse($query, array $expected, $username, $testCase, $password = self::DEFAULT_PASSWORD) + { + $client = self::createClientAuthenticated($username, $testCase, $password); + $client->request('GET', '/', ['query' => $query]); + + $result = $client->getResponse()->getContent(); + + static::assertEquals($expected, json_decode($result, true), $result); + + return $client; + } } diff --git a/Tests/Functional/app/config/access/config.yml b/Tests/Functional/app/config/access/config.yml index 511db0042..e61b88ae5 100644 --- a/Tests/Functional/app/config/access/config.yml +++ b/Tests/Functional/app/config/access/config.yml @@ -1,5 +1,6 @@ imports: - { resource: ../config.yml } + - { resource: ../security.yml } - { resource: ../connection/services.yml } - { resource: ../mutation/services.yml } @@ -16,23 +17,3 @@ overblog_graphql: - type: yml dir: "%kernel.root_dir%/config/access/mapping" - -security: - providers: - in_memory: - memory: - users: - ryan: - password: 123 - roles: 'ROLE_USER' - admin: - password: 123 - roles: 'ROLE_ADMIN' - encoders: - Symfony\Component\Security\Core\User\User: plaintext - firewalls: - graph: - pattern: ^/ - http_basic: ~ - stateless: true - anonymous: true diff --git a/Tests/Functional/app/config/public/config.yml b/Tests/Functional/app/config/public/config.yml index b64f59416..2af33ef8a 100644 --- a/Tests/Functional/app/config/public/config.yml +++ b/Tests/Functional/app/config/public/config.yml @@ -1,5 +1,6 @@ imports: - { resource: ../config.yml } + - { resource: ../security.yml } parameters: overblog_graphql.type_class_namespace: "Overblog\\GraphQLBundle\\PublicField\\__DEFINITIONS__" @@ -13,23 +14,3 @@ overblog_graphql: - type: yml dir: "%kernel.root_dir%/config/public/mapping" - -security: - providers: - in_memory: - memory: - users: - ryan: - password: 123 - roles: 'ROLE_USER' - admin: - password: 123 - roles: 'ROLE_ADMIN' - encoders: - Symfony\Component\Security\Core\User\User: plaintext - firewalls: - graph: - pattern: ^/ - http_basic: ~ - stateless: true - anonymous: true diff --git a/Tests/Functional/app/config/security.yml b/Tests/Functional/app/config/security.yml new file mode 100644 index 000000000..37325245c --- /dev/null +++ b/Tests/Functional/app/config/security.yml @@ -0,0 +1,19 @@ +security: + providers: + in_memory: + memory: + users: + ryan: + password: 123 + roles: 'ROLE_USER' + admin: + password: 123 + roles: 'ROLE_ADMIN' + encoders: + Symfony\Component\Security\Core\User\User: plaintext + firewalls: + graph: + pattern: ^/ + http_basic: ~ + stateless: true + anonymous: true