createSpaceMock(Space::VISIBILITY_ALL, true, false); $this->assertTrue(ProfileAccess::canView($space, null)); } public function testMembersOnlyBlocksGuestAndAllowsUser(): void { $space = $this->createSpaceMock(Space::VISIBILITY_REGISTERED_ONLY, true, false); $user = $this->createUserMock(false); $this->assertFalse(ProfileAccess::canView($space, null)); $this->assertTrue(ProfileAccess::canView($space, $user)); } public function testPrivateSpaceRequiresMembership(): void { $user = $this->createUserMock(false); $nonMemberSpace = $this->createSpaceMock(Space::VISIBILITY_NONE, true, false); $memberSpace = $this->createSpaceMock(Space::VISIBILITY_NONE, true, true); $this->assertFalse(ProfileAccess::canView($nonMemberSpace, $user)); $this->assertTrue(ProfileAccess::canView($memberSpace, $user)); } public function testDisabledSpaceDenied(): void { $space = $this->createSpaceMock(Space::VISIBILITY_ALL, false, true); $this->assertFalse(ProfileAccess::canView($space, $this->createUserMock(true))); } private function createSpaceMock(int $visibility, bool $enabled, bool $isMember): Space { $space = $this->getMockBuilder(Space::class) ->disableOriginalConstructor() ->onlyMethods(['isMember']) ->getMock(); $space->visibility = $visibility; $space->status = $enabled ? Space::STATUS_ENABLED : Space::STATUS_ARCHIVED; $space->method('isMember')->willReturn($isMember); return $space; } private function createUserMock(bool $isAdmin): User { $user = $this->getMockBuilder(User::class) ->disableOriginalConstructor() ->onlyMethods(['isSystemAdmin']) ->getMock(); $user->method('isSystemAdmin')->willReturn($isAdmin); return $user; } }