Files
shopit-back/tests/Unit/Catalog/CatalogItemAllowanceServiceTest.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']);
}
}