@@ -223,6 +223,11 @@ public static function getProtectedEndpoints(): iterable
223223 '/discount ' ,
224224 ];
225225
226+ yield 'update endpoint ' => [
227+ 'PATCH ' ,
228+ '/discount/1 ' ,
229+ ];
230+
226231 yield 'list endpoint ' => [
227232 'GET ' ,
228233 '/discounts ' ,
@@ -232,5 +237,215 @@ public static function getProtectedEndpoints(): iterable
232237 'DELETE ' ,
233238 '/discount/1 ' ,
234239 ];
240+
241+ yield 'get conditions endpoint ' => [
242+ 'GET ' ,
243+ '/discount/1/conditions ' ,
244+ ];
245+
246+ yield 'update conditions endpoint ' => [
247+ 'PATCH ' ,
248+ '/discount/1/conditions ' ,
249+ ];
250+ }
251+
252+ /**
253+ * @depends testAddDiscountAndGet
254+ *
255+ * @param int $discountId
256+ *
257+ * @return int
258+ */
259+ public function testPartialUpdateDiscount (int $ discountId ): int
260+ {
261+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
262+ 'description ' => 'Updated description ' ,
263+ ], ['discount_write ' ]);
264+ $ this ->assertEquals ('Updated description ' , $ updatedDiscount ['description ' ]);
265+
266+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
267+ 'code ' => 'NEWCODE123 ' ,
268+ ], ['discount_write ' ]);
269+ $ this ->assertEquals ('NEWCODE123 ' , $ updatedDiscount ['code ' ]);
270+
271+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
272+ 'priority ' => 10 ,
273+ ], ['discount_write ' ]);
274+ $ this ->assertEquals (10 , $ updatedDiscount ['priority ' ]);
275+
276+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
277+ 'active ' => true ,
278+ ], ['discount_write ' ]);
279+ $ this ->assertEquals (true , $ updatedDiscount ['active ' ]);
280+
281+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
282+ 'totalQuantity ' => 100 ,
283+ ], ['discount_write ' ]);
284+ $ this ->assertEquals (100 , $ updatedDiscount ['totalQuantity ' ]);
285+
286+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
287+ 'quantityPerUser ' => 5 ,
288+ ], ['discount_write ' ]);
289+ $ this ->assertEquals (5 , $ updatedDiscount ['quantityPerUser ' ]);
290+
291+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
292+ 'customerId ' => 1 ,
293+ ], ['discount_write ' ]);
294+ $ this ->assertEquals (1 , $ updatedDiscount ['customerId ' ]);
295+
296+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
297+ 'highlightInCart ' => true ,
298+ ], ['discount_write ' ]);
299+ $ this ->assertEquals (true , $ updatedDiscount ['highlightInCart ' ]);
300+
301+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
302+ 'allowPartialUse ' => false ,
303+ ], ['discount_write ' ]);
304+ $ this ->assertEquals (false , $ updatedDiscount ['allowPartialUse ' ]);
305+
306+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
307+ 'names ' => [
308+ 'en-US ' => 'Updated EN name ' ,
309+ 'fr-FR ' => 'Updated FR name ' ,
310+ ],
311+ ], ['discount_write ' ]);
312+ $ this ->assertEquals ('Updated EN name ' , $ updatedDiscount ['names ' ]['en-US ' ]);
313+ $ this ->assertEquals ('Updated FR name ' , $ updatedDiscount ['names ' ]['fr-FR ' ]);
314+
315+ return $ discountId ;
316+ }
317+
318+ /**
319+ * @depends testPartialUpdateDiscount
320+ *
321+ * @param int $discountId
322+ *
323+ * @return int
324+ */
325+ public function testGetUpdatedDiscount (int $ discountId ): int
326+ {
327+ $ discount = $ this ->getItem ('/discount/ ' . $ discountId , ['discount_read ' ]);
328+ $ this ->assertEquals ('Updated description ' , $ discount ['description ' ]);
329+ $ this ->assertEquals ('NEWCODE123 ' , $ discount ['code ' ]);
330+ $ this ->assertEquals (10 , $ discount ['priority ' ]);
331+ $ this ->assertEquals (true , $ discount ['active ' ]);
332+ $ this ->assertEquals (100 , $ discount ['totalQuantity ' ]);
333+ $ this ->assertEquals (5 , $ discount ['quantityPerUser ' ]);
334+ $ this ->assertEquals ('Updated EN name ' , $ discount ['names ' ]['en-US ' ]);
335+ $ this ->assertEquals ('Updated FR name ' , $ discount ['names ' ]['fr-FR ' ]);
336+
337+ return $ discountId ;
338+ }
339+
340+ /**
341+ * @depends testGetUpdatedDiscount
342+ *
343+ * @param int $discountId
344+ *
345+ * @return int
346+ */
347+ public function testGetDiscountConditions (int $ discountId ): int
348+ {
349+ $ conditions = $ this ->getItem ('/discount/ ' . $ discountId . '/conditions ' , ['discount_read ' ]);
350+ $ this ->assertArrayHasKey ('discountId ' , $ conditions );
351+ $ this ->assertEquals ($ discountId , $ conditions ['discountId ' ]);
352+
353+ return $ discountId ;
354+ }
355+
356+ /**
357+ * @depends testGetDiscountConditions
358+ *
359+ * @param int $discountId
360+ *
361+ * @return int
362+ */
363+ public function testUpdateDiscountConditions (int $ discountId ): int
364+ {
365+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
366+ 'minimumProductsQuantity ' => 5 ,
367+ ], ['discount_write ' ]);
368+ $ this ->assertEquals (5 , $ updatedConditions ['minimumProductsQuantity ' ]);
369+
370+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
371+ 'minimumAmount ' => '50.00 ' ,
372+ 'minimumAmountCurrencyId ' => 1 ,
373+ 'minimumAmountTaxIncluded ' => true ,
374+ 'minimumAmountShippingIncluded ' => false ,
375+ ], ['discount_write ' ]);
376+ $ this ->assertEquals ('50.00 ' , $ updatedConditions ['minimumAmount ' ]);
377+ $ this ->assertEquals (1 , $ updatedConditions ['minimumAmountCurrencyId ' ]);
378+ $ this ->assertEquals (true , $ updatedConditions ['minimumAmountTaxIncluded ' ]);
379+ $ this ->assertEquals (false , $ updatedConditions ['minimumAmountShippingIncluded ' ]);
380+
381+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
382+ 'carrierIds ' => [1 , 2 ],
383+ ], ['discount_write ' ]);
384+ $ this ->assertIsArray ($ updatedConditions ['carrierIds ' ]);
385+ $ this ->assertCount (2 , $ updatedConditions ['carrierIds ' ]);
386+ $ this ->assertContains (1 , $ updatedConditions ['carrierIds ' ]);
387+ $ this ->assertContains (2 , $ updatedConditions ['carrierIds ' ]);
388+
389+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
390+ 'countryIds ' => [1 , 2 , 3 ],
391+ ], ['discount_write ' ]);
392+ $ this ->assertIsArray ($ updatedConditions ['countryIds ' ]);
393+ $ this ->assertCount (3 , $ updatedConditions ['countryIds ' ]);
394+ $ this ->assertContains (1 , $ updatedConditions ['countryIds ' ]);
395+ $ this ->assertContains (2 , $ updatedConditions ['countryIds ' ]);
396+ $ this ->assertContains (3 , $ updatedConditions ['countryIds ' ]);
397+
398+ return $ discountId ;
399+ }
400+
401+ /**
402+ * @depends testUpdateDiscountConditions
403+ *
404+ * @param int $discountId
405+ *
406+ * @return int
407+ */
408+ public function testUpdateDiscountConditionsWithProductRules (int $ discountId ): int
409+ {
410+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
411+ 'productConditions ' => [
412+ [
413+ 'quantity ' => 3 ,
414+ 'type ' => 'products ' ,
415+ 'rules ' => [
416+ [
417+ 'type ' => 'products ' ,
418+ 'itemIds ' => [1 , 2 , 3 ],
419+ ],
420+ ],
421+ ],
422+ ],
423+ ], ['discount_write ' ]);
424+ $ this ->assertArrayHasKey ('productConditions ' , $ updatedConditions );
425+ $ this ->assertIsArray ($ updatedConditions ['productConditions ' ]);
426+
427+ if (!empty ($ updatedConditions ['productConditions ' ])) {
428+ $ this ->assertGreaterThanOrEqual (1 , count ($ updatedConditions ['productConditions ' ]));
429+ }
430+
431+ return $ discountId ;
432+ }
433+
434+ /**
435+ * @depends testUpdateDiscountConditionsWithProductRules
436+ *
437+ * @param int $discountId
438+ *
439+ * @return void
440+ */
441+ public function testGetUpdatedDiscountConditions (int $ discountId ): void
442+ {
443+ $ conditions = $ this ->getItem ('/discount/ ' . $ discountId . '/conditions ' , ['discount_read ' ]);
444+ $ this ->assertEquals ($ discountId , $ conditions ['discountId ' ]);
445+ $ this ->assertEquals (5 , $ conditions ['minimumProductsQuantity ' ]);
446+ $ this ->assertEquals ('50.00 ' , $ conditions ['minimumAmount ' ]);
447+ $ this ->assertEquals (1 , $ conditions ['minimumAmountCurrencyId ' ]);
448+ $ this ->assertEquals (true , $ conditions ['minimumAmountTaxIncluded ' ]);
449+ $ this ->assertEquals (false , $ conditions ['minimumAmountShippingIncluded ' ]);
235450 }
236451}
0 commit comments