120 lines
3.7 KiB
PHP
120 lines
3.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Models\Customer;
|
|
use App\Models\Order;
|
|
use App\Models\User;
|
|
use App\Policies\Frontend\OrderPolicy;
|
|
use App\Services\OrderService;
|
|
|
|
covers(OrderPolicy::class);
|
|
|
|
describe('OrderPolicy', function () {
|
|
describe('viewAnyOwn', function () {
|
|
it('returns false when user is a User instance', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
$user = \Mockery::mock(User::class);
|
|
|
|
// WHEN
|
|
$result = $policy->viewAnyOwn($user);
|
|
|
|
// THEN
|
|
expect($result)->toBeFalse();
|
|
});
|
|
|
|
it('returns true when user is a Customer instance', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
$customer = \Mockery::mock(Customer::class);
|
|
|
|
// WHEN
|
|
$result = $policy->viewAnyOwn($customer);
|
|
|
|
// THEN
|
|
expect($result)->toBeTrue();
|
|
});
|
|
|
|
it('returns true when user is null', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
|
|
// WHEN
|
|
$result = $policy->viewAnyOwn(null);
|
|
|
|
// THEN
|
|
expect($result)->toBeTrue();
|
|
});
|
|
});
|
|
|
|
describe('viewOwn', function () {
|
|
it('returns false when user is null', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
$order = \Mockery::mock(Order::class);
|
|
|
|
// WHEN
|
|
$result = $policy->viewOwn(null, $order);
|
|
|
|
// THEN
|
|
expect($result)->toBeFalse();
|
|
});
|
|
|
|
it('returns false when user is a User instance', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
$user = \Mockery::mock(User::class);
|
|
$order = \Mockery::mock(Order::class);
|
|
|
|
// WHEN
|
|
$result = $policy->viewOwn($user, $order);
|
|
|
|
// THEN
|
|
expect($result)->toBeFalse();
|
|
});
|
|
|
|
it('returns true when user is a Customer and owns the order', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
$customer = \Mockery::mock(Customer::class);
|
|
$order = \Mockery::mock(Order::class);
|
|
|
|
$orderService->shouldReceive('isOrderOwnedBy')
|
|
->once()
|
|
->with($order, $customer)
|
|
->andReturn(true);
|
|
|
|
// WHEN
|
|
$result = $policy->viewOwn($customer, $order);
|
|
|
|
// THEN
|
|
expect($result)->toBeTrue();
|
|
});
|
|
|
|
it('returns false when user is a Customer and does not own the order', function () {
|
|
// GIVEN
|
|
$orderService = \Mockery::mock(OrderService::class);
|
|
$policy = new OrderPolicy($orderService);
|
|
$customer = \Mockery::mock(Customer::class);
|
|
$order = \Mockery::mock(Order::class);
|
|
|
|
$orderService->shouldReceive('isOrderOwnedBy')
|
|
->once()
|
|
->with($order, $customer)
|
|
->andReturn(false);
|
|
|
|
// WHEN
|
|
$result = $policy->viewOwn($customer, $order);
|
|
|
|
// THEN
|
|
expect($result)->toBeFalse();
|
|
});
|
|
});
|
|
});
|