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(); });