objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var Cache $cache */ $cache = $this->objectManager->get(Cache::class); $cache->clean(); $fileResolverMock = $this->getMockBuilder( \Magento\Framework\Config\FileResolverInterface::class )->disableOriginalConstructor()->getMock(); $fileList = [ file_get_contents(__DIR__ . '/../_files/schemaA.graphqls'), file_get_contents(__DIR__ . '/../_files/schemaB.graphqls') ]; $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($fileList)); $graphQlReader = $this->objectManager->create( \Magento\Framework\GraphQlSchemaStitching\GraphQlReader::class, ['fileResolver' => $fileResolverMock] ); $reader = $this->objectManager->create( \Magento\Framework\GraphQlSchemaStitching\Reader::class, ['readers' => ['graphql_reader' => $graphQlReader]] ); $data = $this->objectManager->create( \Magento\Framework\GraphQl\Config\Data ::class, ['reader' => $reader] ); $this->configModel = $this->objectManager->create( \Magento\Framework\GraphQl\Config::class, ['data' => $data] ); $outputMapper = $this->objectManager->create( \Magento\Framework\GraphQl\Schema\Type\Output\OutputMapper::class, ['config' => $this->configModel] ); $schemaGenerator = $this->objectManager->create( SchemaGenerator::class, ['outputMapper' => $outputMapper] ); $this->graphQlController = $this->objectManager->create( GraphQl::class, ['schemaGenerator' => $schemaGenerator] ); $this->jsonSerializer = $this->objectManager->get(SerializerInterface::class); } /** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testDispatchIntrospectionWithCustomSDL() { $query = << $query, 'variables' => null, 'operationName' => 'IntrospectionQuery' ]; /** @var Http $request */ $request = $this->objectManager->get(\Magento\Framework\App\Request\Http::class); $request->setPathInfo('/graphql'); $request->setContent(json_encode($postData)); $headers = $this->objectManager->create(\Zend\Http\Headers::class) ->addHeaders(['Content-Type' => 'application/json']); $request->setHeaders($headers); $response = $this->graphQlController->dispatch($request); $output = $this->jsonSerializer->unserialize($response->getContent()); $expectedOutput = require __DIR__ . '/../_files/schema_response_sdl_description.php'; $schemaResponseFields = $output['data']['__schema']['types']; $schemaResponseFieldsFirstHalf = array_slice($schemaResponseFields, 0, 25); $schemaResponseFieldsSecondHalf = array_slice($schemaResponseFields, -21, 21); $mergedSchemaResponseFields = array_merge($schemaResponseFieldsFirstHalf, $schemaResponseFieldsSecondHalf); foreach ($expectedOutput as $searchTerm) { $sortFields = ['inputFields', 'fields']; foreach ($sortFields as $sortField) { isset($searchTerm[$sortField]) && is_array($searchTerm[$sortField]) ? usort($searchTerm[$sortField], function ($a, $b) { $cmpField = 'name'; return isset($a[$cmpField]) && isset($b[$cmpField]) ? strcmp($a[$cmpField], $b[$cmpField]) : 0; }) : null; } $this->assertTrue( (in_array($searchTerm, $mergedSchemaResponseFields)), 'Missing type in the response' ); } //Checks to make sure that the given description exists in the expectedOutput array $this->assertTrue( array_key_exists( array_search( 'Comment for empty PhysicalProductInterface', array_column($expectedOutput, 'description') ), $expectedOutput ) ); $this->assertTrue( array_key_exists( array_search( 'Comment for empty Enum', array_column($expectedOutput, 'description') ), $expectedOutput ) ); $this->assertTrue( array_key_exists( array_search( 'Comment for SearchResultPageInfo', array_column($expectedOutput, 'description') ), $expectedOutput ) ); } }