/**
  * {@inheritdoc}
  */
 protected function setUp()
 {
     parent::setUp();
     ConfigurableLanguage::createFromLangcode('de')->save();
     $this->drupalLogin($this->drupalCreateUser(['administer site configuration', 'translate configuration']));
     PageVariant::create(['variant' => 'http_status_code', 'label' => 'HTTP status code', 'id' => 'http_status_code', 'page' => 'node_view'])->save();
 }
Пример #2
0
 /**
  * Tests whether the page entity config schema is valid.
  */
 public function testValidPageConfigSchema()
 {
     $id = 'node_view';
     /** @var \Drupal\page_manager\PageInterface $page */
     $page = Page::load($id);
     // Add an access condition.
     $page->addAccessCondition(['id' => 'node_type', 'bundles' => ['article' => 'article'], 'negate' => TRUE, 'context_mapping' => ['node' => 'node']]);
     $page->save();
     $page_variant_id = 'block_page';
     // Add a block variant.
     $page_variant = PageVariant::create(['variant' => 'block_display', 'id' => $page_variant_id, 'label' => 'Block page', 'page' => $page->id()]);
     $page_variant->save();
     $page->addVariant($page_variant);
     /** @var \Drupal\page_manager\Plugin\DisplayVariant\PageBlockDisplayVariant $variant_plugin */
     $variant_plugin = $page_variant->getVariantPlugin();
     // Add a selection condition.
     $page_variant->addSelectionCondition(['id' => 'node_type', 'bundles' => ['page' => 'page'], 'context_mapping' => ['node' => 'node']]);
     // Add a block.
     $variant_plugin->addBlock(['id' => 'entity_view:node', 'label' => 'View the node', 'provider' => 'page_manager', 'label_display' => 'visible', 'view_mode' => 'default']);
     $page_variant->save();
     $page_config = \Drupal::config("page_manager.page.{$id}");
     $this->assertSame($page_config->get('id'), $id);
     $variant_config = \Drupal::config("page_manager.page_variant.{$page_variant_id}");
     $this->assertSame($variant_config->get('id'), $page_variant_id);
     $this->assertConfigSchema(\Drupal::service('config.typed'), $page_config->getName(), $page_config->get());
     $this->assertConfigSchema(\Drupal::service('config.typed'), $variant_config->getName(), $variant_config->get());
 }
Пример #3
0
 /**
  * Tests that a node bundle condition controls the node view page.
  */
 public function testAdmin()
 {
     // Create two nodes, and view their pages.
     $node1 = $this->drupalCreateNode(['type' => 'page']);
     $node2 = $this->drupalCreateNode(['type' => 'article']);
     $node3 = $this->drupalCreateNode(['type' => 'article']);
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(200);
     $this->assertText($node1->label());
     $this->assertTitle($node1->label() . ' | Drupal');
     $this->drupalGet('node/' . $node2->id());
     $this->assertResponse(200);
     $this->assertCacheTag('page_manager_route_name:entity.node.canonical');
     $this->assertText($node2->label());
     $this->assertTitle($node2->label() . ' | Drupal');
     // Create a new variant to always return 404, the node_view page exists by
     // default.
     $http_status_variant = PageVariant::create(['variant' => 'http_status_code', 'label' => 'HTTP status code', 'id' => 'http_status_code', 'page' => 'node_view']);
     $http_status_variant->getVariantPlugin()->setConfiguration(['status_code' => 404]);
     $http_status_variant->save();
     $this->triggerRouterRebuild();
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(404);
     $this->assertCacheTag('page_manager_route_name:entity.node.canonical');
     $this->assertNoText($node1->label());
     $this->drupalGet('node/' . $node2->id());
     $this->assertResponse(404);
     $this->assertNoText($node2->label());
     // Add a new variant.
     /** @var \Drupal\page_manager\PageVariantInterface $block_page_variant */
     $block_page_variant = PageVariant::create(['variant' => 'block_display', 'id' => 'block_page_first', 'label' => 'First', 'page' => 'node_view']);
     $block_page_plugin = $block_page_variant->getVariantPlugin();
     $block_page_plugin->setConfiguration(['page_title' => '[node:title]']);
     /** @var \Drupal\page_manager\Plugin\DisplayVariant\PageBlockDisplayVariant $block_page_plugin */
     $block_page_plugin->addBlock(['id' => 'entity_view:node', 'label' => 'Entity view (Content)', 'label_display' => FALSE, 'view_mode' => 'default', 'region' => 'top', 'context_mapping' => ['entity' => 'node']]);
     $block_page_variant->addSelectionCondition(['id' => 'node_type', 'bundles' => ['article' => 'article'], 'context_mapping' => ['node' => 'node']]);
     $block_page_variant->setWeight(-10);
     $block_page_variant->save();
     $this->triggerRouterRebuild();
     // The page node will 404, but the article node will display the variant.
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(404);
     $this->assertNoText($node1->label());
     $this->drupalGet('node/' . $node2->id());
     $this->assertResponse(200);
     $this->assertTitle($node2->label() . ' | Drupal');
     $this->assertText($node2->body->value);
     // Test cacheability metadata.
     $this->drupalGet('node/' . $node3->id());
     $this->assertNoText($node2->label());
     // Ensure this doesn't affect the /node/add page.
     $this->drupalGet('node/add');
     $this->assertResponse(200);
 }
 /**
  * Tests that overriding the node page does not prevent translation.
  */
 public function testNode()
 {
     $this->drupalPlaceBlock('local_tasks_block');
     $this->drupalPlaceBlock('page_title_block');
     $node = $this->drupalCreateNode(['type' => 'article']);
     $this->drupalGet('node/' . $node->id());
     $this->assertResponse(200);
     $this->assertText($node->label());
     $this->clickLink('Translate');
     $this->assertResponse(200);
     // Create a new variant.
     $http_status_variant = PageVariant::create(['variant' => 'http_status_code', 'label' => 'HTTP status code', 'id' => 'http_status_code', 'page' => 'node_view']);
     $http_status_variant->getVariantPlugin()->setConfiguration(['status_code' => 200]);
     $http_status_variant->save();
     $this->triggerRouterRebuild();
     $this->drupalGet('node/' . $node->id());
     $this->assertResponse(200);
     $this->clickLink('Translate');
     $this->assertResponse(200);
 }
