| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- use Webkul\CartRule\Models\CartRule;
- use function Pest\Laravel\deleteJson;
- use function Pest\Laravel\get;
- use function Pest\Laravel\postJson;
- use function Pest\Laravel\putJson;
- it('should returns the cart rule page', function () {
- // Act and Assert.
- $this->loginAsAdmin();
- get(route('admin.marketing.promotions.cart_rules.index'))
- ->assertOk()
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.index.title'))
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.index.create-btn'));
- });
- it('should returns the create page of cart rules', function () {
- // Act and Assert.
- $this->loginAsAdmin();
- get(route('admin.marketing.promotions.cart_rules.create'))
- ->assertOk()
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.create.title'))
- ->assertSeeText(trans('admin::app.account.edit.back-btn'))
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.create.save-btn'));
- });
- it('should fail the validation with errors when certain field not provided when store the cart rule', function () {
- // Act and Assert.
- $this->loginAsAdmin();
- postJson(route('admin.marketing.promotions.cart_rules.store'))
- ->assertJsonValidationErrorFor('name')
- ->assertJsonValidationErrorFor('channels')
- ->assertJsonValidationErrorFor('customer_groups')
- ->assertJsonValidationErrorFor('coupon_type')
- ->assertJsonValidationErrorFor('action_type')
- ->assertJsonValidationErrorFor('discount_amount')
- ->assertUnprocessable();
- });
- it('should store the newly created cart rule', function () {
- // Act and Assert.
- $this->loginAsAdmin();
- postJson(route('admin.marketing.promotions.cart_rules.store', [
- 'name' => $name = fake()->name(),
- 'description' => $description = substr(fake()->paragraph(), 0, 50),
- 'channels' => [
- 1,
- ],
- 'customer_groups' => [
- 1,
- 2,
- 3,
- ],
- 'discount_amount' => 0,
- 'coupon_type' => 0,
- 'action_type' => $actionType = fake()->randomElement(['by_percent', 'by_fixed', 'cart_fixed', 'buy_x_get_y']),
- 'starts_from' => '',
- 'ends_till' => '',
- ]))
- ->assertRedirect(route('admin.marketing.promotions.cart_rules.index'))
- ->isRedirection();
- $this->assertModelWise([
- CartRule::class => [
- [
- 'name' => $name,
- 'description' => $description,
- 'action_type' => $actionType,
- ],
- ],
- ]);
- });
- it('should copy the existing cart rule', function () {
- // Arrange.
- $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
- $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
- $cartRule->cart_rule_channels()->sync([1]);
- })->create();
- // Act and Assert.
- $this->loginAsAdmin();
- get(route('admin.marketing.promotions.cart_rules.copy', $cartRule->id))
- ->assertOk()
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.edit.title'));
- });
- it('should update the existing cart rule', function () {
- // Arrange.
- $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
- $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
- $cartRule->cart_rule_channels()->sync([1]);
- })->create();
- // Act and Assert.
- $this->loginAsAdmin();
- get(route('admin.marketing.promotions.cart_rules.edit', $cartRule->id))
- ->assertOk()
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.edit.title'));
- });
- it('should fail the validation with errors when certain field not provided when update the cart rule', function () {
- // Arrange.
- $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
- $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
- $cartRule->cart_rule_channels()->sync([1]);
- })->create();
- // Act and Assert.
- $this->loginAsAdmin();
- putJson(route('admin.marketing.promotions.cart_rules.update', $cartRule->id))
- ->assertJsonValidationErrorFor('name')
- ->assertJsonValidationErrorFor('channels')
- ->assertJsonValidationErrorFor('customer_groups')
- ->assertJsonValidationErrorFor('coupon_type')
- ->assertJsonValidationErrorFor('action_type')
- ->assertJsonValidationErrorFor('discount_amount')
- ->assertUnprocessable();
- });
- it('should update the cart rule', function () {
- // Arrange.
- $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
- $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
- $cartRule->cart_rule_channels()->sync([1]);
- })->create();
- // Act and Assert.
- $this->loginAsAdmin();
- putJson(route('admin.marketing.promotions.cart_rules.update', $cartRule->id), [
- 'name' => $name = fake()->name(),
- 'description' => $description = substr(substr(fake()->paragraph(), 0, 50), 0, 50),
- 'channels' => [
- 1,
- ],
- 'customer_groups' => [
- 1,
- 2,
- 3,
- ],
- 'discount_amount' => 0,
- 'coupon_type' => 0,
- 'action_type' => $actionType = fake()->randomElement(['by_percent', 'by_fixed', 'cart_fixed', 'buy_x_get_y']),
- 'starts_from' => '',
- 'ends_till' => '',
- ])
- ->assertRedirect(route('admin.marketing.promotions.cart_rules.index'))
- ->isRedirection();
- $this->assertModelWise([
- CartRule::class => [
- [
- 'name' => $name,
- 'description' => $description,
- 'action_type' => $actionType,
- ],
- ],
- ]);
- });
- it('should delete the cart rules', function () {
- // Arrange.
- $cartRule = CartRule::factory()->afterCreating(function (CartRule $cartRule) {
- $cartRule->cart_rule_customer_groups()->sync([1, 2, 3]);
- $cartRule->cart_rule_channels()->sync([1]);
- })->create();
- // Act and Assert.
- $this->loginAsAdmin();
- deleteJson(route('admin.marketing.promotions.cart_rules.delete', $cartRule->id))
- ->assertOk()
- ->assertSeeText(trans('admin::app.marketing.promotions.cart-rules.delete-success'));
- $this->assertDatabaseMissing('cart_rules', [
- 'id' => $cartRule->id,
- ]);
- });
|