71 lines
2.2 KiB
PHP
71 lines
2.2 KiB
PHP
<?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),
|
|
);
|
|
}
|
|
|
|
public function test_it_includes_sources_that_reach_the_destination_through_intermediate_dates(): void
|
|
{
|
|
$date = new EventDate;
|
|
$date->id = 30;
|
|
|
|
$changes = collect([
|
|
$this->reschedule(13, 24, '2026-10-13'),
|
|
$this->reschedule(22, 24, '2026-10-22'),
|
|
$this->reschedule(24, 30, '2026-10-24'),
|
|
$this->reschedule(29, 30, '2026-10-29'),
|
|
$this->reschedule(10, 11, '2026-10-10'),
|
|
]);
|
|
|
|
$this->assertSame(
|
|
'13/10/2026, 22/10/2026, 24/10/2026 y 29/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;
|
|
}
|
|
}
|