role = $this->getMock('Drupal\user\RoleInterface'); $this->roleStorage = $this->getMock('\Drupal\user\RoleStorageInterface'); $this->moduleHandler = $this->getMock('\Drupal\Core\Extension\ModuleHandlerInterface'); $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); $this->translationManager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface'); $this->entityListBuilder = new TestEntityListBuilder($this->entityType, $this->roleStorage); $this->redirectDestination = $this->getMock(RedirectDestinationInterface::class); $this->container = new ContainerBuilder(); \Drupal::setContainer($this->container); } /** * @covers ::getOperations */ public function testGetOperations() { $operation_name = $this->randomMachineName(); $operations = [ $operation_name => [ 'title' => $this->randomMachineName(), ], ]; $this->moduleHandler->expects($this->once()) ->method('invokeAll') ->with('entity_operation', [$this->role]) ->will($this->returnValue($operations)); $this->moduleHandler->expects($this->once()) ->method('alter') ->with('entity_operation'); $this->container->set('module_handler', $this->moduleHandler); $this->role->expects($this->any()) ->method('access') ->will($this->returnValue(AccessResult::allowed())); $this->role->expects($this->any()) ->method('hasLinkTemplate') ->will($this->returnValue(TRUE)); $url = $this->getMockBuilder('\Drupal\Core\Url') ->disableOriginalConstructor() ->getMock(); $url->expects($this->atLeastOnce()) ->method('mergeOptions') ->with(['query' => ['destination' => '/foo/bar']]); $this->role->expects($this->any()) ->method('toUrl') ->will($this->returnValue($url)); $this->redirectDestination->expects($this->atLeastOnce()) ->method('getAsArray') ->willReturn(['destination' => '/foo/bar']); $list = new EntityListBuilder($this->entityType, $this->roleStorage); $list->setStringTranslation($this->translationManager); $list->setRedirectDestination($this->redirectDestination); $operations = $list->getOperations($this->role); $this->assertInternalType('array', $operations); $this->assertArrayHasKey('edit', $operations); $this->assertInternalType('array', $operations['edit']); $this->assertArrayHasKey('title', $operations['edit']); $this->assertArrayHasKey('delete', $operations); $this->assertInternalType('array', $operations['delete']); $this->assertArrayHasKey('title', $operations['delete']); $this->assertArrayHasKey($operation_name, $operations); $this->assertInternalType('array', $operations[$operation_name]); $this->assertArrayHasKey('title', $operations[$operation_name]); } } class TestEntityListBuilder extends EntityTestListBuilder { public function buildOperations(EntityInterface $entity) { return []; } }