feat(tickets): update TicketFilterFormService to use getForFilters method and enhance TicketFormService with historical data handling

This commit is contained in:
2026-08-31 10:57:25 -03:00
parent 1ca8fb20af
commit a71c80248c
3 changed files with 160 additions and 4 deletions

View File

@@ -7,12 +7,15 @@ use App\Domains\Attachable\Models\Attachment;
use App\Domains\Auth\Models\User;
use App\Domains\Authorization\Enums\RoleCode;
use App\Domains\Catalog\Models\CatalogItem;
use App\Domains\Catalog\Services\CatalogService;
use App\Domains\Menu\Models\Menu;
use App\Domains\Tenant\Models\Tenant;
use App\Domains\Ticket\Models\Ticket;
use Database\Seeders\AttributeSeeder;
use Database\Seeders\AuthorizationSeeder;
use Database\Seeders\FiestaFutbolInfantilProductSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
@@ -83,7 +86,8 @@ class AdminAppTicketFilterFormControllerTest extends TestCase
{
$tenant = $this->createFiestaFutbolInfantilTenant();
$this->grantTicketsMenu($tenant);
Sanctum::actingAs($this->createAdminAppUser($tenant));
$admin = $this->createAdminAppUser($tenant);
Sanctum::actingAs($admin);
$response = $this->getJson('/api/v1/adminapp/forms/tickets-filter')
->assertOk()
@@ -154,6 +158,56 @@ class AdminAppTicketFilterFormControllerTest extends TestCase
$this->assertContains('Cena', $schedules);
}
public function test_a_deleted_food_variant_remains_in_the_filter_when_a_ticket_references_it(): void
{
$tenant = $this->createFiestaFutbolInfantilTenant();
$this->grantTicketsMenu($tenant);
$admin = $this->createAdminAppUser($tenant);
Sanctum::actingAs($admin);
$food = CatalogItem::query()
->where('tenant_code', $tenant->codigo)
->where('slug', 'comida')
->with([
'itemAttributes.attribute.options',
'variants.definitions.itemAttribute.attribute.options',
'variants.eventDates',
'variants.eventDate',
])
->firstOrFail();
$historicalVariant = $food->variants->first(function ($variant): bool {
return $variant->selectedEventDates()->first()?->date->format('d/m') === '12/10'
&& $variant->selectionValues()->get('horario') === 'Cena';
});
$this->assertNotNull($historicalVariant);
Ticket::query()->create([
'tenant_code' => $tenant->codigo,
'ticket' => (string) Str::uuid(),
'user_id' => $admin->id,
'source_catalog_item_id' => $food->id,
'source_variant_id' => $historicalVariant->id,
]);
$catalogService = app(CatalogService::class);
foreach ($food->variants as $variant) {
$catalogService->deleteVariant($variant);
}
$this->assertTrue(CatalogItem::withTrashed()->findOrFail($food->id)->trashed());
$response = $this->getJson('/api/v1/adminapp/forms/tickets-filter')->assertOk();
$foodCategory = collect($response->json('data.fields.0.options'))->firstWhere('value', 'comidas');
$products = collect($foodCategory['children']['options']);
$this->assertCount(1, $products);
$this->assertSame('12/10', $products->first()['label']);
$this->assertSame(
['Cena'],
collect($products->first()['children']['options'])->pluck('label')->all(),
);
}
private function createFiestaFutbolInfantilTenant(): Tenant
{
$tenant = $this->createTenant('fiesta_futbol_infantil');