test(catalog): cover composed availability restrictions
This commit is contained in:
@@ -3,41 +3,60 @@
|
||||
namespace Tests\Unit\Catalog;
|
||||
|
||||
use App\Domains\Catalog\Services\CatalogItemAllowanceService;
|
||||
use ReflectionClass;
|
||||
use App\Domains\Purchase\Services\UserPurchaseLimitService;
|
||||
use Mockery;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CatalogItemAllowanceServiceTest extends TestCase
|
||||
{
|
||||
private CatalogItemAllowanceService $service;
|
||||
|
||||
protected function setUp(): void
|
||||
public function test_it_composes_stock_and_quota_into_restrictions_and_capabilities(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->service = (new ReflectionClass(CatalogItemAllowanceService::class))
|
||||
->newInstanceWithoutConstructor();
|
||||
}
|
||||
|
||||
public function test_it_returns_the_user_quota_message_with_priority_over_stock(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'Alcanzaste el cupo máximo permitido para este producto.',
|
||||
$this->service->unavailableMessage(0, 0),
|
||||
$service = new CatalogItemAllowanceService(
|
||||
Mockery::mock(UserPurchaseLimitService::class),
|
||||
);
|
||||
}
|
||||
|
||||
public function test_it_returns_the_out_of_stock_message(): void
|
||||
{
|
||||
$availability = $service->availability(0, 0, 'variant');
|
||||
|
||||
$this->assertSame(0, $availability['maximum_quantity']);
|
||||
$this->assertSame(
|
||||
'Este producto no tiene stock disponible.',
|
||||
$this->service->unavailableMessage(0, null),
|
||||
['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_returns_no_message_when_the_item_is_available(): void
|
||||
public function test_it_keeps_all_capabilities_when_no_restriction_applies(): void
|
||||
{
|
||||
$this->assertNull($this->service->unavailableMessage(1, null));
|
||||
$this->assertNull($this->service->unavailableMessage(null, 1));
|
||||
$this->assertNull($this->service->unavailableMessage(null, null));
|
||||
$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']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user