b2in/tests/Feature/CabinetInfoTabletTest.php
2026-04-10 17:18:17 +02:00

154 lines
4.7 KiB
PHP

<?php
use App\Livewire\Admin\Cms\CabinetInfoTablet;
use App\Models\CabinetTabletSetting;
use App\Models\User;
use Livewire\Livewire;
beforeEach(function () {
// Set the portal domain so route() resolves domain-scoped routes
$portalDomain = config('domains.domain_portal');
Livewire::withoutLazyLoading();
url()->forceRootUrl('https://'.$portalDomain);
});
test('cabinet info tablet page requires authentication', function () {
$response = $this->get(route('admin.cms.cabinet-tablet'));
$response->assertRedirect('/login');
});
test('cabinet info tablet page renders for authenticated users', function () {
$user = User::factory()->create();
$this->actingAs($user);
$response = $this->get(route('admin.cms.cabinet-tablet'));
$response->assertSuccessful();
$response->assertSeeLivewire(CabinetInfoTablet::class);
});
test('component mounts with existing settings', function () {
CabinetTabletSetting::factory()->create([
'store_status' => 'notice',
'notice_headline' => 'Sonderverkauf',
'contact_phone' => '0521 12345',
'hours_monday_open' => '10:00',
'hours_monday_close' => '18:00',
]);
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->assertSet('storeStatus', 'notice')
->assertSet('noticeHeadline', 'Sonderverkauf')
->assertSet('contactPhone', '0521 12345');
});
test('save persists settings to database', function () {
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('storeStatus', 'notice')
->set('noticeHeadline', 'Winterpause')
->set('noticeSubtext', 'Bis 02.01. geschlossen')
->set('contactPhone', '0521 99999')
->set('contactEmail', 'test@example.com')
->call('save')
->assertHasNoErrors();
$settings = CabinetTabletSetting::current();
expect($settings->store_status)->toBe('notice');
expect($settings->notice_headline)->toBe('Winterpause');
expect($settings->contact_phone)->toBe('0521 99999');
});
test('save validates store status', function () {
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('storeStatus', 'open') // 'open' is not a valid mode anymore
->call('save')
->assertHasErrors(['storeStatus']);
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('storeStatus', 'warning')
->call('save')
->assertHasNoErrors(['storeStatus']);
});
test('save validates override time format', function () {
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('overrideOpenToday', 'abc')
->call('save')
->assertHasErrors(['overrideOpenToday']);
});
test('save validates email format', function () {
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('contactEmail', 'not-an-email')
->call('save')
->assertHasErrors(['contactEmail']);
});
test('save validates headline max length', function () {
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('noticeHeadline', str_repeat('A', 41))
->call('save')
->assertHasErrors(['noticeHeadline']);
});
test('save allows empty opening hours for closed days', function () {
CabinetTabletSetting::factory()->create([
'hours_monday_open' => '10:00',
'hours_monday_close' => '18:00',
]);
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->set('hoursMondayOpen', '')
->set('hoursMondayClose', '')
->call('save')
->assertHasNoErrors();
$settings = CabinetTabletSetting::current();
expect($settings->hours_monday_open)->toBeNull();
expect($settings->hours_monday_close)->toBeNull();
});
test('clearOverrides resets override fields', function () {
CabinetTabletSetting::factory()->create([
'override_open_today' => '09:00',
'override_close_today' => '20:00',
]);
$user = User::factory()->create();
Livewire::actingAs($user)
->test(CabinetInfoTablet::class)
->assertSet('overrideOpenToday', '09:00')
->assertSet('overrideCloseToday', '20:00')
->call('clearOverrides')
->assertSet('overrideOpenToday', '')
->assertSet('overrideCloseToday', '');
$settings = CabinetTabletSetting::current();
expect($settings->override_open_today)->toBeNull();
expect($settings->override_close_today)->toBeNull();
});