70 lines
2.2 KiB
PHP
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;
|
|
}
|
|
}
|