call(RoleSeeder::class); $org = Organisation::factory()->create([ 'name' => 'E2E Test Organisation', ]); $user = User::factory()->create([ 'email' => 'e2e@test.local', 'password' => Hash::make('password'), 'email_verified_at' => now(), ]); $org->users()->attach($user, ['role' => 'org_admin']); $event = Event::factory()->create([ 'organisation_id' => $org->id, 'name' => 'E2E Test Festival', 'start_date' => CarbonImmutable::now()->subDay(), 'end_date' => CarbonImmutable::now()->addDays(30), ]); $stage = Stage::factory()->create([ 'event_id' => $event->id, 'name' => 'E2E Stage', ]); StageDay::query()->create([ 'stage_id' => $stage->id, 'event_id' => $event->id, ]); $artist = Artist::factory()->create([ 'organisation_id' => $org->id, 'name' => 'E2E Artist', ]); $engagement = ArtistEngagement::factory()->create([ 'artist_id' => $artist->id, 'event_id' => $event->id, ]); $start = CarbonImmutable::now()->addDays(2)->setTime(20, 0); Performance::factory()->create([ 'engagement_id' => $engagement->id, 'event_id' => $event->id, 'stage_id' => $stage->id, 'lane' => 0, 'start_at' => $start, 'end_at' => $start->addHour(), 'version' => 0, ]); $performance = Performance::query() ->where('event_id', $event->id) ->where('stage_id', $stage->id) ->first(); // Write seeded IDs to a known location the Playwright e2e // fixture reads. Avoids artisan-stdout-parsing fragility. $fixturePath = storage_path('app/e2e-fixtures.json'); @mkdir(dirname($fixturePath), 0755, true); file_put_contents($fixturePath, json_encode([ 'user_email' => 'e2e@test.local', 'user_password' => 'password', 'organisation_id' => $org->id, 'event_id' => $event->id, 'stage_id' => $stage->id, 'performance_id' => $performance?->id, ], JSON_PRETTY_PRINT)); $this->command?->info("E2E fixtures written to {$fixturePath}"); } }