function ContentTranslationManageAccessCheckTest::testCreateAccess

Same name in other branches
  1. 9 core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php \Drupal\Tests\content_translation\Unit\Access\ContentTranslationManageAccessCheckTest::testCreateAccess()
  2. 8.9.x core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php \Drupal\Tests\content_translation\Unit\Access\ContentTranslationManageAccessCheckTest::testCreateAccess()
  3. 10 core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php \Drupal\Tests\content_translation\Unit\Access\ContentTranslationManageAccessCheckTest::testCreateAccess()

Tests the create access method.

@covers ::access

File

core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php, line 54

Class

ContentTranslationManageAccessCheckTest
Tests for content translation manage check.

Namespace

Drupal\Tests\content_translation\Unit\Access

Code

public function testCreateAccess() : void {
    // Set the mock translation handler.
    $translation_handler = $this->createMock('\\Drupal\\content_translation\\ContentTranslationHandlerInterface');
    $translation_handler->expects($this->once())
        ->method('getTranslationAccess')
        ->willReturn(AccessResult::allowed());
    $entity_type_manager = $this->createMock(EntityTypeManagerInterface::class);
    $entity_type_manager->expects($this->once())
        ->method('getHandler')
        ->withAnyParameters()
        ->willReturn($translation_handler);
    // Set our source and target languages.
    $source = 'en';
    $target = 'it';
    // Set the mock language manager.
    $language_manager = $this->createMock('Drupal\\Core\\Language\\LanguageManagerInterface');
    $language_manager->expects($this->once())
        ->method('getLanguages')
        ->willReturn([
        $source => [],
        $target => [],
    ]);
    $language_manager->expects($this->any())
        ->method('getLanguage')
        ->willReturnMap([
        [
            $source,
            new Language([
                'id' => $source,
            ]),
        ],
        [
            $target,
            new Language([
                'id' => $target,
            ]),
        ],
    ]);
    // Set the mock entity. We need to use ContentEntityBase for mocking due to
    // issues with phpunit and multiple interfaces.
    $entity = $this->getMockBuilder(ContentEntityBaseMockableClass::class)
        ->disableOriginalConstructor()
        ->getMock();
    $entity->expects($this->once())
        ->method('getEntityTypeId');
    $entity->expects($this->once())
        ->method('getTranslationLanguages')
        ->with()
        ->willReturn([]);
    $entity->expects($this->once())
        ->method('getCacheContexts')
        ->willReturn([]);
    $entity->expects($this->once())
        ->method('getCacheMaxAge')
        ->willReturn(Cache::PERMANENT);
    $entity->expects($this->once())
        ->method('getCacheTags')
        ->willReturn([
        'node:1337',
    ]);
    $entity->expects($this->once())
        ->method('getCacheContexts')
        ->willReturn([]);
    // Set the route requirements.
    $route = new Route('test_route');
    $route->setRequirement('_access_content_translation_manage', 'create');
    // Set up the route match.
    $route_match = $this->createMock('Drupal\\Core\\Routing\\RouteMatchInterface');
    $route_match->expects($this->once())
        ->method('getParameter')
        ->with('node')
        ->willReturn($entity);
    // Set the mock account.
    $account = $this->createMock('Drupal\\Core\\Session\\AccountInterface');
    // The access check under test.
    $check = new ContentTranslationManageAccessCheck($entity_type_manager, $language_manager);
    // The request params.
    $language = 'en';
    $entity_type_id = 'node';
    $this->assertTrue($check->access($route, $route_match, $account, $source, $target, $language, $entity_type_id)
        ->isAllowed(), "The access check matches");
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.