feat(event): add effective date resolution for rescheduled events and update tests
This commit is contained in:
@@ -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}",
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -89,4 +89,21 @@ class EventModelsTest extends TestCase
|
||||
|
||||
$this->assertInstanceOf(EventDate::class, $tenant->eventDates()->getRelated());
|
||||
}
|
||||
|
||||
public function test_effective_date_follows_all_replacements_and_returns_null_when_suspended(): void
|
||||
{
|
||||
$original = new EventDate;
|
||||
$original->setRawAttributes(['id' => 1, 'rescheduled_to_event_date_id' => 2]);
|
||||
$middle = new EventDate;
|
||||
$middle->setRawAttributes(['id' => 2, 'rescheduled_to_event_date_id' => 3]);
|
||||
$latest = new EventDate;
|
||||
$latest->setRawAttributes(['id' => 3, 'date' => '2026-11-02']);
|
||||
$original->setRelation('rescheduledTo', $middle);
|
||||
$middle->setRelation('rescheduledTo', $latest);
|
||||
|
||||
$this->assertSame($latest, $original->effectiveDate());
|
||||
|
||||
$latest->suspended_at = '2026-11-01 12:00:00';
|
||||
$this->assertNull($original->effectiveDate());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user