Skip to content

Commit 69185ef

Browse files
committed
Add tests
1 parent 147ca93 commit 69185ef

File tree

1 file changed

+204
-0
lines changed

1 file changed

+204
-0
lines changed

tests/Integration/ApiPlatform/DiscountEndpointTest.php

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)