feat(event): add effective date resolution for rescheduled events and update tests

This commit is contained in:
2026-09-16 14:27:35 -03:00
parent 9aa0c1f3b9
commit f8a3296821
7 changed files with 96 additions and 25 deletions

View File

@@ -352,11 +352,12 @@ class NotificationMailServiceTest extends TestCase
Mail::assertSent(Mailable::class, function (Mailable $mail) use ($purchase, $firstTicket, $secondTicket): bool {
$mail->assertTo('checkout@example.com');
return $mail->subject === "Tu evento fue reprogramado - Compra #{$purchase->id}"
return $mail->subject === "Tu evento fue reprogramado - N° de Orden #{$purchase->id}"
&& str_contains($mail->render(), '09/10/2027')
&& str_contains($mail->render(), '20/10/2027')
&& str_contains($mail->render(), '#'.$firstTicket->id)
&& str_contains($mail->render(), '#'.$secondTicket->id);
&& str_contains($mail->render(), 'N° de Ticket #'.$firstTicket->id)
&& str_contains($mail->render(), 'N° de Ticket #'.$secondTicket->id)
&& str_contains($mail->render(), 'N° de Orden #'.$purchase->id);
});
$this->assertDatabaseHas('email_deliveries', [
'idempotency_key' => "event-date-rescheduled:10:20:{$purchase->id}",

View File

@@ -835,6 +835,50 @@ class AdminAppTicketControllerTest extends TestCase
->assertJsonPath('total_tickets', 1);
}
public function test_it_shows_the_effective_date_after_multiple_reschedules_and_suspension(): void
{
$tenant = $this->createTenant('fiesta_futbol_infantil');
$admin = $this->createAdminAppUser($tenant);
$this->grantTicketsMenu($tenant);
$this->seed([AttributeSeeder::class, FiestaFutbolInfantilProductSeeder::class]);
Sanctum::actingAs($admin);
$entry = CatalogItem::query()->where('tenant_code', $tenant->codigo)->where('slug', 'abono')->firstOrFail();
$variant = $entry->variants()->whereHas('eventDates')->firstOrFail();
$original = $variant->selectedEventDates()->firstOrFail();
$middle = $tenant->eventDates()->create([
'date' => '2026-11-01', 'time_start' => '09:00', 'time_end' => '18:00',
]);
$latest = $tenant->eventDates()->create([
'date' => '2026-11-02', 'time_start' => '09:00', 'time_end' => '18:00',
]);
$original->update(['rescheduled_to_event_date_id' => $middle->id]);
$middle->update(['rescheduled_to_event_date_id' => $latest->id]);
$ticket = $this->createTicket($tenant, $admin, [
'source_catalog_item_id' => $entry->id,
'source_variant_id' => $variant->id,
]);
$this->getJson('/api/v1/adminapp/tenant/tickets')
->assertOk()
->assertJsonPath('data.0.id', $ticket->id)
->assertJsonPath('data.0.values.date', '10/10, 11/10, 12/10, 02/11');
$latest->update(['suspended_at' => now()]);
$this->getJson('/api/v1/adminapp/tenant/tickets')
->assertOk()
->assertJsonPath('data.0.values.date', '10/10, 11/10, 12/10');
foreach ($variant->selectedEventDates()->skip(1) as $date) {
$date->update(['suspended_at' => now()]);
}
$this->getJson('/api/v1/adminapp/tenant/tickets')
->assertOk()
->assertJsonPath('data.0.values.date', '-');
}
public function test_it_exposes_and_filters_merchandise_color_and_size(): void
{
$tenant = $this->createTenant('fiesta_futbol_infantil');