forked from fa/breadcrumb-the-shire
refactor: align addressbook module to MintyPHP\Module\AddressBook namespace
Migrates addressbook service classes from core namespace (MintyPHP\Service\AddressBook\*) to proper module namespace (MintyPHP\Module\AddressBook\Service\*), consistent with the bookmarks module pattern. Moved to module: - AddressBookService → modules/addressbook/lib/Module/AddressBook/Service/ - AddressBookServicesFactory → modules/addressbook/lib/Module/AddressBook/Service/ - AddressBookServiceTest → modules/addressbook/tests/Module/AddressBook/Service/ - Pages, templates, CSS, JS all in module directory All module PHP classes now live under MintyPHP\Module\<Name>\*, enforced by ModuleStructureContractTest::testModuleClassesUseModuleNamespace. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
87
tests/Unit/Module/AddressBookAuthorizationPolicyTest.php
Normal file
87
tests/Unit/Module/AddressBookAuthorizationPolicyTest.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Unit\Module;
|
||||
|
||||
use MintyPHP\Module\AddressBook\AddressBookAuthorizationPolicy;
|
||||
use MintyPHP\Service\Access\AuthorizationPolicyInterface;
|
||||
use MintyPHP\Service\Access\PermissionService;
|
||||
use MintyPHP\Tests\Service\Access\AuthorizationPolicyTestSupport;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @covers \MintyPHP\Module\AddressBook\AddressBookAuthorizationPolicy
|
||||
*/
|
||||
final class AddressBookAuthorizationPolicyTest extends TestCase
|
||||
{
|
||||
use AuthorizationPolicyTestSupport;
|
||||
|
||||
public function testImplementsInterface(): void
|
||||
{
|
||||
$policy = new AddressBookAuthorizationPolicy($this->createMock(PermissionService::class));
|
||||
self::assertInstanceOf(AuthorizationPolicyInterface::class, $policy);
|
||||
}
|
||||
|
||||
public function testSupportsOwnAbility(): void
|
||||
{
|
||||
$policy = new AddressBookAuthorizationPolicy($this->createMock(PermissionService::class));
|
||||
self::assertTrue($policy->supports(AddressBookAuthorizationPolicy::ABILITY_VIEW));
|
||||
}
|
||||
|
||||
public function testDoesNotSupportOtherAbilities(): void
|
||||
{
|
||||
$policy = new AddressBookAuthorizationPolicy($this->createMock(PermissionService::class));
|
||||
self::assertFalse($policy->supports('ops.admin.jobs.view'));
|
||||
self::assertFalse($policy->supports(''));
|
||||
self::assertFalse($policy->supports('ops.address_book.view')); // old ability string
|
||||
}
|
||||
|
||||
public function testAllowedWithPermission(): void
|
||||
{
|
||||
$permissionService = $this->permissionGatewayAllowing([
|
||||
5 => [PermissionService::ADDRESS_BOOK_VIEW],
|
||||
]);
|
||||
|
||||
$policy = new AddressBookAuthorizationPolicy($permissionService);
|
||||
$decision = $policy->authorize(AddressBookAuthorizationPolicy::ABILITY_VIEW, [
|
||||
'actor_user_id' => 5,
|
||||
]);
|
||||
|
||||
self::assertTrue($decision->isAllowed());
|
||||
}
|
||||
|
||||
public function testDeniedWithoutPermission(): void
|
||||
{
|
||||
$permissionService = $this->permissionGatewayAllowing([5 => []]);
|
||||
|
||||
$policy = new AddressBookAuthorizationPolicy($permissionService);
|
||||
$decision = $policy->authorize(AddressBookAuthorizationPolicy::ABILITY_VIEW, [
|
||||
'actor_user_id' => 5,
|
||||
]);
|
||||
|
||||
$this->assertForbiddenDecision($decision);
|
||||
}
|
||||
|
||||
public function testDeniedWithZeroActorId(): void
|
||||
{
|
||||
$permissionService = $this->createMock(PermissionService::class);
|
||||
$permissionService->expects($this->never())->method('userHas');
|
||||
|
||||
$policy = new AddressBookAuthorizationPolicy($permissionService);
|
||||
$decision = $policy->authorize(AddressBookAuthorizationPolicy::ABILITY_VIEW, [
|
||||
'actor_user_id' => 0,
|
||||
]);
|
||||
|
||||
$this->assertForbiddenDecision($decision);
|
||||
}
|
||||
|
||||
public function testDeniedWithMissingActorId(): void
|
||||
{
|
||||
$permissionService = $this->createMock(PermissionService::class);
|
||||
$permissionService->expects($this->never())->method('userHas');
|
||||
|
||||
$policy = new AddressBookAuthorizationPolicy($permissionService);
|
||||
$decision = $policy->authorize(AddressBookAuthorizationPolicy::ABILITY_VIEW, []);
|
||||
|
||||
$this->assertForbiddenDecision($decision);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user