63 lines
2.2 KiB
PHP
63 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Catalog;
|
|
|
|
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
|
use App\Domains\Purchase\Services\UserPurchaseLimitService;
|
|
use Mockery;
|
|
use Tests\TestCase;
|
|
|
|
class CatalogItemAllowanceServiceTest extends TestCase
|
|
{
|
|
public function test_it_composes_stock_and_quota_into_restrictions_and_capabilities(): void
|
|
{
|
|
$service = new CatalogItemAllowanceService(
|
|
Mockery::mock(UserPurchaseLimitService::class),
|
|
);
|
|
|
|
$availability = $service->availability(0, 0, 'variant');
|
|
|
|
$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([
|
|
'select_variant' => false,
|
|
'change_quantity' => false,
|
|
'add_to_cart' => false,
|
|
'buy_now' => false,
|
|
], $availability['capabilities']);
|
|
}
|
|
|
|
public function test_it_keeps_all_capabilities_when_no_restriction_applies(): void
|
|
{
|
|
$service = new CatalogItemAllowanceService(
|
|
Mockery::mock(UserPurchaseLimitService::class),
|
|
);
|
|
|
|
$availability = $service->availability(5, 3);
|
|
|
|
$this->assertSame(3, $availability['maximum_quantity']);
|
|
$this->assertSame([], $availability['restrictions']);
|
|
$this->assertNotContains(false, $availability['capabilities'], true);
|
|
}
|
|
|
|
public function test_it_describes_a_requested_quantity_that_exceeds_the_remaining_quota(): void
|
|
{
|
|
$service = new CatalogItemAllowanceService(
|
|
Mockery::mock(UserPurchaseLimitService::class),
|
|
);
|
|
|
|
$availability = $service->purchaseLimitExceededAvailability(1, 'Solo podés agregar una unidad.');
|
|
|
|
$this->assertSame(1, $availability['maximum_quantity']);
|
|
$this->assertSame(
|
|
'requested_quantity_exceeds_user_quota',
|
|
$availability['restrictions'][0]['code'],
|
|
);
|
|
$this->assertTrue($availability['capabilities']['change_quantity']);
|
|
}
|
|
}
|