Files
space_profiles/tests/codeception/unit/ProfileAccessTest.php
2026-04-04 13:11:50 -04:00

70 lines
2.2 KiB
PHP

<?php
namespace space_profiles;
use humhub\modules\space\models\Space;
use humhub\modules\space_profiles\helpers\ProfileAccess;
use humhub\modules\user\models\User;
class ProfileAccessTest extends UnitTester
{
public function testPublicSpaceAllowsGuest(): void
{
$space = $this->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;
}
}