123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\TestFramework\TestCase;
- use Magento\TestFramework\Helper\Bootstrap;
- /**
- * Test case for Web API functional tests for Graphql.
- *
- * @SuppressWarnings(PHPMD.NumberOfChildren)
- */
- abstract class GraphQlAbstract extends WebapiAbstract
- {
- /**
- * The instantiated GraphQL client.
- *
- * @var \Magento\TestFramework\TestCase\GraphQl\Client
- */
- private $graphQlClient;
- /**
- * @var \Magento\Framework\App\Cache
- */
- private $appCache;
- /**
- * Perform GraphQL call to the system under test.
- *
- * @see \Magento\TestFramework\TestCase\GraphQl\Client::call()
- * @param string $query
- * @param array $variables
- * @param string $operationName
- * @param array $headers
- * @return array|int|string|float|bool GraphQL call results
- * @throws \Exception
- */
- public function graphQlQuery(
- string $query,
- array $variables = [],
- string $operationName = '',
- array $headers = []
- ) {
- return $this->getGraphQlClient()->postQuery(
- $query,
- $variables,
- $operationName,
- $this->composeHeaders($headers)
- );
- }
- /**
- * Compose headers
- *
- * @param array $headers
- * @return string[]
- */
- private function composeHeaders(array $headers): array
- {
- $headersArray = [];
- foreach ($headers as $key => $value) {
- $headersArray[] = sprintf('%s: %s', $key, $value);
- }
- return $headersArray;
- }
- /**
- * Clear cache so integration test can alter cached GraphQL schema
- *
- * @return bool
- */
- protected function cleanCache()
- {
- return $this->getAppCache()->clean(\Magento\Framework\App\Config::CACHE_TAG);
- }
- /**
- * Return app cache setup.
- *
- * @return \Magento\Framework\App\Cache
- */
- private function getAppCache()
- {
- if (null === $this->appCache) {
- $this->appCache = Bootstrap::getObjectManager()->get(\Magento\Framework\App\Cache::class);
- }
- return $this->appCache;
- }
- /**
- * Get GraphQL adapter (create if requested one does not exist).
- *
- * @return \Magento\TestFramework\TestCase\GraphQl\Client
- */
- private function getGraphQlClient()
- {
- if ($this->graphQlClient === null) {
- $this->graphQlClient = Bootstrap::getObjectManager()->get(
- \Magento\TestFramework\TestCase\GraphQl\Client::class
- );
- }
- return $this->graphQlClient;
- }
- /**
- * Compare actual response fields with expected
- *
- * @param array $actualResponse
- * @param array $assertionMap ['response_field_name' => 'response_field_value', ...]
- * OR [['response_field' => $field, 'expected_value' => $value], ...]
- */
- protected function assertResponseFields($actualResponse, $assertionMap)
- {
- foreach ($assertionMap as $key => $assertionData) {
- $expectedValue = isset($assertionData['expected_value'])
- ? $assertionData['expected_value']
- : $assertionData;
- $responseField = isset($assertionData['response_field']) ? $assertionData['response_field'] : $key;
- self::assertNotNull(
- $expectedValue,
- "Value of '{$responseField}' field must not be NULL"
- );
- self::assertEquals(
- $expectedValue,
- $actualResponse[$responseField],
- "Value of '{$responseField}' field in response does not match expected value: "
- . var_export($expectedValue, true)
- );
- }
- }
- }
|