feat(ticket): implement ticket generation policies and validity time management
- Added `ticket_generation_policy` column to `catalog_items` table to manage ticket generation strategies. - Created `ticket_validity_times` table to allow multiple validity times per ticket. - Introduced `validity_time_id` column in `event_dates` table to associate event dates with validity times. - Established `ticket_validity_groups` and `ticket_validity_group_times` tables to group validity times for tickets. - Updated seeder to set default ticket generation policy for specific tenant. - Enhanced tests to cover new functionality, including ticket generation based on event dates and validity times. - Refactored ticket validity checks to accommodate multiple validity times in a group.
This commit is contained in:
@@ -8,6 +8,7 @@ use App\Domains\Auth\Models\User;
|
||||
use App\Domains\Authorization\Enums\RoleCode;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use App\Domains\Tenant\Models\WebsiteType;
|
||||
use App\Domains\Ticket\Enums\ValidityTimeType;
|
||||
use Database\Seeders\AuthorizationSeeder;
|
||||
use Database\Seeders\SocialMediaSeeder;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
@@ -45,6 +46,7 @@ class AdminAppEventControllerTest extends TestCase
|
||||
->assertJsonPath('data.title', 'Festival Acme')
|
||||
->assertJsonPath('data.location', 'Predio Ferial, Rosario')
|
||||
->assertJsonPath('data.dates.0.date', '2026-10-09')
|
||||
->assertJsonPath('data.dates.0.validity_time.type', 'fixed_window')
|
||||
->assertJsonPath('data.dates.0.start_time', '09:00')
|
||||
->assertJsonPath('data.dates.0.end_time', '18:30')
|
||||
->assertJsonPath('data.contact.whatsapp_url', 'https://wa.me/5493415550101')
|
||||
@@ -64,6 +66,17 @@ class AdminAppEventControllerTest extends TestCase
|
||||
'time_start' => '09:00:00',
|
||||
'time_end' => '18:30:00',
|
||||
]);
|
||||
$eventDate = $tenant->eventDates()->with('validityTime')->sole();
|
||||
$this->assertSame($eventDate->validity_time_id, $response->json('data.dates.0.validity_time_id'));
|
||||
$this->assertSame(ValidityTimeType::FixedWindow, $eventDate->validityTime->type);
|
||||
$this->assertSame(
|
||||
'2026-10-09 09:00:00',
|
||||
$eventDate->validityTime->fixed_starts_at->format('Y-m-d H:i:s'),
|
||||
);
|
||||
$this->assertSame(
|
||||
'2026-10-09 18:30:00',
|
||||
$eventDate->validityTime->fixed_expires_at->format('Y-m-d H:i:s'),
|
||||
);
|
||||
$this->assertDatabaseHas('tenant_social_media', [
|
||||
'tenant_code' => $tenant->codigo,
|
||||
'social_media_code' => 'whatsapp',
|
||||
@@ -110,6 +123,8 @@ class AdminAppEventControllerTest extends TestCase
|
||||
'time_start' => '08:00',
|
||||
'time_end' => '12:00',
|
||||
]);
|
||||
$firstValidityTimeId = $firstDate->validity_time_id;
|
||||
$removedValidityTimeId = $removedDate->validity_time_id;
|
||||
$tenant->socialMedia()->attach('facebook', [
|
||||
'url' => 'https://facebook.com/old',
|
||||
'orden' => 2,
|
||||
@@ -135,9 +150,17 @@ class AdminAppEventControllerTest extends TestCase
|
||||
|
||||
$this->assertDatabaseHas('event_dates', [
|
||||
'id' => $firstDate->id,
|
||||
'validity_time_id' => $firstValidityTimeId,
|
||||
'date' => '2026-11-15',
|
||||
]);
|
||||
$this->assertDatabaseHas('validity_times', [
|
||||
'id' => $firstValidityTimeId,
|
||||
'type' => ValidityTimeType::FixedWindow->value,
|
||||
'fixed_starts_at' => '2026-11-15 10:00:00',
|
||||
'fixed_expires_at' => '2026-11-15 20:00:00',
|
||||
]);
|
||||
$this->assertDatabaseMissing('event_dates', ['id' => $removedDate->id]);
|
||||
$this->assertDatabaseMissing('validity_times', ['id' => $removedValidityTimeId]);
|
||||
$this->assertSame('15 de Noviembre 2026', $tenant->fresh()->event_date_text);
|
||||
$this->assertDatabaseMissing('tenant_social_media', [
|
||||
'tenant_code' => $tenant->codigo,
|
||||
|
||||
Reference in New Issue
Block a user