CartRuleTest.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. use Webkul\CartRule\Models\CartRule;
  3. use function Pest\Laravel\deleteJson;
  4. use function Pest\Laravel\get;
  5. use function Pest\Laravel\postJson;
  6. use function Pest\Laravel\putJson;
  7. it('should returns the cart rule page', function () {
  8. // Act and Assert.
  9. $this->loginAsAdmin();
  10. get(route('admin.marketing.promotions.cart_rules.index'))
  11. ->assertOk()
  12. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.index.title'))
  13. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.index.create-btn'));
  14. });
  15. it('should returns the create page of cart rules', function () {
  16. // Act and Assert.
  17. $this->loginAsAdmin();
  18. get(route('admin.marketing.promotions.cart_rules.create'))
  19. ->assertOk()
  20. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.create.title'))
  21. ->assertSeeText(trans('admin::app.account.edit.back-btn'))
  22. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.create.save-btn'));
  23. });
  24. it('should fail the validation with errors when certain field not provided when store the cart rule', function () {
  25. // Act and Assert.
  26. $this->loginAsAdmin();
  27. postJson(route('admin.marketing.promotions.cart_rules.store'))
  28. ->assertJsonValidationErrorFor('name')
  29. ->assertJsonValidationErrorFor('channels')
  30. ->assertJsonValidationErrorFor('customer_groups')
  31. ->assertJsonValidationErrorFor('coupon_type')
  32. ->assertJsonValidationErrorFor('action_type')
  33. ->assertJsonValidationErrorFor('discount_amount')
  34. ->assertUnprocessable();
  35. });
  36. it('should store the newly created cart rule', function () {
  37. // Act and Assert.
  38. $this->loginAsAdmin();
  39. postJson(route('admin.marketing.promotions.cart_rules.store', [
  40. 'name' => $name = fake()->name(),
  41. 'description' => $description = substr(fake()->paragraph(), 0, 50),
  42. 'channels' => [
  43. 1,
  44. ],
  45. 'customer_groups' => [
  46. 1,
  47. 2,
  48. 3,
  49. ],
  50. 'discount_amount' => 0,
  51. 'coupon_type' => 0,
  52. 'action_type' => $actionType = fake()->randomElement(['by_percent', 'by_fixed', 'cart_fixed', 'buy_x_get_y']),
  53. 'starts_from' => '',
  54. 'ends_till' => '',
  55. ]))
  56. ->assertRedirect(route('admin.marketing.promotions.cart_rules.index'))
  57. ->isRedirection();
  58. $this->assertModelWise([
  59. CartRule::class => [
  60. [
  61. 'name' => $name,
  62. 'description' => $description,
  63. 'action_type' => $actionType,
  64. ],
  65. ],
  66. ]);
  67. });
  68. it('should copy the existing cart rule', function () {
  69. // Arrange.
  70. $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
  71. $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
  72. $cartRule->cart_rule_channels()->sync([1]);
  73. })->create();
  74. // Act and Assert.
  75. $this->loginAsAdmin();
  76. get(route('admin.marketing.promotions.cart_rules.copy', $cartRule->id))
  77. ->assertOk()
  78. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.edit.title'));
  79. });
  80. it('should update the existing cart rule', function () {
  81. // Arrange.
  82. $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
  83. $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
  84. $cartRule->cart_rule_channels()->sync([1]);
  85. })->create();
  86. // Act and Assert.
  87. $this->loginAsAdmin();
  88. get(route('admin.marketing.promotions.cart_rules.edit', $cartRule->id))
  89. ->assertOk()
  90. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.edit.title'));
  91. });
  92. it('should fail the validation with errors when certain field not provided when update the cart rule', function () {
  93. // Arrange.
  94. $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
  95. $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
  96. $cartRule->cart_rule_channels()->sync([1]);
  97. })->create();
  98. // Act and Assert.
  99. $this->loginAsAdmin();
  100. putJson(route('admin.marketing.promotions.cart_rules.update', $cartRule->id))
  101. ->assertJsonValidationErrorFor('name')
  102. ->assertJsonValidationErrorFor('channels')
  103. ->assertJsonValidationErrorFor('customer_groups')
  104. ->assertJsonValidationErrorFor('coupon_type')
  105. ->assertJsonValidationErrorFor('action_type')
  106. ->assertJsonValidationErrorFor('discount_amount')
  107. ->assertUnprocessable();
  108. });
  109. it('should update the cart rule', function () {
  110. // Arrange.
  111. $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
  112. $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
  113. $cartRule->cart_rule_channels()->sync([1]);
  114. })->create();
  115. // Act and Assert.
  116. $this->loginAsAdmin();
  117. putJson(route('admin.marketing.promotions.cart_rules.update', $cartRule->id), [
  118. 'name' => $name = fake()->name(),
  119. 'description' => $description = substr(substr(fake()->paragraph(), 0, 50), 0, 50),
  120. 'channels' => [
  121. 1,
  122. ],
  123. 'customer_groups' => [
  124. 1,
  125. 2,
  126. 3,
  127. ],
  128. 'discount_amount' => 0,
  129. 'coupon_type' => 0,
  130. 'action_type' => $actionType = fake()->randomElement(['by_percent', 'by_fixed', 'cart_fixed', 'buy_x_get_y']),
  131. 'starts_from' => '',
  132. 'ends_till' => '',
  133. ])
  134. ->assertRedirect(route('admin.marketing.promotions.cart_rules.index'))
  135. ->isRedirection();
  136. $this->assertModelWise([
  137. CartRule::class => [
  138. [
  139. 'name' => $name,
  140. 'description' => $description,
  141. 'action_type' => $actionType,
  142. ],
  143. ],
  144. ]);
  145. });
  146. it('should delete the cart rules', function () {
  147. // Arrange.
  148. $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
  149. $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
  150. $cartRule->cart_rule_channels()->sync([1]);
  151. })->create();
  152. // Act and Assert.
  153. $this->loginAsAdmin();
  154. deleteJson(route('admin.marketing.promotions.cart_rules.delete', $cartRule->id))
  155. ->assertOk()
  156. ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.delete-success'));
  157. $this->assertDatabaseMissing('cart_rules', [
  158. 'id' => $cartRule->id,
  159. ]);
  160. });