create(); $user = User::factory()->create(['email' => $customer->email]); return [$customer, $user]; } it('says what was ordered instead of counting it', function () { [$customer, $user] = cartCustomer(); Order::factory()->for($customer)->create(['type' => 'traffic', 'plan' => 'team', 'amount_cents' => 500, 'status' => 'pending']); Order::factory()->for($customer)->create(['type' => 'upgrade', 'plan' => 'business', 'amount_cents' => 39900, 'status' => 'pending']); Livewire\Livewire::actingAs($user)->test(Billing::class) ->assertSee(__('billing.cart.title')) ->assertSee(__('billing.cart.traffic', ['gb' => 1000])) ->assertSee(__('billing.cart.upgrade', ['plan' => 'Business'])) // …and what it all comes to. ->assertSee('404,00'); }); it('leaves paid orders out of the cart', function () { [$customer, $user] = cartCustomer(); Order::factory()->for($customer)->create(['type' => 'storage', 'amount_cents' => 1000, 'status' => 'paid']); Livewire\Livewire::actingAs($user)->test(Billing::class)->assertDontSee(__('billing.cart.title')); }); it('removes an entry the customer changed their mind about', function () { [$customer, $user] = cartCustomer(); $order = Order::factory()->for($customer)->create(['type' => 'storage', 'amount_cents' => 1000, 'status' => 'pending']); Livewire\Livewire::actingAs($user) ->test(ConfirmRemoveOrder::class, ['uuid' => $order->uuid]) ->assertSee(__('billing.cart.storage', ['gb' => 100])) ->call('remove'); expect(Order::query()->count())->toBe(0); }); it('will not let one customer remove another customer\'s order', function () { [, $user] = cartCustomer(); $stranger = Customer::factory()->create(); $order = Order::factory()->for($stranger)->create(['status' => 'pending']); // Modals are reachable without the page's guards, so this is the real check. Livewire\Livewire::actingAs($user) ->test(ConfirmRemoveOrder::class, ['uuid' => $order->uuid]) ->assertNotFound(); expect(Order::query()->whereKey($order->id)->exists())->toBeTrue(); }); it('refuses to remove an order that is already paid', function () { [$customer, $user] = cartCustomer(); $order = Order::factory()->for($customer)->create(['status' => 'paid']); Livewire\Livewire::actingAs($user) ->test(ConfirmRemoveOrder::class, ['uuid' => $order->uuid]) ->assertNotFound(); expect(Order::query()->whereKey($order->id)->exists())->toBeTrue(); });