Skip to content

Commit 1f8e7c9

Browse files
committed
Merge remote-tracking branch 'origin/MC-38443' into issue-29302-graphql-schema-change
2 parents c8225a4 + d6aeca9 commit 1f8e7c9

File tree

4 files changed

+58
-34
lines changed

4 files changed

+58
-34
lines changed

app/code/Magento/ConfigurableProductGraphQl/Model/Resolver/OptionsSelectionMetadata.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
4040
throw new LocalizedException(__('"model" value should be specified'));
4141
}
4242

43-
$selectedOptions = $args['selectedConfigurableOptionValues'] ?? [];
43+
$selectedOptions = $args['configurableOptionValueUids'] ?? [];
4444
/** @var ProductInterface $product */
4545
$product = $value['model'];
4646

app/code/Magento/ConfigurableProductGraphQl/Model/Resolver/SelectionMediaGallery.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
3030
foreach ($usedProducts as $usedProduct) {
3131
if (in_array($usedProduct->getId(), $availableSelectionProducts)) {
3232
foreach ($usedProduct->getMediaGalleryEntries() ?? [] as $key => $entry) {
33-
$index = $usedProduct->getId() . '_' . $key;
34-
$mediaGalleryEntries[$index] = $entry->getData();
33+
$entryData = $entry->getData();
34+
$initialIndex = $usedProduct->getId() . '_' . $key;
35+
$index = $this->prepareIndex($entryData, $initialIndex);
36+
$mediaGalleryEntries[$index] = $entryData;
3537
$mediaGalleryEntries[$index]['model'] = $usedProduct;
3638
if ($entry->getExtensionAttributes() && $entry->getExtensionAttributes()->getVideoContent()) {
3739
$mediaGalleryEntries[$index]['video_content']
@@ -42,4 +44,26 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
4244
}
4345
return $mediaGalleryEntries;
4446
}
47+
48+
/**
49+
* Formulate an index to have unique set of media entries
50+
*
51+
* @param array $entryData
52+
* @param string $initialIndex
53+
* @return string
54+
*/
55+
private function prepareIndex(array $entryData, string $initialIndex) : string
56+
{
57+
$index = $initialIndex;
58+
if (isset($entryData['media_type'])) {
59+
$index = $entryData['media_type'];
60+
}
61+
if (isset($entryData['file'])) {
62+
$index = $index.'_'.$entryData['file'];
63+
}
64+
if (isset($entryData['position'])) {
65+
$index = $index.'_'.$entryData['position'];
66+
}
67+
return $index;
68+
}
4569
}

app/code/Magento/ConfigurableProductGraphQl/etc/schema.graphqls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ type Mutation {
77
type ConfigurableProduct implements ProductInterface, PhysicalProductInterface, CustomizableProductInterface @doc(description: "ConfigurableProduct defines basic features of a configurable product and its simple product variants") {
88
variants: [ConfigurableVariant] @doc(description: "An array of variants of products") @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\ConfigurableVariant")
99
configurable_options: [ConfigurableProductOptions] @doc(description: "An array of linked simple product items") @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\Options")
10-
configurable_options_selection_metadata(selectedConfigurableOptionValues: [ID!]): ConfigurableOptionsSelectionMetadata @doc(description: "Metadata for the specified configurable options selection") @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\OptionsSelectionMetadata")
10+
configurable_product_options_selection(configurableOptionValueUids: [ID!]): ConfigurableProductOptionsSelection @doc(description: "Metadata for the specified configurable options selection") @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\OptionsSelectionMetadata")
1111
}
1212

1313
type ConfigurableVariant @doc(description: "An array containing all the simple product variants of a configurable product") {
@@ -80,7 +80,7 @@ type ConfigurableWishlistItem implements WishlistItemInterface @doc(description:
8080
configurable_options: [SelectedConfigurableOption!] @resolver(class: "\\Magento\\ConfigurableProductGraphQl\\Model\\Wishlist\\ConfigurableOptions") @doc (description: "An array of selected configurable options")
8181
}
8282

83-
type ConfigurableOptionsSelectionMetadata @doc(description: "Metadata corresponding to the configurable options selection.") {
83+
type ConfigurableProductOptionsSelection @doc(description: "Metadata corresponding to the configurable options selection.") {
8484
options_available_for_selection: [ConfigurableOptionAvailableForSelection!] @doc(description: "Configurable options available for further selection based on current selection.")
8585
media_gallery: [MediaGalleryInterface!] @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\SelectionMediaGallery") @doc(description: "Product images and videos corresponding to the specified configurable options selection.")
8686
variant: SimpleProduct @resolver(class: "Magento\\ConfigurableProductGraphQl\\Model\\Resolver\\Variant\\Variant") @doc(description: "Variant represented by the specified configurable options selection. It is expected to be null, until selections are made for each configurable option.")

dev/tests/api-functional/testsuite/Magento/GraphQl/ConfigurableProduct/ConfigurableOptionsSelectionMetadataTest.php

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ public function testWithoutSelectedOption()
6363
html
6464
}
6565
... on ConfigurableProduct {
66-
configurable_options_selection_metadata(
67-
selectedConfigurableOptionValues: []
66+
configurable_product_options_selection(
67+
configurableOptionValueUids: []
6868
) {
6969
options_available_for_selection {
7070
option_value_uids
@@ -78,11 +78,11 @@ public function testWithoutSelectedOption()
7878
QUERY;
7979
$response = $this->graphQlQuery($query);
8080
$this->assertEquals(1, count($response['products']['items']));
81-
$this->assertEquals(2, count($response['products']['items'][0]['configurable_options_selection_metadata']
81+
$this->assertEquals(2, count($response['products']['items'][0]['configurable_product_options_selection']
8282
['options_available_for_selection']));
83-
$this->assertEquals(4, count($response['products']['items'][0]['configurable_options_selection_metadata']
83+
$this->assertEquals(4, count($response['products']['items'][0]['configurable_product_options_selection']
8484
['options_available_for_selection'][0]['option_value_uids']));
85-
$this->assertEquals(4, count($response['products']['items'][0]['configurable_options_selection_metadata']
85+
$this->assertEquals(4, count($response['products']['items'][0]['configurable_product_options_selection']
8686
['options_available_for_selection'][1]['option_value_uids']));
8787
}
8888

@@ -112,8 +112,8 @@ public function testSelectedFirstAttributeFirstOption()
112112
html
113113
}
114114
... on ConfigurableProduct {
115-
configurable_options_selection_metadata(
116-
selectedConfigurableOptionValues: ["{$firstOptionUid}"]
115+
configurable_product_options_selection(
116+
configurableOptionValueUids: ["{$firstOptionUid}"]
117117
) {
118118
options_available_for_selection {
119119
option_value_uids
@@ -128,20 +128,20 @@ public function testSelectedFirstAttributeFirstOption()
128128

129129
$response = $this->graphQlQuery($query);
130130
$this->assertEquals(1, count($response['products']['items']));
131-
$this->assertEquals(2, count($response['products']['items'][0]['configurable_options_selection_metadata']
131+
$this->assertEquals(2, count($response['products']['items'][0]['configurable_product_options_selection']
132132
['options_available_for_selection']));
133-
$this->assertEquals(1, count($response['products']['items'][0]['configurable_options_selection_metadata']
133+
$this->assertEquals(1, count($response['products']['items'][0]['configurable_product_options_selection']
134134
['options_available_for_selection'][0]['option_value_uids']));
135135
$this->assertEquals($firstOptionUid, $response['products']['items'][0]
136-
['configurable_options_selection_metadata']['options_available_for_selection'][0]['option_value_uids'][0]);
137-
$this->assertEquals(4, count($response['products']['items'][0]['configurable_options_selection_metadata']
136+
['configurable_product_options_selection']['options_available_for_selection'][0]['option_value_uids'][0]);
137+
$this->assertEquals(4, count($response['products']['items'][0]['configurable_product_options_selection']
138138
['options_available_for_selection'][1]['option_value_uids']));
139139

140140
$secondAttributeOptions = $this->getSecondConfigurableAttribute()->getOptions();
141141
$this->assertAvailableOptionUids(
142142
$this->getSecondConfigurableAttribute()->getAttributeId(),
143143
$secondAttributeOptions,
144-
$response['products']['items'][0]['configurable_options_selection_metadata']
144+
$response['products']['items'][0]['configurable_product_options_selection']
145145
['options_available_for_selection'][1]['option_value_uids']
146146
);
147147
}
@@ -172,8 +172,8 @@ public function testSelectedFirstAttributeLastOption()
172172
html
173173
}
174174
... on ConfigurableProduct {
175-
configurable_options_selection_metadata(
176-
selectedConfigurableOptionValues: ["{$lastOptionUid}"]
175+
configurable_product_options_selection(
176+
configurableOptionValueUids: ["{$lastOptionUid}"]
177177
) {
178178
options_available_for_selection {
179179
option_value_uids
@@ -188,13 +188,13 @@ public function testSelectedFirstAttributeLastOption()
188188

189189
$response = $this->graphQlQuery($query);
190190
$this->assertEquals(1, count($response['products']['items']));
191-
$this->assertEquals(2, count($response['products']['items'][0]['configurable_options_selection_metadata']
191+
$this->assertEquals(2, count($response['products']['items'][0]['configurable_product_options_selection']
192192
['options_available_for_selection']));
193-
$this->assertEquals(1, count($response['products']['items'][0]['configurable_options_selection_metadata']
193+
$this->assertEquals(1, count($response['products']['items'][0]['configurable_product_options_selection']
194194
['options_available_for_selection'][0]['option_value_uids']));
195-
$this->assertEquals($lastOptionUid, $response['products']['items'][0]['configurable_options_selection_metadata']
195+
$this->assertEquals($lastOptionUid, $response['products']['items'][0]['configurable_product_options_selection']
196196
['options_available_for_selection'][0]['option_value_uids'][0]);
197-
$this->assertEquals(2, count($response['products']['items'][0]['configurable_options_selection_metadata']
197+
$this->assertEquals(2, count($response['products']['items'][0]['configurable_product_options_selection']
198198
['options_available_for_selection'][1]['option_value_uids']));
199199
$secondAttributeOptions = $this->getSecondConfigurableAttribute()->getOptions();
200200
unset($secondAttributeOptions[0]);
@@ -203,7 +203,7 @@ public function testSelectedFirstAttributeLastOption()
203203
$this->assertAvailableOptionUids(
204204
$this->getSecondConfigurableAttribute()->getAttributeId(),
205205
$secondAttributeOptions,
206-
$response['products']['items'][0]['configurable_options_selection_metadata']
206+
$response['products']['items'][0]['configurable_product_options_selection']
207207
['options_available_for_selection'][1]['option_value_uids']
208208
);
209209
}
@@ -240,8 +240,8 @@ public function testSelectedVariant()
240240
html
241241
}
242242
... on ConfigurableProduct {
243-
configurable_options_selection_metadata(
244-
selectedConfigurableOptionValues: ["{$firstAttributeFirstOptionUid}", "{$secondAttributeFirstOptionUid}"]
243+
configurable_product_options_selection(
244+
configurableOptionValueUids: ["{$firstAttributeFirstOptionUid}", "{$secondAttributeFirstOptionUid}"]
245245
) {
246246
options_available_for_selection {
247247
option_value_uids
@@ -259,11 +259,11 @@ public function testSelectedVariant()
259259
QUERY;
260260
$response = $this->graphQlQuery($query);
261261
$this->assertEquals(1, count($response['products']['items']));
262-
$this->assertNotNull($response['products']['items'][0]['configurable_options_selection_metadata']
262+
$this->assertNotNull($response['products']['items'][0]['configurable_product_options_selection']
263263
['variant']);
264264
$this->assertEquals(
265265
'simple_' . $firstOptions[1]->getValue() . '_' . $secondOptions[1]->getValue(),
266-
$response['products']['items'][0]['configurable_options_selection_metadata']
266+
$response['products']['items'][0]['configurable_product_options_selection']
267267
['variant']['sku']
268268
);
269269
}
@@ -288,8 +288,8 @@ public function testMediaGalleryForAll()
288288
html
289289
}
290290
... on ConfigurableProduct {
291-
configurable_options_selection_metadata(
292-
selectedConfigurableOptionValues: []
291+
configurable_product_options_selection(
292+
configurableOptionValueUids: []
293293
) {
294294
options_available_for_selection {
295295
option_value_uids
@@ -306,7 +306,7 @@ public function testMediaGalleryForAll()
306306
QUERY;
307307
$response = $this->graphQlQuery($query);
308308
$this->assertEquals(1, count($response['products']['items']));
309-
$this->assertEquals(14, count($response['products']['items'][0]['configurable_options_selection_metadata']
309+
$this->assertEquals(14, count($response['products']['items'][0]['configurable_product_options_selection']
310310
['media_gallery']));
311311
}
312312

@@ -336,8 +336,8 @@ public function testMediaGalleryWithSelection()
336336
html
337337
}
338338
... on ConfigurableProduct {
339-
configurable_options_selection_metadata(
340-
selectedConfigurableOptionValues: ["$lastOptionUid"]
339+
configurable_product_options_selection(
340+
configurableOptionValueUids: ["$lastOptionUid"]
341341
) {
342342
options_available_for_selection {
343343
option_value_uids
@@ -354,7 +354,7 @@ public function testMediaGalleryWithSelection()
354354
QUERY;
355355
$response = $this->graphQlQuery($query);
356356
$this->assertEquals(1, count($response['products']['items']));
357-
$this->assertEquals(2, count($response['products']['items'][0]['configurable_options_selection_metadata']
357+
$this->assertEquals(2, count($response['products']['items'][0]['configurable_product_options_selection']
358358
['media_gallery']));
359359
}
360360

0 commit comments

Comments
 (0)