![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/api-functional/testsuite/Magento/GraphQl/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\GraphQl; use Magento\TestFramework\TestCase\GraphQlAbstract; class IntrospectionQueryTest extends GraphQlAbstract { /** * Tests that Introspection is allowed by default * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testIntrospectionQuery() { $query = <<<QUERY query IntrospectionQuery { __schema { queryType { name } types{ ...FullType } } } fragment FullType on __Type{ name kind fields(includeDeprecated:true){ name args{ ...InputValue } } } fragment TypeRef on __Type { kind name ofType{ kind name } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } QUERY; $this->assertArrayHasKey('__schema', $this->graphQlQuery($query)); } /** * Tests that Introspection is allowed by default * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testIntrospectionQueryWithOnlySchema() { $query = <<<QUERY { __schema { queryType { name } types{ ...FullType } } } fragment FullType on __Type{ name kind fields(includeDeprecated:true){ name args{ ...InputValue } } } fragment TypeRef on __Type { kind name ofType{ kind name } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } QUERY; $this->assertArrayHasKey('__schema', $this->graphQlQuery($query)); $response = $this->graphQlQuery($query); $query = <<<QUERY query IntrospectionQuery { __schema { queryType { name } types{ ...FullType } } } fragment FullType on __Type{ name kind fields(includeDeprecated:true){ name args{ ...InputValue } } } fragment TypeRef on __Type { kind name ofType{ kind name } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } QUERY; $this->assertArrayHasKey('__schema', $this->graphQlQuery($query)); $responseFields = $this->graphQlQuery($query); $this->assertResponseFields($response, $responseFields); $this->assertEquals($responseFields, $response); } /** * Tests that Introspection is allowed by default * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testIntrospectionQueryWithOnlyType() { $query = <<<QUERY { __type(name:"Query") { name kind fields(includeDeprecated:true){ name type{ kind name } description isDeprecated deprecationReason } } } QUERY; $this->assertArrayHasKey('__type', $this->graphQlQuery($query)); $response = $this->graphQlQuery($query); $this->assertNotEmpty($response['__type']['fields']); } /** * Tests that Introspection Query with deprecated annotations on enum values, fields are read. */ public function testIntrospectionQueryWithDeprecatedAnnotationOnEnumAndFieldValues() { $query = <<<QUERY query IntrospectionQuery { __schema { queryType { name } mutationType { name } types { ...FullType } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description isDeprecated deprecationReason } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } } QUERY; $response = $this->graphQlQuery($query); $this->assertArrayHasKey('__schema', $response); $schemaResponseFields = $response['__schema']['types']; $enumValueReasonArray = $this->getEnumValueDeprecatedReason($schemaResponseFields); $fieldsValueReasonArray = $this->getFieldsValueDeprecatedReason($schemaResponseFields); $expectedOutput = require __DIR__ . '/_files/schema_response_sdl_deprecated_annotation.php'; // checking field values deprecated reason $fieldDeprecatedReason = []; $fieldsArray = $expectedOutput[0]['fields']; foreach ($fieldsArray as $field) { if ($field['isDeprecated'] === true) { $fieldDeprecatedReason [] = $field['deprecationReason']; } } $this->assertNotEmpty($fieldDeprecatedReason); $this->assertContains( 'Symbol was missed. Use `default_display_currency_code`.', $fieldDeprecatedReason ); $this->assertContains( 'Symbol was missed. Use `default_display_currency_code`.', $fieldsValueReasonArray ); $this->assertNotEmpty( array_intersect($fieldDeprecatedReason, $fieldsValueReasonArray) ); // checking enum values deprecated reason $enumValueDeprecatedReason = []; $enumValuesArray = $expectedOutput[1]['enumValues']; foreach ($enumValuesArray as $enumValue) { if ($enumValue['isDeprecated'] === true) { $enumValueDeprecatedReason [] = $enumValue['deprecationReason']; } } $this->assertNotEmpty($enumValueDeprecatedReason); $this->assertContains( '`sample_url` serves to get the downloadable sample', $enumValueDeprecatedReason ); $this->assertContains( '`sample_url` serves to get the downloadable sample', $enumValueReasonArray ); $this->assertNotEmpty( array_intersect($enumValueDeprecatedReason, $enumValueReasonArray) ); } /** * Get the enum values deprecated reasons from the schema * * @param array $schemaResponseFields * @return array */ private function getEnumValueDeprecatedReason($schemaResponseFields): array { $enumValueReasonArray = []; foreach ($schemaResponseFields as $schemaResponseField) { if (!empty($schemaResponseField['enumValues'])) { foreach ($schemaResponseField['enumValues'] as $enumValueDeprecationReasonArray) { if (!empty($enumValueDeprecationReasonArray['deprecationReason'])) { $enumValueReasonArray[] = $enumValueDeprecationReasonArray['deprecationReason']; } } } } return $enumValueReasonArray; } /** * Get the fields values deprecated reasons from the schema * * @param array $schemaResponseFields * @return array */ private function getFieldsValueDeprecatedReason($schemaResponseFields): array { $fieldsValueReasonArray = []; foreach ($schemaResponseFields as $schemaResponseField) { if (!empty($schemaResponseField['fields'])) { foreach ($schemaResponseField['fields'] as $fieldsValueDeprecatedReasonArray) { if (!empty($fieldsValueDeprecatedReasonArray['deprecationReason'])) { $fieldsValueReasonArray[] = $fieldsValueDeprecatedReasonArray['deprecationReason']; } } } } return $fieldsValueReasonArray; } }