create(); $this->assertNotSame('', $team->name); } /** * Ensure teams can have many users attached. */ public function test_team_users_relationship_can_be_synced(): void { $team = Team::factory()->create(); $users = User::factory()->count(2)->create(); $team->users()->sync($users->modelKeys()); $this->assertCount(2, $team->fresh()->users); } /** * Ensure the team seeder creates starter teams with members. */ public function test_team_seeder_creates_expected_teams_and_members(): void { $this->seed(UserSeeder::class); $this->seed(TeamSeeder::class); $platformTeam = Team::query()->where('name', 'Platform Team')->firstOrFail(); $deliveryTeam = Team::query()->where('name', 'Delivery Team')->firstOrFail(); $this->assertGreaterThan(0, $platformTeam->users()->count()); $this->assertGreaterThan(0, $deliveryTeam->users()->count()); } /** * Ensure the project access seeder grants direct admin access and team permissions. */ public function test_project_access_seeder_creates_permission_assignments(): void { $this->seed([ UserSeeder::class, ProjectSeeder::class, TeamSeeder::class, ProjectAccessSeeder::class, ]); $coreProject = Project::query()->where('key', 'CORE')->firstOrFail(); $platformTeam = Team::query()->where('name', 'Platform Team')->firstOrFail(); $testUser = User::query()->where('email', 'test@example.com')->firstOrFail(); $this->assertDatabaseHas('permission_assignments', [ 'assignee_id' => $platformTeam->id, 'assignee_type' => $platformTeam->getMorphClass(), 'permission' => 'project:write', 'scope_id' => $coreProject->id, 'scope_type' => $coreProject->getMorphClass(), ]); $this->assertDatabaseHas('permission_assignments', [ 'assignee_id' => $testUser->id, 'assignee_type' => $testUser->getMorphClass(), 'permission' => 'team:manage', 'scope_id' => $platformTeam->id, 'scope_type' => $platformTeam->getMorphClass(), ]); } }