6 declare(strict_types=1);
13 use Magento\Framework\GraphQl\Config\Config;
15 use Magento\Framework\GraphQl\Config\Data\Argument;
16 use Magento\Framework\GraphQl\Config\Data\Enum;
17 use Magento\Framework\GraphQl\Config\Data\Field;
18 use Magento\Framework\GraphQl\Config\Data\StructureInterface;
19 use Magento\Framework\GraphQl\Config\Data\Type;
30 protected function setUp()
37 $fileResolverMock = $this->getMockBuilder(
39 )->disableOriginalConstructor()->getMock();
44 $fileResolverMock->expects($this->any())->method(
'get')->will($this->returnValue(
$fileList));
46 \
Magento\Framework\GraphQlSchemaStitching\GraphQlReader::class,
47 [
'fileResolver' => $fileResolverMock]
50 \
Magento\Framework\GraphQlSchemaStitching\Reader::class,
51 [
'readers' => [
'graphql_reader' => $graphQlReader]]
63 public function testGraphQlTypeAndFieldConfigStructure()
68 $expectedOutputArray = require
__DIR__ .
'/_files/query_array_output.php';
71 $queryFields =
$output->getFields();
72 foreach (array_keys($queryFields) as $fieldKey) {
73 $fieldAssertionMap = [
74 [
'response_field' =>
'name',
'expected_value' => $queryFields[$fieldKey]->getName()],
75 [
'response_field' =>
'type',
'expected_value' => $queryFields[$fieldKey]->getTypeName()],
76 [
'response_field' =>
'required',
'expected_value' => $queryFields[$fieldKey]->isRequired()],
77 [
'response_field' =>
'isList',
'expected_value' => $queryFields[$fieldKey]->isList()],
78 [
'response_field' =>
'resolver',
'expected_value' => $queryFields[$fieldKey]->getResolver()],
79 [
'response_field' =>
'description',
'expected_value' => $queryFields[$fieldKey]->getDescription()]
81 $this->assertResponseFields($expectedOutputArray[
'Query'][
'fields'][$fieldKey], $fieldAssertionMap);
83 $queryFieldArguments = $queryFields[$fieldKey]->getArguments();
84 foreach (array_keys($queryFieldArguments) as $argumentKey) {
85 $argumentAssertionMap = [
86 [
'response_field' =>
'name',
'expected_value' => $queryFieldArguments[$argumentKey]->getName()],
87 [
'response_field' =>
'type',
'expected_value' => $queryFieldArguments[$argumentKey]->getTypeName()],
88 [
'response_field' =>
'description',
'expected_value' => $queryFieldArguments[$argumentKey]
90 [
'response_field' =>
'required',
'expected_value' => $queryFieldArguments[$argumentKey]
92 [
'response_field' =>
'isList',
'expected_value' => $queryFieldArguments[$argumentKey]->isList()],
93 [
'response_field' =>
'itemsRequired',
'expected_value' => $queryFieldArguments[$argumentKey]
96 $this->assertResponseFields(
97 $expectedOutputArray[
'Query'][
'fields'][$fieldKey][
'arguments'][$argumentKey],
101 $expectedOutputArray[
'Query'][
'fields'][$fieldKey][
'arguments'][$argumentKey][
'defaultValue'],
102 $queryFieldArguments[$argumentKey]->getDefaultValue()
111 public function testGraphQlEnumTypeConfigStructure()
113 $queryEnum =
'PriceAdjustmentDescriptionEnum';
115 $outputEnum = $this->model->getConfigElement($queryEnum);
117 $outputEnumValues = $outputEnum->getValues();
118 $expectedOutputArray = require
__DIR__ .
'/_files/query_array_output.php';
119 $this->assertEquals($outputEnum->getName(), $queryEnum);
120 $this->assertEquals($outputEnum->getDescription(),
'Description for enumType PriceAdjustmentDescriptionEnum');
122 foreach (array_keys($outputEnumValues) as $outputEnumValue) {
124 $expectedOutputArray[
'PriceAdjustmentDescriptionEnum'][
'values'][$outputEnumValue][
'name'],
125 $outputEnumValues[$outputEnumValue]->getName()
128 $expectedOutputArray[
'PriceAdjustmentDescriptionEnum'][
'values'][$outputEnumValue][
'value'],
129 $outputEnumValues[$outputEnumValue]->getValue()
132 $expectedOutputArray[
'PriceAdjustmentDescriptionEnum'][
'values'][$outputEnumValue][
'description'],
133 $outputEnumValues[$outputEnumValue]->getDescription()
141 public function testGraphQlTypeThatImplementsInterface()
143 $typeThatImplements =
'ProductLinks';
145 $outputInterface = $this->model->getConfigElement($typeThatImplements);
146 $expectedOutputArray = require
__DIR__ .
'/_files/query_array_output.php';
147 $this->assertEquals($outputInterface->getName(), $typeThatImplements);
148 $outputInterfaceValues = $outputInterface->getInterfaces();
150 $outputInterfaceFields =$outputInterface->getFields();
151 foreach (array_keys($outputInterfaceValues) as $outputInterfaceValue) {
153 $expectedOutputArray[
'ProductLinks'][
'interfaces'][$outputInterfaceValue][
'interface'],
154 $outputInterfaceValues[$outputInterfaceValue][
'interface']
157 $expectedOutputArray[
'ProductLinks'][
'interfaces'][$outputInterfaceValue][
'copyFields'],
158 $outputInterfaceValues[$outputInterfaceValue][
'copyFields']
161 foreach (array_keys($outputInterfaceFields) as $outputInterfaceField) {
163 $expectedOutputArray[
'ProductLinks'][
'fields'][$outputInterfaceField][
'name'],
164 $outputInterfaceFields[$outputInterfaceField]->getName()
167 $expectedOutputArray[
'ProductLinks'][
'fields'][$outputInterfaceField][
'type'],
168 $outputInterfaceFields[$outputInterfaceField]->getTypeName()
171 $expectedOutputArray[
'ProductLinks'][
'fields'][$outputInterfaceField][
'required'],
172 $outputInterfaceFields[$outputInterfaceField]->isRequired()
175 $expectedOutputArray[
'ProductLinks'][
'fields'][$outputInterfaceField][
'description'],
176 $outputInterfaceFields[$outputInterfaceField]->getDescription()
178 $this->assertEmpty($outputInterfaceFields[$outputInterfaceField]->getArguments());
182 public function testGraphQlInterfaceConfigElement()
184 $interfaceType =
'ProductLinksInterface';
186 $outputConfigElement = $this->model->getConfigElement($interfaceType);
187 $expectedOutput = require
__DIR__ .
'/_files/query_array_output.php';
188 $this->assertEquals($outputConfigElement->getName(), $expectedOutput[
'ProductLinksInterface'][
'name']);
190 $outputConfigElement->getTypeResolver(),
191 $expectedOutput[
'ProductLinksInterface'][
'typeResolver']
194 $outputConfigElement->getDescription(),
195 $expectedOutput[
'ProductLinksInterface'][
'description']
204 private function assertResponseFields($actualResponse, $assertionMap)
206 foreach ($assertionMap as $key => $assertionData) {
207 $expectedValue = isset($assertionData[
'expected_value'])
208 ? $assertionData[
'expected_value']
210 $responseField = isset($assertionData[
'response_field']) ? $assertionData[
'response_field'] : $key;
211 $this->assertNotNull(
213 "Value of '{$responseField}' field must not be NULL" 217 $actualResponse[$responseField],
218 "Value of '{$responseField}' field in response does not match expected value: " 219 . var_export($expectedValue,
true)
227 protected function tearDown()
defined('TESTS_BP')||define('TESTS_BP' __DIR__
static getObjectManager()