feat(tickets): refine FFI variant filters
This commit is contained in:
@@ -73,7 +73,8 @@ class AdminAppTicketControllerTest extends TestCase
|
||||
->assertJsonPath('data.0.values.id', $ticket->id)
|
||||
->assertJsonPath('data.0.values.status', Ticket::STATUS_ACTIVE)
|
||||
->assertJsonMissingPath('data.0.values.ticket')
|
||||
->assertJsonMissingPath('data.0.values.date')
|
||||
->assertJsonPath('data.0.values.date', '-')
|
||||
->assertJsonPath('data.0.values.size', '-')
|
||||
->assertJsonMissingPath('data.0.date')
|
||||
->assertJsonPath('meta.total', 1);
|
||||
}
|
||||
@@ -278,6 +279,13 @@ class AdminAppTicketControllerTest extends TestCase
|
||||
&& $variant->selectionValues()->get('horario') === 'Almuerzo');
|
||||
$this->assertNotNull($dinner);
|
||||
$this->assertNotNull($lunch);
|
||||
$dinnerService = $dinner->selectionValues()->get('servicio');
|
||||
$otherDate = $tenant->eventDates()->where('id', '!=', $date->id)->firstOrFail();
|
||||
$otherDinner = $food->variants->first(fn (Variant $variant): bool => $variant
|
||||
->selectedEventDates()->contains('id', $otherDate->id)
|
||||
&& $variant->selectionValues()->get('horario') === 'Cena'
|
||||
&& $variant->selectionValues()->get('servicio') === $dinnerService);
|
||||
$this->assertNotNull($otherDinner);
|
||||
|
||||
$matchingPurchase = $this->createPurchase($tenant, $admin, '2026-08-20 10:00:00');
|
||||
$otherPurchase = $this->createPurchase($tenant, $admin, '2026-08-21 10:00:00');
|
||||
@@ -296,24 +304,75 @@ class AdminAppTicketControllerTest extends TestCase
|
||||
$this->createTicket($tenant, $admin, [
|
||||
'source_purchase_id' => $otherPurchase->id,
|
||||
'source_catalog_item_id' => $food->id,
|
||||
'source_variant_id' => $dinner->id,
|
||||
'source_variant_id' => $otherDinner->id,
|
||||
'used_at' => now(),
|
||||
]);
|
||||
|
||||
$this->getJson('/api/v1/adminapp/tenant/tickets?'.http_build_query([
|
||||
'category' => 'comidas',
|
||||
'product' => (string) $date->id,
|
||||
'type' => 'Cena',
|
||||
'date' => '2026-08-20',
|
||||
'product' => 'Cena',
|
||||
'type' => $dinnerService,
|
||||
'date' => $date->date->format('Y-m-d'),
|
||||
'status' => Ticket::STATUS_USED,
|
||||
]))
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data')
|
||||
->assertJsonPath('data.0.id', $matching->id)
|
||||
->assertJsonPath('data.0.values.product', 'Cena')
|
||||
->assertJsonPath('data.0.values.type', $dinnerService)
|
||||
->assertJsonPath('data.0.values.date', $date->date->format('d/m'))
|
||||
->assertJsonPath('scanned_tickets', 1)
|
||||
->assertJsonPath('total_tickets', 1);
|
||||
}
|
||||
|
||||
public function test_it_exposes_and_filters_merchandise_color_and_size(): void
|
||||
{
|
||||
$tenant = $this->createTenant('fiesta_futbol_infantil');
|
||||
$admin = $this->createAdminAppUser($tenant);
|
||||
$this->grantTicketsMenu($tenant);
|
||||
$this->seed([AttributeSeeder::class, FiestaFutbolInfantilProductSeeder::class]);
|
||||
Sanctum::actingAs($admin);
|
||||
|
||||
$merchandise = CatalogItem::query()
|
||||
->where('tenant_code', $tenant->codigo)
|
||||
->where('slug', 'camiseta')
|
||||
->with([
|
||||
'variants.definitions.itemAttribute.attribute.options',
|
||||
'variants.eventDates',
|
||||
'variants.eventDate',
|
||||
])
|
||||
->firstOrFail();
|
||||
$greenMedium = $merchandise->variants->first(fn (Variant $variant): bool => $variant->selectionValues()->get('color') === 'Verde'
|
||||
&& $variant->selectionValues()->get('talle') === 'M');
|
||||
$whiteMedium = $merchandise->variants->first(fn (Variant $variant): bool => $variant->selectionValues()->get('color') === 'Blanco'
|
||||
&& $variant->selectionValues()->get('talle') === 'M');
|
||||
$this->assertNotNull($greenMedium);
|
||||
$this->assertNotNull($whiteMedium);
|
||||
|
||||
$matching = $this->createTicket($tenant, $admin, [
|
||||
'source_catalog_item_id' => $merchandise->id,
|
||||
'source_variant_id' => $greenMedium->id,
|
||||
]);
|
||||
$this->createTicket($tenant, $admin, [
|
||||
'source_catalog_item_id' => $merchandise->id,
|
||||
'source_variant_id' => $whiteMedium->id,
|
||||
]);
|
||||
|
||||
$this->getJson('/api/v1/adminapp/tenant/tickets?'.http_build_query([
|
||||
'category' => 'merchandising',
|
||||
'product' => 'camiseta',
|
||||
'type' => 'Verde',
|
||||
'size' => 'M',
|
||||
]))
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data')
|
||||
->assertJsonPath('data.0.id', $matching->id)
|
||||
->assertJsonPath('data.0.values.product', 'Camiseta')
|
||||
->assertJsonPath('data.0.values.type', 'Verde')
|
||||
->assertJsonPath('data.0.values.date', '-')
|
||||
->assertJsonPath('data.0.values.size', 'M');
|
||||
}
|
||||
|
||||
public function test_it_filters_computed_active_and_expired_statuses(): void
|
||||
{
|
||||
$tenant = $this->createTenant('fiesta_futbol_infantil');
|
||||
|
||||
Reference in New Issue
Block a user