@@ -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,204 @@ 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+ * Create a discount specifically for update tests
254+ *
255+ * @return int
256+ */
257+ public function testCreateDiscountForUpdateTests (): int
258+ {
259+ $ discount = $ this ->createItem ('/discount ' , [
260+ 'type ' => self ::CART_LEVEL ,
261+ 'names ' => [
262+ 'en-US ' => 'Discount for update tests ' ,
263+ 'fr-FR ' => 'Discount pour tests de mise à jour ' ,
264+ ],
265+ ], ['discount_write ' ]);
266+ $ this ->assertArrayHasKey ('discountId ' , $ discount );
267+
268+ return $ discount ['discountId ' ];
269+ }
270+
271+ /**
272+ * @depends testCreateDiscountForUpdateTests
273+ *
274+ * @param int $discountId
275+ *
276+ * @return int
277+ */
278+ public function testPartialUpdateDiscount (int $ discountId ): int
279+ {
280+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
281+ 'description ' => 'Updated description ' ,
282+ ], ['discount_write ' ]);
283+ $ this ->assertEquals ('Updated description ' , $ updatedDiscount ['description ' ]);
284+
285+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
286+ 'code ' => 'NEWCODE123 ' ,
287+ ], ['discount_write ' ]);
288+ $ this ->assertEquals ('NEWCODE123 ' , $ updatedDiscount ['code ' ]);
289+
290+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
291+ 'active ' => true ,
292+ ], ['discount_write ' ]);
293+ $ this ->assertEquals (true , $ updatedDiscount ['active ' ]);
294+
295+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
296+ 'totalQuantity ' => 100 ,
297+ ], ['discount_write ' ]);
298+ $ this ->assertEquals (100 , $ updatedDiscount ['totalQuantity ' ]);
299+
300+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
301+ 'quantityPerUser ' => 5 ,
302+ ], ['discount_write ' ]);
303+ $ this ->assertEquals (5 , $ updatedDiscount ['quantityPerUser ' ]);
304+
305+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
306+ 'highlightInCart ' => true ,
307+ ], ['discount_write ' ]);
308+ $ this ->assertEquals (true , $ updatedDiscount ['highlightInCart ' ]);
309+
310+ $ updatedDiscount = $ this ->partialUpdateItem ('/discount/ ' . $ discountId , [
311+ 'names ' => [
312+ 'en-US ' => 'Updated EN name ' ,
313+ 'fr-FR ' => 'Updated FR name ' ,
314+ ],
315+ ], ['discount_write ' ]);
316+ $ this ->assertEquals ('Updated EN name ' , $ updatedDiscount ['names ' ]['en-US ' ]);
317+ $ this ->assertEquals ('Updated FR name ' , $ updatedDiscount ['names ' ]['fr-FR ' ]);
318+
319+ return $ discountId ;
320+ }
321+
322+ /**
323+ * @depends testPartialUpdateDiscount
324+ *
325+ * @param int $discountId
326+ *
327+ * @return int
328+ */
329+ public function testGetUpdatedDiscount (int $ discountId ): int
330+ {
331+ $ discount = $ this ->getItem ('/discount/ ' . $ discountId , ['discount_read ' ]);
332+ $ this ->assertEquals ('Updated description ' , $ discount ['description ' ]);
333+ $ this ->assertEquals ('NEWCODE123 ' , $ discount ['code ' ]);
334+ $ this ->assertEquals (true , $ discount ['active ' ]);
335+ $ this ->assertEquals (100 , $ discount ['totalQuantity ' ]);
336+ $ this ->assertEquals (5 , $ discount ['quantityPerUser ' ]);
337+ $ this ->assertEquals (true , $ discount ['highlightInCart ' ]);
338+ $ this ->assertEquals ('Updated EN name ' , $ discount ['names ' ]['en-US ' ]);
339+ $ this ->assertEquals ('Updated FR name ' , $ discount ['names ' ]['fr-FR ' ]);
340+
341+ return $ discountId ;
342+ }
343+
344+ /**
345+ * @depends testGetUpdatedDiscount
346+ *
347+ * @param int $discountId
348+ *
349+ * @return int
350+ */
351+ public function testGetDiscountConditions (int $ discountId ): int
352+ {
353+ $ conditions = $ this ->getItem ('/discount/ ' . $ discountId . '/conditions ' , ['discount_read ' ]);
354+ $ this ->assertArrayHasKey ('discountId ' , $ conditions );
355+ $ this ->assertEquals ($ discountId , $ conditions ['discountId ' ]);
356+
357+ return $ discountId ;
358+ }
359+
360+ /**
361+ * @depends testGetDiscountConditions
362+ *
363+ * @param int $discountId
364+ *
365+ * @return int
366+ */
367+ public function testUpdateDiscountConditions (int $ discountId ): int
368+ {
369+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
370+ 'minimumProductsQuantity ' => 5 ,
371+ ], ['discount_write ' ]);
372+ $ this ->assertEquals (5 , $ updatedConditions ['minimumProductsQuantity ' ]);
373+
374+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
375+ 'carrierIds ' => [1 , 2 ],
376+ ], ['discount_write ' ]);
377+ $ this ->assertIsArray ($ updatedConditions ['carrierIds ' ]);
378+ $ this ->assertCount (2 , $ updatedConditions ['carrierIds ' ]);
379+ $ this ->assertContains (1 , $ updatedConditions ['carrierIds ' ]);
380+ $ this ->assertContains (2 , $ updatedConditions ['carrierIds ' ]);
381+
382+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
383+ 'countryIds ' => [1 , 2 , 3 ],
384+ ], ['discount_write ' ]);
385+ $ this ->assertIsArray ($ updatedConditions ['countryIds ' ]);
386+ $ this ->assertCount (3 , $ updatedConditions ['countryIds ' ]);
387+ $ this ->assertContains (1 , $ updatedConditions ['countryIds ' ]);
388+ $ this ->assertContains (2 , $ updatedConditions ['countryIds ' ]);
389+ $ this ->assertContains (3 , $ updatedConditions ['countryIds ' ]);
390+
391+ return $ discountId ;
392+ }
393+
394+ /**
395+ * @depends testUpdateDiscountConditions
396+ *
397+ * @param int $discountId
398+ *
399+ * @return int
400+ */
401+ public function testUpdateDiscountConditionsWithProductRules (int $ discountId ): int
402+ {
403+ $ updatedConditions = $ this ->partialUpdateItem ('/discount/ ' . $ discountId . '/conditions ' , [
404+ 'productConditions ' => [
405+ [
406+ 'quantity ' => 3 ,
407+ 'type ' => 'products ' ,
408+ 'rules ' => [
409+ [
410+ 'type ' => 'products ' ,
411+ 'itemIds ' => [1 , 2 , 3 ],
412+ ],
413+ ],
414+ ],
415+ ],
416+ ], ['discount_write ' ]);
417+ $ this ->assertArrayHasKey ('productConditions ' , $ updatedConditions );
418+ $ this ->assertIsArray ($ updatedConditions ['productConditions ' ]);
419+
420+ if (!empty ($ updatedConditions ['productConditions ' ])) {
421+ $ this ->assertGreaterThanOrEqual (1 , count ($ updatedConditions ['productConditions ' ]));
422+ }
423+
424+ return $ discountId ;
425+ }
426+
427+ /**
428+ * @depends testUpdateDiscountConditionsWithProductRules
429+ *
430+ * @param int $discountId
431+ *
432+ * @return void
433+ */
434+ public function testGetUpdatedDiscountConditions (int $ discountId ): void
435+ {
436+ $ conditions = $ this ->getItem ('/discount/ ' . $ discountId . '/conditions ' , ['discount_read ' ]);
437+ $ this ->assertEquals ($ discountId , $ conditions ['discountId ' ]);
438+ $ this ->assertEquals (5 , $ conditions ['minimumProductsQuantity ' ]);
235439 }
236440}
0 commit comments