feat(event): add EventDateInfoFormatter to format event date messages and implement related tests
This commit is contained in:
@@ -326,6 +326,8 @@ class AdminAppEventControllerTest extends TestCase
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data.event.dates')
|
||||
->assertJsonPath('data.event.dates.0.id', $destination->id)
|
||||
->assertJsonPath('data.event.dates.0.info_text', '09/10/2027 se reprogramó para este día.')
|
||||
->assertJsonPath('data.event.dates.0.isCanceled', false)
|
||||
->assertJsonCount(1, 'data.event.date_changes')
|
||||
->assertJsonPath('data.event.date_changes.0.type', 'rescheduled')
|
||||
->assertJsonPath('data.event.date_changes.0.source_event_date_id', $original->id)
|
||||
@@ -483,8 +485,13 @@ class AdminAppEventControllerTest extends TestCase
|
||||
$this->assertSame('10 de Octubre 2027', $tenant->fresh()->event_date_text);
|
||||
$this->getJson('/api/tenants/bootstrap?dominio=acme.test&path=%2F')
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data.event.dates')
|
||||
->assertJsonPath('data.event.dates.0.id', $otherDate->id)
|
||||
->assertJsonCount(2, 'data.event.dates')
|
||||
->assertJsonPath('data.event.dates.0.id', $suspendedDate->id)
|
||||
->assertJsonPath('data.event.dates.0.info_text', 'Esta fecha fue cancelada.')
|
||||
->assertJsonPath('data.event.dates.0.isCanceled', true)
|
||||
->assertJsonPath('data.event.dates.1.id', $otherDate->id)
|
||||
->assertJsonPath('data.event.dates.1.info_text', null)
|
||||
->assertJsonPath('data.event.dates.1.isCanceled', false)
|
||||
->assertJsonCount(1, 'data.event.date_changes')
|
||||
->assertJsonPath('data.event.date_changes.0.type', 'suspended')
|
||||
->assertJsonPath('data.event.date_changes.0.source_event_date_id', $suspendedDate->id)
|
||||
|
||||
51
tests/Unit/Event/EventDateInfoFormatterTest.php
Normal file
51
tests/Unit/Event/EventDateInfoFormatterTest.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit\Event;
|
||||
|
||||
use App\Domains\Event\Enums\EventDateChangeType;
|
||||
use App\Domains\Event\Models\EventDate;
|
||||
use App\Domains\Event\Models\EventDateChange;
|
||||
use App\Domains\Event\Services\EventDateInfoFormatter;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Tests\TestCase;
|
||||
|
||||
class EventDateInfoFormatterTest extends TestCase
|
||||
{
|
||||
public function test_it_returns_null_for_a_date_without_changes(): void
|
||||
{
|
||||
$date = new EventDate;
|
||||
$date->id = 10;
|
||||
|
||||
$this->assertNull((new EventDateInfoFormatter)->format($date, collect()));
|
||||
}
|
||||
|
||||
public function test_it_formats_cancellation_and_source_dates_for_a_reschedule_destination(): void
|
||||
{
|
||||
$date = new EventDate;
|
||||
$date->id = 20;
|
||||
$date->suspended_at = Carbon::parse('2026-09-15');
|
||||
|
||||
$changes = collect([
|
||||
$this->reschedule(1, 20, '2026-10-09'),
|
||||
$this->reschedule(2, 20, '2026-10-10'),
|
||||
]);
|
||||
|
||||
$this->assertSame(
|
||||
'Esta fecha fue cancelada. 09/10/2026 y 10/10/2026 se reprogramaron para este día.',
|
||||
(new EventDateInfoFormatter)->format($date, $changes),
|
||||
);
|
||||
}
|
||||
|
||||
private function reschedule(int $sourceId, int $destinationId, string $previousDate): EventDateChange
|
||||
{
|
||||
$change = new EventDateChange;
|
||||
$change->setRawAttributes([
|
||||
'change_type' => EventDateChangeType::Rescheduled->value,
|
||||
'source_event_date_id' => $sourceId,
|
||||
'destination_event_date_id' => $destinationId,
|
||||
'previous_date' => $previousDate,
|
||||
]);
|
||||
|
||||
return $change;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user