forgetCachedPermissions(); Role::create(['name' => 'Admin']); Role::create(['name' => 'Retailer']); }); test('admin can access partner edit page', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->setupCompleted()->create(); $this->actingAs($admin) ->get(route('admin.partners.edit', $partner->id)) ->assertSuccessful(); }); test('partner can access own profile edit page', function () { $partner = Partner::factory()->setupCompleted()->create(); $user = User::factory()->create(['partner_id' => $partner->id]); $user->assignRole('Retailer'); $this->actingAs($user) ->get(route('admin.partners.edit', $partner->id)) ->assertSuccessful(); }); test('partner cannot access other partner edit page', function () { $myPartner = Partner::factory()->setupCompleted()->create(); $otherPartner = Partner::factory()->setupCompleted()->create(); $user = User::factory()->create(['partner_id' => $myPartner->id]); $user->assignRole('Retailer'); $this->actingAs($user) ->get(route('admin.partners.edit', $otherPartner->id)) ->assertForbidden(); }); test('admin can update partner profile', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->create(['company_name' => 'Alter Name']); $this->actingAs($admin); Volt::test('admin.partners.edit', ['partnerId' => $partner->id]) ->set('companyName', 'Neuer Firmenname') ->set('city', 'Herford') ->set('storyText', 'Seit 1985 sind wir für Sie da.') ->set('foundedYear', 1985) ->set('specialtiesInput', 'Sofas, Küchen, Betten') ->call('save') ->assertHasNoErrors(); $partner->refresh(); expect($partner->company_name)->toBe('Neuer Firmenname'); expect($partner->city)->toBe('Herford'); expect($partner->story_text)->toBe('Seit 1985 sind wir für Sie da.'); expect($partner->founded_year)->toBe(1985); expect($partner->specialties)->toContain('Sofas'); }); test('partner profile update validates required company name', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->create(); $this->actingAs($admin); Volt::test('admin.partners.edit', ['partnerId' => $partner->id]) ->set('companyName', '') ->call('save') ->assertHasErrors(['companyName' => 'required']); }); test('partner profile update validates url format', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->create(); $this->actingAs($admin); Volt::test('admin.partners.edit', ['partnerId' => $partner->id]) ->set('companyName', 'Test GmbH') ->set('website', 'kein-url') ->call('save') ->assertHasErrors(['website' => 'url']); }); test('partner profile saves opening hours', function () { $admin = User::factory()->create(); $admin->assignRole('Admin'); $partner = Partner::factory()->create(); $this->actingAs($admin); Volt::test('admin.partners.edit', ['partnerId' => $partner->id]) ->set('companyName', $partner->company_name) ->set('openingHours.monday.open', '08:00') ->set('openingHours.monday.close', '20:00') ->set('openingHours.sunday.closed', true) ->call('save') ->assertHasNoErrors(); $partner->refresh(); expect($partner->opening_hours['monday']['open'])->toBe('08:00'); expect($partner->opening_hours['sunday']['closed'])->toBeTrue(); }); test('partner can update own hub assignment', function () { $hub = Hub::factory()->create(); $partner = Partner::factory()->create(); $user = User::factory()->create(['partner_id' => $partner->id]); $user->assignRole('Retailer'); $this->actingAs($user); Volt::test('admin.partners.edit', ['partnerId' => $partner->id]) ->set('companyName', $partner->company_name) ->set('hubId', $hub->id) ->call('save') ->assertHasNoErrors(); $partner->refresh(); expect($partner->hub_id)->toBe($hub->id); });