@@ -60,6 +60,10 @@ class StockStatusTest extends GraphQlAbstract
60
60
*/
61
61
private $ productRepository ;
62
62
63
+ private const SKU = 'simple_10 ' ;
64
+ private const PARENT_SKU_BUNDLE = 'parent_bundle ' ;
65
+ private const PARENT_SKU_CONFIGURABLE = 'parent_configurable ' ;
66
+
63
67
/**
64
68
* @inheritDoc
65
69
*/
@@ -89,16 +93,15 @@ public function testStockStatusUnavailableSimpleProduct(): void
89
93
}
90
94
91
95
#[
92
- DataFixture(ProductFixture::class, ['sku ' => ' spl-prod ' , 'price ' => 100.00 ], as: 'product ' ),
96
+ DataFixture(ProductFixture::class, ['sku ' => self :: SKU , 'price ' => 100.00 ], as: 'product ' ),
93
97
DataFixture(GuestCartFixture::class, as: 'cart ' ),
94
98
DataFixture(AddProductToCart::class, ['cart_id ' => '$cart.id$ ' , 'product_id ' => '$product.id$ ' , 'qty ' => 100 ]),
95
99
DataFixture(QuoteMaskFixture::class, ['cart_id ' => '$cart.id$ ' ], 'quoteIdMask ' )
96
100
]
97
101
public function testStockStatusUnavailableAddSimpleProduct (): void
98
102
{
99
- $ sku = 'spl-prod ' ;
100
103
$ maskedQuoteId = $ this ->fixtures ->get ('quoteIdMask ' )->getMaskedId ();
101
- $ query = $ this ->mutationAddSimpleProduct ($ maskedQuoteId , $ sku , 100 );
104
+ $ query = $ this ->mutationAddSimpleProduct ($ maskedQuoteId , self :: SKU , 1 );
102
105
$ response = $ this ->graphQlMutation ($ query );
103
106
$ responseDataObject = new DataObject ($ response );
104
107
@@ -145,7 +148,7 @@ public function testStockStatusUnavailableBundleProduct(): void
145
148
'required ' => 1 ,'product_links ' => ['$link$ ' ]], 'option ' ),
146
149
DataFixture(
147
150
BundleProductFixture::class,
148
- ['sku ' => ' bundle-prod1 ' , 'price ' => 90 , '_options ' => ['$option$ ' ]],
151
+ ['sku ' => self :: PARENT_SKU_BUNDLE , 'price ' => 90 , '_options ' => ['$option$ ' ]],
149
152
as:'bundleProduct '
150
153
),
151
154
DataFixture(GuestCartFixture::class, as: 'cart ' ),
@@ -162,8 +165,7 @@ public function testStockStatusUnavailableBundleProduct(): void
162
165
]
163
166
public function testStockStatusUnavailableAddBundleProduct (): void
164
167
{
165
- $ sku = 'bundle-prod1 ' ;
166
- $ product = $ this ->productRepository ->get ($ sku );
168
+ $ product = $ this ->productRepository ->get (self ::PARENT_SKU_BUNDLE );
167
169
168
170
/** @var $typeInstance \Magento\Bundle\Model\Product\Type */
169
171
$ typeInstance = $ product ->getTypeInstance ();
@@ -178,7 +180,7 @@ public function testStockStatusUnavailableAddBundleProduct(): void
178
180
$ bundleOptionIdV2 = $ this ->generateBundleOptionIdV2 ((int ) $ optionId , (int ) $ selectionId , 1 );
179
181
$ maskedQuoteId = $ this ->fixtures ->get ('quoteIdMask ' )->getMaskedId ();
180
182
181
- $ query = $ this ->mutationAddBundleProduct ($ maskedQuoteId , $ sku , $ bundleOptionIdV2, 100 );
183
+ $ query = $ this ->mutationAddBundleProduct ($ maskedQuoteId , self :: PARENT_SKU_BUNDLE , $ bundleOptionIdV2 );
182
184
$ response = $ this ->graphQlMutation ($ query );
183
185
$ responseDataObject = new DataObject ($ response );
184
186
@@ -216,6 +218,36 @@ public function testStockStatusUnavailableConfigurableProduct(): void
216
218
self ::assertEquals ('unavailable ' , $ responseDataObject ->getData ('cart/items/0/status ' ));
217
219
}
218
220
221
+ #[
222
+ DataFixture(ProductFixture::class, ['sku ' => self ::SKU ], as: 'product ' ),
223
+ DataFixture(AttributeFixture::class, as: 'attribute ' ),
224
+ DataFixture(
225
+ ConfigurableProductFixture::class,
226
+ ['sku ' => self ::PARENT_SKU_CONFIGURABLE , '_options ' => ['$attribute$ ' ], '_links ' => ['$product$ ' ]],
227
+ 'configurable_product '
228
+ ),
229
+ DataFixture(GuestCartFixture::class, as: 'cart ' ),
230
+ DataFixture(QuoteMaskFixture::class, ['cart_id ' => '$cart.id$ ' ], 'quoteIdMask ' ),
231
+ DataFixture(
232
+ AddConfigurableProductToCartFixture::class,
233
+ [
234
+ 'cart_id ' => '$cart.id$ ' ,
235
+ 'product_id ' => '$configurable_product.id$ ' ,
236
+ 'child_product_id ' => '$product.id$ ' ,
237
+ 'qty ' => 100
238
+ ],
239
+ )
240
+ ]
241
+ public function testStockStatusUnavailableAddConfigurableProduct (): void
242
+ {
243
+ $ maskedQuoteId = $ this ->fixtures ->get ('quoteIdMask ' )->getMaskedId ();
244
+ $ query = $ this ->mutationAddConfigurableProduct ($ maskedQuoteId , self ::SKU , self ::PARENT_SKU_CONFIGURABLE );
245
+ $ response = $ this ->graphQlMutation ($ query );
246
+ $ responseDataObject = new DataObject ($ response );
247
+
248
+ self ::assertEquals ('unavailable ' , $ responseDataObject ->getData ('addProductsToCart/cart/items/0/status ' ));
249
+ }
250
+
219
251
/**
220
252
* @param string $cartId
221
253
* @return string
@@ -234,7 +266,7 @@ private function getQuery(string $cartId): string
234
266
QUERY ;
235
267
}
236
268
237
- private function mutationAddSimpleProduct (string $ cartId , string $ sku , int $ qty ): string
269
+ private function mutationAddSimpleProduct (string $ cartId , string $ sku , int $ qty = 1 ): string
238
270
{
239
271
return <<<QUERY
240
272
mutation {
@@ -256,7 +288,7 @@ private function mutationAddSimpleProduct(string $cartId, string $sku, int $qty)
256
288
QUERY ;
257
289
}
258
290
259
- private function mutationAddBundleProduct (string $ cartId , string $ sku , string $ bundleOptionIdV2 , int $ qty ): string
291
+ private function mutationAddBundleProduct (string $ cartId , string $ sku , string $ bundleOptionIdV2 , int $ qty = 1 ): string
260
292
{
261
293
return <<<QUERY
262
294
mutation {
@@ -284,6 +316,32 @@ private function mutationAddBundleProduct(string $cartId, string $sku, string $b
284
316
QUERY ;
285
317
}
286
318
319
+ private function mutationAddConfigurableProduct (string $ cartId , string $ sku , string $ parentSku , int $ qty = 1 ): string
320
+ {
321
+ return <<<QUERY
322
+ mutation {
323
+ addProductsToCart(
324
+ cartId: " {$ cartId }",
325
+ cartItems: [
326
+ {
327
+ sku: " {$ sku }"
328
+ quantity: $ qty
329
+ parent_sku: " {$ parentSku }"
330
+ }]
331
+ ) {
332
+ cart {
333
+ items {
334
+ status
335
+ product {
336
+ sku
337
+ }
338
+ }
339
+ }
340
+ }
341
+ }
342
+ QUERY ;
343
+ }
344
+
287
345
private function generateBundleOptionIdV2 (int $ optionId , int $ selectionId , int $ quantity ): string
288
346
{
289
347
return base64_encode ("bundle/ $ optionId/ $ selectionId/ $ quantity " );
0 commit comments