feat(event): dispatch date change notifications

This commit is contained in:
2026-09-14 08:53:45 -03:00
parent 4f7ede1072
commit 205d77bc0b
5 changed files with 158 additions and 2 deletions

View File

@@ -9,6 +9,8 @@ use App\Domains\Authorization\Enums\RoleCode;
use App\Domains\Catalog\Models\CatalogItem;
use App\Domains\Catalog\Models\Inventory;
use App\Domains\Catalog\Models\Variant;
use App\Domains\Event\Events\EventDateRescheduled;
use App\Domains\Event\Events\EventDateSuspended;
use App\Domains\Tenant\Models\Tenant;
use App\Domains\Tenant\Models\WebsiteType;
use App\Domains\Ticket\Enums\ValidityTimeType;
@@ -16,6 +18,7 @@ use App\Domains\Ticket\Models\Ticket;
use Database\Seeders\AuthorizationSeeder;
use Database\Seeders\SocialMediaSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
@@ -230,6 +233,7 @@ class AdminAppEventControllerTest extends TestCase
public function test_rescheduling_reuses_an_existing_date_and_tickets_resolve_its_validity(): void
{
Event::fake([EventDateRescheduled::class]);
$tenant = $this->createActiveEvent($this->createTenant('acme'), 'Festival Acme');
$admin = $this->createAdminAppUser($tenant);
$original = $tenant->eventDates()->create([
@@ -253,6 +257,15 @@ class AdminAppEventControllerTest extends TestCase
->assertJsonPath('data.status', 'rescheduled')
->assertJsonPath('data.rescheduled_to_event_date_id', $destination->id);
Event::assertDispatched(EventDateRescheduled::class, function (EventDateRescheduled $event) use ($tenant, $original, $destination): bool {
return $event->tenantCode === $tenant->codigo
&& $event->sourceEventDateId === $original->id
&& $event->destinationEventDateId === $destination->id
&& $event->previousDate === '09/10/2027'
&& $event->newDate === '20/10/2027'
&& $event->purchaseTickets === [];
});
$this->assertDatabaseCount('event_dates', 2);
$this->assertSame('20 de Octubre 2027', $tenant->fresh()->event_date_text);
$this->getJson('/api/tenants/bootstrap?dominio=acme.test&path=%2F')
@@ -288,6 +301,7 @@ class AdminAppEventControllerTest extends TestCase
public function test_suspending_disables_only_tickets_without_another_usable_date(): void
{
Event::fake([EventDateSuspended::class]);
$tenant = $this->createActiveEvent($this->createTenant('acme'), 'Festival Acme');
$admin = $this->createAdminAppUser($tenant);
$suspendedDate = $tenant->eventDates()->create([
@@ -312,6 +326,13 @@ class AdminAppEventControllerTest extends TestCase
->assertJsonPath('data.status', 'suspended')
->assertJsonPath('data.suspended_at', fn ($value) => is_string($value));
Event::assertDispatched(EventDateSuspended::class, function (EventDateSuspended $event) use ($tenant, $suspendedDate): bool {
return $event->tenantCode === $tenant->codigo
&& $event->eventDateId === $suspendedDate->id
&& $event->date === '09/10/2027'
&& $event->purchaseTickets === [];
});
$this->assertNotNull($singleDateTicket->fresh()->disabled_at);
$this->assertNull($multipleDateTicket->fresh()->disabled_at);
$this->assertSame('10 de Octubre 2027', $tenant->fresh()->event_date_text);