seed(RolesAndPermissionsSeeder::class); }); function makeAdmin(): User { $admin = User::factory()->create(['is_active' => true]); $admin->assignRole('admin'); return $admin; } test('admin create form persistiert scheduled_at und embargo_at', function () { /** @var TestCase $this */ Carbon::setTestNow('2026-06-01 10:00:00'); $admin = makeAdmin(); $company = Company::factory()->presseecho()->create(); $category = Category::factory()->create(); $this->actingAs($admin); LivewireVolt::test('admin.press-releases.create') ->set('title', 'Admin Scheduled PM') ->set('text', str_repeat('Inhalt eines Tests. ', 5)) ->set('companyId', $company->id) ->set('categoryId', $category->id) ->set('portal', $company->portal->value) ->set('publishMode', 'scheduled') ->set('scheduledAt', '2026-06-05T14:30') ->set('useEmbargo', true) ->set('embargoAt', '2026-06-10T08:00') ->call('save') ->assertHasNoErrors(); $pr = PressRelease::query()->latest('id')->firstOrFail(); expect($pr->scheduled_at?->toDateTimeString())->toBe('2026-06-05 14:30:00'); expect($pr->embargo_at?->toDateTimeString())->toBe('2026-06-10 08:00:00'); }); test('admin create form lehnt scheduled_at in der Vergangenheit ab', function () { /** @var TestCase $this */ Carbon::setTestNow('2026-06-01 10:00:00'); $admin = makeAdmin(); $company = Company::factory()->presseecho()->create(); $category = Category::factory()->create(); $this->actingAs($admin); LivewireVolt::test('admin.press-releases.create') ->set('title', 'Past Date PM') ->set('text', str_repeat('Inhalt eines Tests. ', 5)) ->set('companyId', $company->id) ->set('categoryId', $category->id) ->set('portal', $company->portal->value) ->set('publishMode', 'scheduled') ->set('scheduledAt', '2026-05-15T10:00') ->call('save') ->assertHasErrors(['scheduledAt']); }); test('admin edit hydriert scheduled_at und embargo_at', function () { /** @var TestCase $this */ Carbon::setTestNow('2026-06-01 10:00:00'); $admin = makeAdmin(); $this->actingAs($admin); $pr = PressRelease::factory()->create([ 'scheduled_at' => '2026-06-05 14:30:00', 'embargo_at' => '2026-06-10 08:00:00', ]); LivewireVolt::test('admin.press-releases.edit', ['id' => $pr->id]) ->assertSet('publishMode', 'scheduled') ->assertSet('scheduledAt', '2026-06-05T14:30') ->assertSet('useEmbargo', true) ->assertSet('embargoAt', '2026-06-10T08:00'); }); test('admin edit persistiert scheduled_at und embargo_at', function () { /** @var TestCase $this */ Carbon::setTestNow('2026-06-01 10:00:00'); $admin = makeAdmin(); $this->actingAs($admin); $pr = PressRelease::factory()->create([ 'scheduled_at' => null, 'embargo_at' => null, ]); LivewireVolt::test('admin.press-releases.edit', ['id' => $pr->id]) ->set('publishMode', 'scheduled') ->set('scheduledAt', '2026-06-08T09:00') ->set('useEmbargo', true) ->set('embargoAt', '2026-06-12T12:00') ->call('save') ->assertHasNoErrors(); $pr->refresh(); expect($pr->scheduled_at?->toDateTimeString())->toBe('2026-06-08 09:00:00'); expect($pr->embargo_at?->toDateTimeString())->toBe('2026-06-12 12:00:00'); }); test('admin publishMode now clears scheduled_at on save', function () { /** @var TestCase $this */ Carbon::setTestNow('2026-06-01 10:00:00'); $admin = makeAdmin(); $this->actingAs($admin); $pr = PressRelease::factory()->create([ 'scheduled_at' => '2026-06-05 14:30:00', 'embargo_at' => '2026-06-10 08:00:00', ]); LivewireVolt::test('admin.press-releases.edit', ['id' => $pr->id]) ->set('publishMode', 'now') ->set('useEmbargo', false) ->call('save') ->assertHasNoErrors(); $pr->refresh(); expect($pr->scheduled_at)->toBeNull(); expect($pr->embargo_at)->toBeNull(); });