Пример #5
0
 /**
  * Tests that a node bundle condition controls the node view page.
  */
 public function testPagePlaceHolder()
 {
     // Access the page callback and check whether string is printed.
     $page_string = 'test-page';
     $this->drupalGet('page-manager-test/' . $page_string);
     $this->assertResponse(200);
     $this->assertCacheTag('page_manager_route_name:page_manager_test.page_view');
     $this->assertText('Hello World! Page ' . $page_string);
     // Create a new page entity with the same path as in the test module.
     $page = Page::create(['label' => 'Placeholder test', 'id' => 'placeholder', 'path' => '/page-manager-test/%']);
     $page->save();
     // Create a new variant.
     $http_status_variant = PageVariant::create(['variant' => 'http_status_code', 'label' => 'HTTP status code', 'id' => 'http_status_code', 'page' => 'placeholder']);
     $http_status_variant->getVariantPlugin()->setConfiguration(['status_code' => 200]);
     $http_status_variant->save();
     $this->triggerRouterRebuild();
     // Access the page callback again and check that now the text is not there.
     $this->drupalGet('page-manager-test/' . $page_string);
     $this->assertResponse(200);
     $this->assertCacheTag('page_manager_route_name:page_manager_test.page_view');
     $this->assertNoText('Hello World! Page ' . $page_string);
 }
Пример #6
0
 /**
  * Tests that a user role condition controls the node view page.
  */
 public function testUserRoleAccessCondition()
 {
     $node1 = $this->drupalCreateNode(['type' => 'page']);
     $node2 = $this->drupalCreateNode(['type' => 'article']);
     $this->drupalLogin($this->drupalCreateUser(['access content']));
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(200);
     $this->assertText($node1->label());
     $this->assertTitle($node1->label() . ' | Drupal');
     // Add a variant and an access condition.
     /** @var \Drupal\page_manager\Entity\PageVariant $page_variant */
     $page_variant = PageVariant::create(['variant' => 'block_display', 'id' => 'block_page', 'label' => 'Block page', 'page' => $this->page->id()]);
     $page_variant->getVariantPlugin()->setConfiguration(['page_title' => 'The overridden page']);
     $page_variant->save();
     $this->page->addAccessCondition(['id' => 'user_role', 'roles' => [RoleInterface::AUTHENTICATED_ID => RoleInterface::AUTHENTICATED_ID], 'context_mapping' => ['user' => 'current_user']]);
     $this->page->addAccessCondition(['id' => 'node_type', 'bundles' => ['page' => 'page'], 'context_mapping' => ['node' => 'node']]);
     $this->page->save();
     $this->triggerRouterRebuild();
     $this->drupalLogout();
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(403);
     $this->assertNoText($node1->label());
     $this->assertTitle('Access denied | Drupal');
     $this->drupalLogin($this->drupalCreateUser());
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(403);
     $this->assertNoText($node1->label());
     $this->assertTitle('Access denied | Drupal');
     $this->drupalLogin($this->drupalCreateUser(['access content']));
     $this->drupalGet('node/' . $node1->id());
     $this->assertResponse(200);
     $this->assertNoText($node1->label());
     $this->assertTitle('The overridden page | Drupal');
     $this->drupalGet('node/' . $node2->id());
     $this->assertResponse(403);
     $this->assertNoText($node2->label());
     $this->assertTitle('Access denied | Drupal');
 }