seed(RolesAndPermissionsSeeder::class); }); test('a company member can view and manage press releases authored by a colleague', function () { /** @var TestCase $this */ $owner = User::factory()->create(['is_active' => true]); $owner->assignRole('customer'); $member = User::factory()->create(['is_active' => true]); $member->assignRole('customer'); $company = Company::factory()->presseecho()->create(['owner_user_id' => $owner->id]); $member->companies()->attach($company->id, ['role' => 'member']); $pressRelease = PressRelease::factory()->forPortal(Portal::Presseecho)->create([ 'user_id' => $owner->id, 'company_id' => $company->id, 'status' => 'draft', ]); // Firmen-Scope: Mitglied darf, obwohl nicht Autor. expect($member->can('view', $pressRelease))->toBeTrue(); expect($member->can('update', $pressRelease))->toBeTrue(); expect($member->can('submitForReview', $pressRelease))->toBeTrue(); expect($member->accessibleCompanyIds())->toContain($company->id); }); test('a user outside the company still cannot access its press releases', function () { /** @var TestCase $this */ $owner = User::factory()->create(['is_active' => true]); $owner->assignRole('customer'); $outsider = User::factory()->create(['is_active' => true]); $outsider->assignRole('customer'); $company = Company::factory()->presseecho()->create(['owner_user_id' => $owner->id]); $pressRelease = PressRelease::factory()->forPortal(Portal::Presseecho)->create([ 'user_id' => $owner->id, 'company_id' => $company->id, 'status' => 'draft', ]); expect($outsider->can('view', $pressRelease))->toBeFalse(); expect($outsider->can('update', $pressRelease))->toBeFalse(); }); test('the me press release detail route resolves for a company member', function () { /** @var TestCase $this */ $owner = User::factory()->create(['is_active' => true]); $owner->assignRole('customer'); $member = User::factory()->create(['is_active' => true]); $member->assignRole('customer'); $company = Company::factory()->presseecho()->create(['owner_user_id' => $owner->id]); $member->companies()->attach($company->id, ['role' => 'member']); $pressRelease = PressRelease::factory()->forPortal(Portal::Presseecho)->create([ 'user_id' => $owner->id, 'company_id' => $company->id, 'title' => 'Firmen-PM eines Kollegen', 'status' => 'draft', ]); $this->actingAs($member) ->get(route('me.press-releases.show', $pressRelease->id)) ->assertSuccessful() ->assertSee('Firmen-PM eines Kollegen'); });