diff --git a/database/seeders/DemoEventSeeder.php b/database/seeders/DemoEventSeeder.php index 7fbe4cd1..0d707e12 100644 --- a/database/seeders/DemoEventSeeder.php +++ b/database/seeders/DemoEventSeeder.php @@ -43,6 +43,7 @@ class DemoEventSeeder extends Seeder 'package' => $standardPackage, 'token_label' => 'Demo QR', 'token_value' => 'W2E3sbt7yclzpkAwNSARHYTVN1sPLBad8hfUjLVHmjkUviPd', + 'join_token_expires_at' => Carbon::now()->addYears(20), 'collection_slugs' => ['wedding-classics-2025'], 'task_slug_prefix' => 'wedding-', 'branding' => [ @@ -95,7 +96,12 @@ class DemoEventSeeder extends Seeder ] ); - $this->ensureJoinToken($event, $config['token_label'], $config['token_value'] ?? null); + $this->ensureJoinToken( + $event, + $config['token_label'], + $config['token_value'] ?? null, + $config['join_token_expires_at'] ?? null + ); $this->attachEventPackage( event: $event, @@ -110,7 +116,7 @@ class DemoEventSeeder extends Seeder } } - private function ensureJoinToken(Event $event, string $label, ?string $token = null): void + private function ensureJoinToken(Event $event, string $label, ?string $token = null, ?Carbon $expiresAt = null): void { if ($event->joinTokens()->exists()) { $existingToken = $event->joinTokens()->latest('id')->first(); @@ -121,6 +127,12 @@ class DemoEventSeeder extends Seeder $existingToken->metadata = $metadata; $existingToken->save(); } + + if ($expiresAt && (! $existingToken->expires_at || $existingToken->expires_at->lt($expiresAt))) { + $existingToken->forceFill([ + 'expires_at' => $expiresAt, + ])->save(); + } } return; @@ -137,6 +149,10 @@ class DemoEventSeeder extends Seeder 'metadata' => $metadata, ]; + if ($expiresAt) { + $attributes['expires_at'] = $expiresAt; + } + $tokenModel = app(EventJoinTokenService::class)->createToken($event, $attributes); if ($token) { diff --git a/tests/Feature/DemoEventSeederTest.php b/tests/Feature/DemoEventSeederTest.php new file mode 100644 index 00000000..b463d948 --- /dev/null +++ b/tests/Feature/DemoEventSeederTest.php @@ -0,0 +1,65 @@ +create(['slug' => 'demo-tenant']); + + EventType::factory()->create([ + 'slug' => 'wedding', + 'name' => ['de' => 'Hochzeit', 'en' => 'Wedding'], + ]); + EventType::factory()->create([ + 'slug' => 'corporate', + 'name' => ['de' => 'Business', 'en' => 'Corporate'], + ]); + + Package::factory()->endcustomer()->create([ + 'slug' => 'standard', + 'name' => 'Standard', + ]); + Package::factory()->endcustomer()->create([ + 'slug' => 'premium', + 'name' => 'Premium', + ]); + + $event = Event::factory()->create([ + 'tenant_id' => $tenant->id, + 'event_type_id' => EventType::where('slug', 'wedding')->value('id'), + 'slug' => 'demo-wedding-2025', + 'name' => ['de' => 'Demo', 'en' => 'Demo'], + 'date' => $now->copy()->addMonth(), + ]); + + $token = $event->joinTokens()->latest('id')->first(); + $token->forceFill(['expires_at' => $now->copy()->subDay()])->save(); + + $this->seed(DemoEventSeeder::class); + + $event->refresh(); + $token = $event->joinTokens()->latest('id')->first(); + + $expectedExpiry = $now->copy()->addYears(20); + + $this->assertTrue($token->expires_at->equalTo($expectedExpiry)); + + Carbon::setTestNow(); + } +}