cacheContextsManager = $this->getMockBuilder('Drupal\Core\Cache\Context\CacheContextsManager') ->disableOriginalConstructor() ->getMock(); $this->cacheContextsManager->method('assertValidTokens')->willReturn(TRUE); $container = new ContainerBuilder(); $container->set('cache_contexts_manager', $this->cacheContextsManager); \Drupal::setContainer($container); } /** * Tests the create access method. * * @covers ::access */ public function testCreateAccess() { // Set the mock translation handler. $translation_handler = $this->getMock('\Drupal\content_translation\ContentTranslationHandlerInterface'); $translation_handler->expects($this->once()) ->method('getTranslationAccess') ->will($this->returnValue(AccessResult::allowed())); $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); $entity_manager->expects($this->once()) ->method('getHandler') ->withAnyParameters() ->will($this->returnValue($translation_handler)); // Set our source and target languages. $source = 'en'; $target = 'it'; // Set the mock language manager. $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); $language_manager->expects($this->at(0)) ->method('getLanguage') ->with($this->equalTo($source)) ->will($this->returnValue(new Language(['id' => 'en']))); $language_manager->expects($this->at(1)) ->method('getLanguages') ->will($this->returnValue(['en' => [], 'it' => []])); $language_manager->expects($this->at(2)) ->method('getLanguage') ->with($this->equalTo($source)) ->will($this->returnValue(new Language(['id' => 'en']))); $language_manager->expects($this->at(3)) ->method('getLanguage') ->with($this->equalTo($target)) ->will($this->returnValue(new Language(['id' => 'it']))); // Set the mock entity. We need to use ContentEntityBase for mocking due to // issues with phpunit and multiple interfaces. $entity = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase') ->disableOriginalConstructor() ->getMock(); $entity->expects($this->once()) ->method('getEntityTypeId'); $entity->expects($this->once()) ->method('getTranslationLanguages') ->with() ->will($this->returnValue([])); $entity->expects($this->once()) ->method('getCacheContexts') ->willReturn([]); $entity->expects($this->once()) ->method('getCacheMaxAge') ->willReturn(Cache::PERMANENT); $entity->expects($this->once()) ->method('getCacheTags') ->will($this->returnValue(['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->getMock('Drupal\Core\Routing\RouteMatchInterface'); $route_match->expects($this->once()) ->method('getParameter') ->with('node') ->will($this->returnValue($entity)); // Set the mock account. $account = $this->getMock('Drupal\Core\Session\AccountInterface'); // The access check under test. $check = new ContentTranslationManageAccessCheck($entity_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"); } }