Role::ADMIN, 2 => Role::TEAMER, 5 => Role::TEAMER]); self::assertSame([Role::TEAMER], $roles); self::assertSame(array_keys($roles), range(0, \count($roles) - 1)); } public function testAccountWithOnlyPrivilegedRolesFallsBackToCustomer(): void { self::assertSame([Role::CUSTOMER], Role::filterImportable([Role::ADMIN])); self::assertSame([Role::CUSTOMER], Role::filterImportable([])); } public function testAssignedOnlyDropsTheImplicitRoleUser(): void { $roles = Role::assignedOnly([Role::USER, Role::TEAMER, Role::GROUPS_ADMIN]); self::assertSame([Role::TEAMER, Role::GROUPS_ADMIN], $roles); // The value is JSON-encoded into the userinfo response and must not become an object. self::assertSame(array_keys($roles), range(0, \count($roles) - 1)); } public function testCombineKeepsEachHalfInItsOwnLane(): void { $roles = Role::combine([Role::TEAMER, Role::ADMIN], [Role::GROUPS_ADMIN, Role::TEAMER]); // The ADMIN from the synced half and the TEAMER from the privileged half are discarded. self::assertSame([Role::TEAMER, Role::GROUPS_ADMIN], $roles); self::assertSame(array_keys($roles), range(0, \count($roles) - 1)); } public function testCombineDropsTheImplicitRoleUser(): void { self::assertSame([Role::TEAMER], Role::combine([Role::USER, Role::TEAMER], [])); } public function testEveryRoleHasALabel(): void { self::assertSame(Role::ALL, array_keys(Role::labels())); } }