content_entity_base-8.x-1.x-dev/tests/src/Kernel/ContentEntityUITest.php
tests/src/Kernel/ContentEntityUITest.php
<?php namespace Drupal\Tests\content_entity_base\Kernel; use Drupal\user\Entity\User; use Symfony\Component\HttpFoundation\Request; /** * Tests the entity UI support of content_entity_base. * * @group content_entity_base */ class ContentEntityUITest extends CEBKernelTestBase { /** * @var \Symfony\Component\HttpKernel\HttpKernelInterface */ protected $httpKernel; /** * @var \Drupal\user\Entity\User[] */ protected $users; /** * @var \Drupal\content_entity_base\Entity\EntityBaseInterface */ protected $entity_definition; /** * @var \Drupal\Core\Session\AccountSwitcherInterface */ protected $account_switcher; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->installConfig('system'); \Drupal::service('router.builder')->rebuild(); $this->httpKernel = \Drupal::service('http_kernel'); /** @var EntityTypeManagerInterface $entity_manager */ $entity_manager = \Drupal::service('entity_type.manager'); $this->entity_definition = $entity_manager->getDefinition('ceb_test_content'); $root_user = User::create(['uid' => 1, 'name' => $this->randomString()]); $root_user->save(); $this->users = [ 'anon' => User::load(0), 'root' => $root_user, 'ceb_admin' => $this->drupalCreateUser(['administer ' . $this->entity_definition->id()]), ]; $this->account_switcher = \Drupal::service('account_switcher'); } public function testEntityUIWithNoBundles() { // #### ANON #### // Test anon access to the entity listing page. $response = $this->httpKernel->handle(Request::create('/admin/content/ceb_test_content')); $this->assertEquals(403, $response->getStatusCode()); // Test anon access to the entity add page. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add')); $this->assertEquals(403, $response->getStatusCode()); // #### ROOT #### $this->account_switcher->switchTo($this->users['root']); $response = $this->httpKernel->handle(Request::create('/admin/content/ceb_test_content')); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertText('There are no CEB Test entities yet.'); // Test the add page. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add')); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertText('There is no ceb test content type yet.'); // #### CEB ADMIN #### $this->account_switcher->switchTo($this->users['ceb_admin']); $response = $this->httpKernel->handle(Request::create('/admin/content/ceb_test_content')); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertText('There are no CEB Test entities yet.'); // Test the add page. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add')); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertText('There is no ceb test content type yet.'); // Switch back to the anon account. $this->account_switcher->switchBack(); } public function testEntityAddPageWithOneBundle() { $this->createFirstBundle(); // #### ANON #### // Test anon access to the entity listing page. $response = $this->httpKernel->handle(Request::create('/admin/content/ceb_test_content')); $this->assertEquals(403, $response->getStatusCode()); // Test anon access to the entity add page. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add')); $this->assertEquals(403, $response->getStatusCode()); // #### ROOT #### $this->account_switcher->switchTo($this->users['root']); $response = $this->httpKernel->handle(Request::create('/admin/content/ceb_test_content')); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertText('There are no CEB Test entities yet.'); // Test the add page. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add')); // The content add page should redirect to ceb_test_content/add/{{bundle_0_id}} when there is only one bundle. $this->assertEquals(302, $response->getStatusCode()); $this->assertEquals('http://localhost/admin/ceb_test_content/add/' . $this->bundles[0]->id(), $response->getTargetUrl()); // Test the add form. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add/' . $this->bundles[0]->id())); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertTitle('Add ceb test | '); // #### CEB ADMIN #### $this->account_switcher->switchTo($this->users['ceb_admin']); $response = $this->httpKernel->handle(Request::create('/admin/content/ceb_test_content')); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertText('There are no CEB Test entities yet.'); // Test the add page. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add')); // The content add page should redirect to ceb_test_content/add/{{bundle_0_id}} when there is only one bundle. $this->assertEquals(302, $response->getStatusCode()); $this->assertEquals('http://localhost/admin/ceb_test_content/add/' . $this->bundles[0]->id(), $response->getTargetUrl()); // Test the add form. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add/' . $this->bundles[0]->id())); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertTitle('Add ceb test | '); $this->assertPattern('/\<label[^\>]+\>Administrative Title\<\/label\>/', "The default name label (Administrative Title) was used in the add form."); // Create another bundle. $name_label = $this->randomMachineName(); $name_label_bundle = $this->createAdditionalBundle(['name_label' => $name_label]); // Test that the name_label is being used. $response = $this->httpKernel->handle(Request::create('/admin/ceb_test_content/add/' . $name_label_bundle->id())); $this->assertEquals(200, $response->getStatusCode()); $this->setRawContent($response->getContent()); $this->assertPattern('/\<label[^\>]+\>' . $name_label . '\<\/label\>/', "The name label ({$name_label}) was used in the add form."); // Switch back to the anon account. $this->account_switcher->switchBack(); } protected function doTestAnonDenied() {} }