feat(catalog): scope availability policies by subject
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Tests\Unit\Catalog;
|
||||
|
||||
use App\Domains\Catalog\Enums\AvailabilitySubject;
|
||||
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
||||
use App\Domains\Purchase\Services\UserPurchaseLimitService;
|
||||
use Mockery;
|
||||
@@ -15,15 +16,16 @@ class CatalogItemAllowanceServiceTest extends TestCase
|
||||
Mockery::mock(UserPurchaseLimitService::class),
|
||||
);
|
||||
|
||||
$availability = $service->availability(0, 0, 'variant');
|
||||
$availability = $service->availability(0, 0, AvailabilitySubject::Variant);
|
||||
|
||||
$this->assertSame('variant', $availability['subject']);
|
||||
$this->assertSame(0, $availability['maximum_quantity']);
|
||||
$this->assertSame(
|
||||
['user_quota_reached', 'out_of_stock'],
|
||||
array_column($availability['restrictions'], 'code'),
|
||||
);
|
||||
$this->assertSame(['variant', 'variant'], array_column($availability['restrictions'], 'scope'));
|
||||
$this->assertSame([
|
||||
'display' => false,
|
||||
'select_variant' => false,
|
||||
'change_quantity' => false,
|
||||
'add_to_cart' => false,
|
||||
@@ -39,11 +41,25 @@ class CatalogItemAllowanceServiceTest extends TestCase
|
||||
|
||||
$availability = $service->availability(5, 3);
|
||||
|
||||
$this->assertSame('product', $availability['subject']);
|
||||
$this->assertSame(3, $availability['maximum_quantity']);
|
||||
$this->assertSame([], $availability['restrictions']);
|
||||
$this->assertNotContains(false, $availability['capabilities'], true);
|
||||
}
|
||||
|
||||
public function test_reaching_the_user_quota_keeps_the_product_visible(): void
|
||||
{
|
||||
$service = new CatalogItemAllowanceService(
|
||||
Mockery::mock(UserPurchaseLimitService::class),
|
||||
);
|
||||
|
||||
$availability = $service->availability(5, 0);
|
||||
|
||||
$this->assertTrue($availability['capabilities']['display']);
|
||||
$this->assertFalse($availability['capabilities']['add_to_cart']);
|
||||
$this->assertSame('user_quota_reached', $availability['restrictions'][0]['code']);
|
||||
}
|
||||
|
||||
public function test_it_describes_a_requested_quantity_that_exceeds_the_remaining_quota(): void
|
||||
{
|
||||
$service = new CatalogItemAllowanceService(
|
||||
@@ -57,6 +73,7 @@ class CatalogItemAllowanceServiceTest extends TestCase
|
||||
'requested_quantity_exceeds_user_quota',
|
||||
$availability['restrictions'][0]['code'],
|
||||
);
|
||||
$this->assertTrue($availability['capabilities']['display']);
|
||||
$this->assertTrue($availability['capabilities']['change_quantity']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user