Skip to content

Commit 913808a

Browse files
RachanaRachana
authored andcommitted
BUG#AC-6666:fixed failing static testcase
1 parent ea00ca1 commit 913808a

File tree

1 file changed

+42
-38
lines changed

1 file changed

+42
-38
lines changed

app/code/Magento/CatalogGraphQl/Model/AttributesJoiner.php

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,52 @@ public function getQueryFields(FieldNode $fieldNode, ResolveInfo $resolveInfo):
7070
$selectedFields = [];
7171
$fragmentFields = [];
7272
/** @var FieldNode $field */
73-
$response=$this->test($query, $resolveInfo);
74-
$fragmentFields=$response['fragmentFields'];
75-
$selectedFields=$response['selectedFields'];
73+
foreach ($query as $field) {
74+
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
75+
$fragmentFields[] = $this->addInlineFragmentFields($resolveInfo, $field);
76+
} elseif ($field->kind === NodeKind::FRAGMENT_SPREAD &&
77+
($spreadFragmentNode = $resolveInfo->fragments[$field->name->value])) {
78+
79+
foreach ($spreadFragmentNode->selectionSet->selections as $spreadNode) {
80+
$response= $this->setFieldNodeData($spreadNode, $resolveInfo);
81+
$fragmentFields=$response['fragmentFields'];
82+
$selectedFields=$response['selectedFields'];
83+
}
84+
} else {
85+
$selectedFields[] = $field->name->value;
86+
}
87+
}
7688
if ($fragmentFields) {
7789
$selectedFields = array_merge([], $selectedFields, ...$fragmentFields);
7890
}
79-
$this->setSelectionsForFieldNode($fieldNode, array_unique($selectedFields));
91+
$this->setSelectionsForFieldNode($fieldNode, array_unique($selectedFields));
8092
}
8193

82-
return $this->getFieldNodeSelections($fieldNode);
94+
return $this->getFieldNodeSelections($fieldNode);
95+
}
96+
97+
/**
98+
* Set the field selections for a query node
99+
*
100+
* @param array $spreadNode
101+
* @param ResolveInfo $resolveInfo
102+
*/
103+
public function setFieldNodeData($spreadNode, $resolveInfo)
104+
{
105+
$fragmentFields =[];
106+
$selectedFields = [];
107+
if (isset($spreadNode->selectionSet->selections)) {
108+
if ($spreadNode->kind === NodeKind::FIELD && isset($spreadNode->name)) {
109+
$selectedFields[] = $spreadNode->name->value;
110+
}
111+
$fragmentFields[] = $this->getQueryFields($spreadNode, $resolveInfo);
112+
} else {
113+
$selectedFields[] = $spreadNode->name->value;
114+
}
115+
$data=[];
116+
$data['fragmentFields']=$fragmentFields;
117+
$data['selectedFields']=$selectedFields;
118+
return $data;
83119
}
84120

85121
/**
@@ -113,6 +149,7 @@ private function addInlineFragmentFields(
113149
if ($fragmentFields) {
114150
$inlineFragmentFields = array_merge([], $inlineFragmentFields, ...$fragmentFields);
115151
}
152+
116153
return array_unique($inlineFragmentFields);
117154
}
118155

@@ -164,37 +201,4 @@ private function setSelectionsForFieldNode(FieldNode $fieldNode, array $selected
164201
{
165202
$this->queryFields[$fieldNode->name->value][$fieldNode->name->loc->start] = $selectedFields;
166203
}
167-
168-
/**
169-
* Get array for fragment fields
170-
*
171-
* @param array $query
172-
* @param ResolveInfo $resolveInfo
173-
*/
174-
public function test($query, $resolveInfo)
175-
{
176-
$selectedFields = [];
177-
$fragmentFields = [];
178-
foreach ($query as $field) {
179-
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
180-
$fragmentFields[] = $this->addInlineFragmentFields($resolveInfo, $field);
181-
} elseif ($field->kind === NodeKind::FRAGMENT_SPREAD &&
182-
($spreadFragmentNode = $resolveInfo->fragments[$field->name->value])) {
183-
184-
foreach ($spreadFragmentNode->selectionSet->selections as $spreadNode) {
185-
if (isset($spreadNode->selectionSet->selections)) {
186-
$fragmentFields[] = $this->getQueryFields($spreadNode, $resolveInfo);
187-
} else {
188-
$selectedFields[] = $spreadNode->name->value;
189-
}
190-
}
191-
} else {
192-
$selectedFields[] = $field->name->value;
193-
}
194-
$data=[];
195-
$data['fragmentFields']=$fragmentFields;
196-
$data['selectedFields']=$selectedFields;
197-
return $data;
198-
}
199-
}
200204
}

0 commit comments

Comments
 (0)