refactor(variant-selection): update variant options retrieval to use catalog item's variants and enhance response structure

This commit is contained in:
2026-08-18 10:45:40 -03:00
parent 9e74e21fb5
commit 1c2f6c4127
2 changed files with 9 additions and 2 deletions

View File

@@ -38,7 +38,7 @@ class VariantSelectionService
$matchingVariants = $variants $matchingVariants = $variants
->filter(fn (Variant $variant): bool => $this->matches($variant, $normalizedSelections)) ->filter(fn (Variant $variant): bool => $this->matches($variant, $normalizedSelections))
->values(); ->values();
$attributeKeys = $this->attributeKeys($catalogItem, $variants); $attributeKeys = $this->attributeKeys($catalogItem, $catalogItem->variants->values());
$isComplete = $attributeKeys->isNotEmpty() $isComplete = $attributeKeys->isNotEmpty()
&& $attributeKeys->every(fn (string $key): bool => array_key_exists($key, $normalizedSelections)); && $attributeKeys->every(fn (string $key): bool => array_key_exists($key, $normalizedSelections));
$resolvedVariant = $isComplete && $matchingVariants->count() === 1 $resolvedVariant = $isComplete && $matchingVariants->count() === 1
@@ -46,6 +46,10 @@ class VariantSelectionService
: null; : null;
return [ return [
'variants' => $variants
->map(fn (Variant $variant): array => $this->variantData($catalogItem, $variant))
->values()
->all(),
'selectors' => $this->selectors( 'selectors' => $this->selectors(
$catalogItem, $catalogItem,
$variants, $variants,

View File

@@ -342,7 +342,10 @@ class CatalogItemDetailControllerTest extends TestCase
->assertOk() ->assertOk()
->assertJsonPath('data.valid', true) ->assertJsonPath('data.valid', true)
->assertJsonPath('data.resolved_variant', null) ->assertJsonPath('data.resolved_variant', null)
->assertJsonMissingPath('data.variants') ->assertJsonCount(3, 'data.variants')
->assertJsonPath('data.variants.0.id', $first->id)
->assertJsonPath('data.variants.0.values.sector.value', 'A')
->assertJsonPath('data.variants.0.values.seat.value', '1')
->assertJsonCount(2, 'data.selectors') ->assertJsonCount(2, 'data.selectors')
->assertJsonPath('data.selectors.0.key', 'sector') ->assertJsonPath('data.selectors.0.key', 'sector')
->assertJsonCount(2, 'data.selectors.0.options') ->assertJsonCount(2, 'data.selectors.0.options')