<?php
namespace Tests\Feature\Policies;
use App\Models\User;
use Esign\UnleashCommerce\Core\Models\Order;
use Tests\TestCase;
class OrderPolicyTest extends TestCase
{
public function test_user_can_view_their_own_orders()
{
// Arrange
$user = User::factory()->create();
$order = Order::factory()->for($user->customer)->create();
// Act
$can = $user->can('view', $order);
// Assert
$this->assertTrue($can);
}
public function test_user_cannot_view_other_customers_orders()
{
// Arrange
$userA = User::factory()->create();
$userB = User::factory()->create();
$orderByUserB = Order::factory()->for($userB->customer)->create();
// Act
$can = $userA->can('view', $orderByUserB);
// Assert
$this->assertFalse($can);
}
public function test_user_can_only_update_draft_orders()
{
// Arrange
$user = User::factory()->create();
$draftOrder = Order::factory()
->for($user->customer)
->state(['status' => 'draft'])
->create();
$completedOrder = Order::factory()
->for($user->customer)
->state(['status' => 'completed'])
->create();
// Act
$canUpdateDraft = $user->can('update', $draftOrder);
$canUpdateCompleted = $user->can('update', $completedOrder);
// Assert
$this->assertTrue($canUpdateDraft);
$this->assertFalse($canUpdateCompleted);
}
}