container->get('entity_type.manager'); // Create a test entity. $random_label = $this->randomMachineName(); $data = ['type' => 'entity_test', 'name' => $random_label]; $this->entity = $entity_type_manager->getStorage('entity_test')->create($data); $this->entity->save(); // Create a test entity with only canonical route. $random_label = $this->randomMachineName(); $data = ['type' => 'devel_entity_test_canonical', 'name' => $random_label]; $this->entityCanonical = $entity_type_manager->getStorage('devel_entity_test_canonical')->create($data); $this->entityCanonical->save(); // Create a test entity with only edit route. $random_label = $this->randomMachineName(); $data = ['type' => 'devel_entity_test_edit', 'name' => $random_label]; $this->entityEdit = $entity_type_manager->getStorage('devel_entity_test_edit')->create($data); $this->entityEdit->save(); // Create a test entity with no routes. $random_label = $this->randomMachineName(); $data = ['type' => 'devel_entity_test_no_links', 'name' => $random_label]; $this->entityNoLinks = $entity_type_manager->getStorage('devel_entity_test_no_links')->create($data); $this->entityNoLinks->save(); $this->drupalPlaceBlock('local_tasks_block'); $web_user = $this->drupalCreateUser([ 'view test entity', 'administer entity_test content', 'access devel information', ]); $this->drupalLogin($web_user); } /** * Tests route generation. */ public function testRouteGeneration(): void { // Test Devel load and render routes for entities with both route // definitions. $this->drupalGet('entity_test/' . $this->entity->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->LinkExists('View'); $this->assertSession()->LinkExists('Edit'); $this->assertSession()->LinkExists('Devel'); $this->drupalGet('devel/entity_test/' . $this->entity->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->LinkExists('Definition'); $this->assertSession()->LinkExists('Render'); $this->assertSession()->LinkExists('Load'); $this->assertSession()->LinkExists('Load (with references)'); $this->assertSession()->LinkExists('Path alias'); $this->assertSession()->linkByHrefExists('devel/render/entity_test/' . $this->entity->id()); $this->drupalGet('devel/render/entity_test/' . $this->entity->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->linkByHrefExists('devel/definition/entity_test/' . $this->entity->id()); $this->drupalGet('devel/definition/entity_test/' . $this->entity->id()); $this->assertSession()->statusCodeEquals(200); // Test Devel load and render routes for entities with only canonical route // definitions. $this->drupalGet('devel_entity_test_canonical/' . $this->entityCanonical->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->LinkExists('View'); $this->assertSession()->LinkNotExists('Edit'); $this->assertSession()->LinkExists('Devel'); // Use xpath with equality check on @data-drupal-link-system-path because // assertNoLinkByHref matches on partial values and finds the other link. $this->assertSession()->elementNotExists('xpath', '//a[@data-drupal-link-system-path = "devel/devel_entity_test_canonical/' . $this->entityCanonical->id() . '"]'); $this->assertSession()->elementExists('xpath', '//a[@data-drupal-link-system-path = "devel/render/devel_entity_test_canonical/' . $this->entityCanonical->id() . '"]'); $this->drupalGet('devel/devel_entity_test_canonical/' . $this->entityCanonical->id()); // This url used to be '404 not found', but is now '200 OK' following the // generating of devel load links for all entity types. // @see https://gitlab.com/drupalspoons/devel/-/issues/377 $this->assertSession()->statusCodeEquals(200); $this->drupalGet('devel/render/devel_entity_test_canonical/' . $this->entityCanonical->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->LinkExists('Definition'); $this->assertSession()->LinkExists('Render'); $this->assertSession()->LinkNotExists('Load'); $this->assertSession()->LinkNotExists('Load (with references)'); $this->assertSession()->LinkExists('Path alias'); $this->assertSession()->linkByHrefExists('devel/definition/devel_entity_test_canonical/' . $this->entityCanonical->id()); $this->drupalGet('devel/definition/devel_entity_test_canonical/' . $this->entityCanonical->id()); $this->assertSession()->statusCodeEquals(200); // Test Devel load and render routes for entities with only edit route // definitions. $this->drupalGet('devel_entity_test_edit/manage/' . $this->entityEdit->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->LinkNotExists('View'); $this->assertSession()->LinkExists('Edit'); $this->assertSession()->LinkExists('Devel'); $this->assertSession()->linkByHrefExists('devel/devel_entity_test_edit/' . $this->entityEdit->id()); $this->drupalGet('devel/devel_entity_test_edit/' . $this->entityEdit->id()); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->LinkExists('Definition'); $this->assertSession()->LinkNotExists('Render'); $this->assertSession()->LinkExists('Load'); $this->assertSession()->LinkExists('Load (with references)'); $this->assertSession()->LinkExists('Path alias'); $this->assertSession()->linkByHrefExists('devel/definition/devel_entity_test_edit/' . $this->entityEdit->id()); $this->assertSession()->linkByHrefNotExists('devel/render/devel_entity_test_edit/' . $this->entityEdit->id()); $this->drupalGet('devel/definition/devel_entity_test_edit/' . $this->entityEdit->id()); $this->assertSession()->statusCodeEquals(200); $this->drupalGet('devel/render/devel_entity_test_edit/' . $this->entityEdit->id()); $this->assertSession()->statusCodeEquals(404); // Test Devel load and render routes for entities with no route // definitions. $this->drupalGet('devel_entity_test_no_links/' . $this->entityEdit->id()); $this->assertSession()->statusCodeEquals(404); $this->drupalGet('devel/devel_entity_test_no_links/' . $this->entityNoLinks->id()); $this->assertSession()->statusCodeEquals(200); $this->drupalGet('devel/render/devel_entity_test_no_links/' . $this->entityNoLinks->id()); $this->assertSession()->statusCodeEquals(404); $this->drupalGet('devel/definition/devel_entity_test_no_links/' . $this->entityNoLinks->id()); $this->assertSession()->statusCodeEquals(404); } /** * Tests the field info page. */ public function testFieldInfoPage(): void { $this->drupalGet('/devel/field/info'); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->pageTextContains('Field types'); } }