You are here

class CurrencyLocaleAccessControlHandlerTest in Currency 8.3

@coversDefaultClass Drupal\currency\Entity\CurrencyLocale\CurrencyLocaleAccessControlHandler

@group Currency

Hierarchy

Expanded class hierarchy of CurrencyLocaleAccessControlHandlerTest

File

tests/src/Unit/Entity/CurrencyLocale/CurrencyLocaleAccessControlHandlerTest.php, line 21

Namespace

Drupal\Tests\currency\Unit\Entity\CurrencyLocale
View source
class CurrencyLocaleAccessControlHandlerTest extends UnitTestCase {

  /**
   * The cache contexts manager.
   *
   * @var \Drupal\Core\Cache\Context\CacheContextsManager|\PHPUnit_Framework_MockObject_MockObject
   */
  protected $cacheContextsManager;

  /**
   * Information about the entity type.
   *
   * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject
   */
  protected $entityType;

  /**
   * The module handler.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
   */
  protected $moduleHandler;

  /**
   * The class under test.
   *
   * @var \Drupal\currency\Entity\CurrencyLocale\CurrencyLocaleAccessControlHandler
   */
  protected $sut;

  /**
   * {@inheritdoc}
   */
  public function setUp() : void {
    parent::setUp();
    $this->cacheContextsManager = $this
      ->getMockBuilder(CacheContextsManager::class)
      ->disableOriginalConstructor()
      ->getMock();
    $this->cacheContextsManager
      ->expects($this
      ->any())
      ->method('assertValidTokens')
      ->willReturn(TRUE);
    $container = new Container();
    $container
      ->set('cache_contexts_manager', $this->cacheContextsManager);
    \Drupal::setContainer($container);
    $this->entityType = $this
      ->createMock(EntityTypeInterface::class);
    $this->moduleHandler = $this
      ->createMock(ModuleHandlerInterface::class);
    $this->sut = new CurrencyLocaleAccessControlHandler($this->entityType, $this->moduleHandler);
  }

  /**
   * @covers ::createInstance
   * @covers ::__construct
   */
  function testCreateInstance() {
    $container = $this
      ->createMock(ContainerInterface::class);
    $container
      ->expects($this
      ->once())
      ->method('get')
      ->with('module_handler')
      ->willReturn($this->moduleHandler);
    $sut = CurrencyLocaleAccessControlHandler::createInstance($container, $this->entityType);
    $this
      ->assertInstanceOf(CurrencyLocaleAccessControlHandler::class, $sut);
  }

  /**
   * @covers ::checkAccess
   *
   * @dataProvider providerTestCheckAccess
   */
  function testCheckAccess($expected_value, $operation, $has_permission, $permission, $locale = NULL) {
    $account = $this
      ->createMock(AccountInterface::class);
    $account
      ->expects($this
      ->any())
      ->method('hasPermission')
      ->with($permission)
      ->willReturn((bool) $has_permission);
    $currency_locale = $this
      ->createMock(CurrencyLocaleInterface::class);
    $currency_locale
      ->expects($this
      ->any())
      ->method('getLocale')
      ->willReturn($locale);
    $this->moduleHandler
      ->expects($this
      ->any())
      ->method('invokeAll')
      ->willReturn([]);
    $method = new \ReflectionMethod($this->sut, 'checkAccess');
    $method
      ->setAccessible(TRUE);
    $this
      ->assertSame($expected_value, $method
      ->invoke($this->sut, $currency_locale, $operation, $account)
      ->isAllowed());
  }

  /**
   * Provides data to self::testCheckAccess().
   */
  function providerTestCheckAccess() {
    return array(
      // The default currency locale cannot be deleted, even with permission.
      array(
        FALSE,
        'delete',
        TRUE,
        'currency.currency_locale.delete',
        LocaleResolverInterface::DEFAULT_LOCALE,
      ),
      // Any non-default currency locale can be deleted with permission.
      array(
        TRUE,
        'delete',
        TRUE,
        'currency.currency_locale.delete',
        $this
          ->randomMachineName(),
      ),
      // No currency locale can be deleted without permission.
      array(
        FALSE,
        'delete',
        FALSE,
        'currency.currency_locale.delete',
        $this
          ->randomMachineName(),
      ),
      // Any currency locale can be updated with permission.
      array(
        TRUE,
        'update',
        TRUE,
        'currency.currency_locale.update',
        $this
          ->randomMachineName(),
      ),
      // No currency locale can be updated without permission.
      array(
        FALSE,
        'update',
        FALSE,
        'currency.currency_locale.update',
        $this
          ->randomMachineName(),
      ),
    );
  }

  /**
   * @covers ::checkCreateAccess
   *
   * @dataProvider providerTestCheckCreateAccess
   */
  function testCheckCreateAccess($expected_value, $has_permission) {
    $account = $this
      ->createMock(AccountInterface::class);
    $account
      ->expects($this
      ->once())
      ->method('hasPermission')
      ->with('currency.currency_locale.create')
      ->willReturn($has_permission);
    $context = array();
    $method = new \ReflectionMethod($this->sut, 'checkCreateAccess');
    $method
      ->setAccessible(TRUE);
    $this
      ->assertSame($expected_value, $method
      ->invoke($this->sut, $account, $context)
      ->isAllowed());
  }

  /**
   * Provides data to self::testCheckCreateAccess().
   */
  function providerTestCheckCreateAccess() {
    return array(
      array(
        TRUE,
        TRUE,
      ),
      array(
        FALSE,
        FALSE,
      ),
    );
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CurrencyLocaleAccessControlHandlerTest::$cacheContextsManager protected property The cache contexts manager.
CurrencyLocaleAccessControlHandlerTest::$entityType protected property Information about the entity type.
CurrencyLocaleAccessControlHandlerTest::$moduleHandler protected property The module handler.
CurrencyLocaleAccessControlHandlerTest::$sut protected property The class under test.
CurrencyLocaleAccessControlHandlerTest::providerTestCheckAccess function Provides data to self::testCheckAccess().
CurrencyLocaleAccessControlHandlerTest::providerTestCheckCreateAccess function Provides data to self::testCheckCreateAccess().
CurrencyLocaleAccessControlHandlerTest::setUp public function Overrides UnitTestCase::setUp
CurrencyLocaleAccessControlHandlerTest::testCheckAccess function @covers ::checkAccess
CurrencyLocaleAccessControlHandlerTest::testCheckCreateAccess function @covers ::checkCreateAccess
CurrencyLocaleAccessControlHandlerTest::testCreateInstance function @covers ::createInstance @covers ::__construct
PhpunitCompatibilityTrait::getMock Deprecated public function Returns a mock object for the specified class using the available method.
PhpunitCompatibilityTrait::setExpectedException Deprecated public function Compatibility layer for PHPUnit 6 to support PHPUnit 4 code.
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::assertArrayEquals protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getBlockMockWithMachineName Deprecated protected function Mocks a block with a block plugin. 1
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.