group-8.x-1.x-dev/tests/src/Unit/GroupRelationshipAccessControlHandlerTest.php

tests/src/Unit/GroupRelationshipAccessControlHandlerTest.php
<?php

namespace Drupal\Tests\group\Unit;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\group\Entity\Access\GroupRelationshipAccessControlHandler;
use Drupal\group\Entity\GroupInterface;
use Drupal\group\Entity\GroupRelationshipInterface;
use Drupal\group\Entity\GroupRelationshipTypeInterface;
use Drupal\group\Entity\Storage\GroupRelationshipTypeStorageInterface;
use Drupal\group\Plugin\Group\Relation\GroupRelationTypeManagerInterface;
use Drupal\group\Plugin\Group\RelationHandler\AccessControlInterface;
use Prophecy\Argument;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Tests the relationship access control handler.
 *
 * @coversDefaultClass \Drupal\group\Entity\Access\GroupRelationshipAccessControlHandler
 * @group group
 */
class GroupRelationshipAccessControlHandlerTest extends UnitTestCase {

  /**
   * The account to test with.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy<\Drupal\Core\Session\AccountInterface>
   */
  protected $account;

  /**
   * The entity type manager.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy<\Drupal\Core\Entity\EntityTypeManagerInterface>
   */
  protected $entityTypeManager;

  /**
   * The group relation type manager.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy<\Drupal\group\Plugin\Group\Relation\GroupRelationTypeManagerInterface>
   */
  protected $groupRelationTypeManager;

  /**
   * The access control handler.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy<\Drupal\group\Entity\Access\GroupRelationshipAccessControlHandler>
   */
  protected $accessControlHandler;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->account = $this->prophesize(AccountInterface::class);
    $this->account->id()->willReturn(1986);

    $this->entityTypeManager = $this->prophesize(EntityTypeManagerInterface::class);
    $this->groupRelationTypeManager = $this->prophesize(GroupRelationTypeManagerInterface::class);
    $moduleHandler = $this->prophesize(ModuleHandlerInterface::class);
    $moduleHandler->invokeAll(Argument::cetera())->willReturn([]);

    $container = $this->prophesize(ContainerInterface::class);
    $container->get('entity_type.manager')->willReturn($this->entityTypeManager->reveal());
    $container->get('group_relation_type.manager')->willReturn($this->groupRelationTypeManager->reveal());
    $container->get('module_handler')->willReturn($moduleHandler->reveal());
    \Drupal::setContainer($container->reveal());

    $entityType = $this->prophesize(EntityTypeInterface::class);
    $this->accessControlHandler = GroupRelationshipAccessControlHandler::createInstance(
      $container->reveal(),
      $entityType->reveal()
    );
  }

  /**
   * Tests access.
   *
   * @covers ::checkAccess
   * @uses ::access
   */
  public function testCheckAccess() {
    $language = $this->prophesize(LanguageInterface::class);
    $language->getId()->willReturn('nl');

    $group_relationship = $this->prophesize(GroupRelationshipInterface::class);
    $group_relationship->id()->willReturn(1337);
    $group_relationship->uuid()->willReturn('baz');
    $group_relationship->language()->willReturn($language->reveal());
    $group_relationship->isDefaultRevision()->willReturn(TRUE);
    $group_relationship->getRevisionId()->willReturn(9001);
    $group_relationship->getEntityTypeId()->willReturn('group_content');
    $group_relationship->getPluginId()->willReturn('bar');

    $access_result = AccessResult::allowed();
    $access_control = $this->prophesize(AccessControlInterface::class);
    $access_control->relationshipAccess($group_relationship->reveal(), 'some_operation', $this->account->reveal(), TRUE)->shouldBeCalled()->willReturn($access_result);
    $this->groupRelationTypeManager->getAccessControlHandler('bar')->willReturn($access_control->reveal());

    $result = $this->accessControlHandler->access(
      $group_relationship->reveal(),
      'some_operation',
      $this->account->reveal()
    );
    $this->assertEquals($access_result->isAllowed(), $result);
  }

  /**
   * Tests create access.
   *
   * @covers ::checkCreateAccess
   * @uses ::createAccess
   */
  public function testCheckCreateAccess() {
    $group = $this->prophesize(GroupInterface::class);

    $relationship_type = $this->prophesize(GroupRelationshipTypeInterface::class);
    $relationship_type->getPluginId()->willReturn('bar');
    $relationship_type_storage = $this->prophesize(GroupRelationshipTypeStorageInterface::class);
    $relationship_type_storage->load('foo')->willReturn($relationship_type->reveal());
    $this->entityTypeManager->getStorage('group_content_type')->willReturn($relationship_type_storage->reveal());

    $access_result = AccessResult::allowed();
    $access_control = $this->prophesize(AccessControlInterface::class);
    $access_control->relationshipCreateAccess($group->reveal(), $this->account->reveal(), TRUE)->shouldBeCalled()->willReturn($access_result);
    $this->groupRelationTypeManager->getAccessControlHandler('bar')->willReturn($access_control->reveal());

    $result = $this->accessControlHandler->createAccess(
      'foo',
      $this->account->reveal(),
      ['group' => $group->reveal()]
    );
    $this->assertEquals($access_result->isAllowed(), $result);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc