function EntityAddUITest::testAddPageWithBundleEntities

Same name in other branches
  1. 9 core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php \Drupal\Tests\system\Functional\Entity\EntityAddUITest::testAddPageWithBundleEntities()
  2. 8.9.x core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php \Drupal\Tests\system\Functional\Entity\EntityAddUITest::testAddPageWithBundleEntities()
  3. 10 core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php \Drupal\Tests\system\Functional\Entity\EntityAddUITest::testAddPageWithBundleEntities()

Tests the add page for an entity type using bundle entities.

File

core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php, line 32

Class

EntityAddUITest
Tests the /add and /add/{type} controllers.

Namespace

Drupal\Tests\system\Functional\Entity

Code

public function testAddPageWithBundleEntities() : void {
    $admin_user = $this->drupalCreateUser([
        'administer entity_test_with_bundle content',
    ]);
    $this->drupalLogin($admin_user);
    // Users without create access for bundles do not have access to the add
    // page if there are no bundles.
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->statusCodeEquals(403);
    $bundle_admin_user = $this->drupalCreateUser([
        'administer entity_test_with_bundle content',
        'administer entity_test_bundle content',
    ]);
    $this->drupalLogin($bundle_admin_user);
    // No bundles exist, the add bundle message should be present as the user
    // has the necessary permissions.
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->pageTextContains('There is no test entity bundle yet.');
    $this->assertSession()
        ->linkExists('Add a new test entity bundle.');
    // One bundle exists, confirm redirection to the add-form.
    EntityTestBundle::create([
        'id' => 'test',
        'label' => 'Test label',
        'description' => 'My test description',
    ])->save();
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->addressEquals('/entity_test_with_bundle/add/test');
    // Two bundles exist, confirm both are shown.
    EntityTestBundle::create([
        'id' => 'test2',
        'label' => 'Test2 label',
        'description' => 'My test2 description',
    ])->save();
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->linkExists('Test label');
    $this->assertSession()
        ->linkExists('Test2 label');
    $this->assertSession()
        ->pageTextContains('My test description');
    $this->assertSession()
        ->pageTextContains('My test2 description');
    $this->clickLink('Test2 label');
    $this->drupalGet('/entity_test_with_bundle/add/test2');
    $this->submitForm([
        'name[0][value]' => 'test name',
    ], 'Save');
    $entity = EntityTestWithBundle::load(1);
    $this->assertEquals('test name', $entity->label());
    // Create a new user that only has bundle specific permissions.
    $user = $this->drupalCreateUser([
        'create test entity_test_with_bundle entities',
        'create test2 entity_test_with_bundle entities',
    ]);
    $this->drupalLogin($user);
    // Create a bundle that the user does not have create permissions for.
    EntityTestBundle::create([
        'id' => 'test3',
        'label' => 'Test3 label',
        'description' => 'My test3 description',
    ])->save();
    // Create a bundle that the user is forbidden from creating (always).
    EntityTestBundle::create([
        'id' => 'forbidden_access_bundle',
        'label' => 'Forbidden to create bundle',
        'description' => 'A bundle that can never be created',
    ])->save();
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->statusCodeEquals(200);
    $this->assertSession()
        ->linkExists('Test label');
    $this->assertSession()
        ->linkExists('Test2 label');
    $this->assertSession()
        ->linkNotExists('Forbidden to create bundle');
    $this->assertSession()
        ->linkNotExists('Test3 label');
    $this->clickLink('Test label');
    $this->assertSession()
        ->statusCodeEquals(200);
    // Without any permissions, access must be denied.
    $this->drupalLogout();
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->statusCodeEquals(403);
    // Create a new user that has bundle create permissions.
    $user = $this->drupalCreateUser([
        'administer entity_test_bundle content',
    ]);
    $this->drupalLogin($user);
    // User has access to the add page but no bundles are shown because the user
    // does not have bundle specific permissions. The add bundle message is
    // present as the user has bundle create permissions.
    $this->drupalGet('/entity_test_with_bundle/add');
    $this->assertSession()
        ->linkNotExists('Forbidden to create bundle');
    $this->assertSession()
        ->linkNotExists('Test label');
    $this->assertSession()
        ->linkNotExists('Test2 label');
    $this->assertSession()
        ->linkNotExists('Test3 label');
    $this->assertSession()
        ->linkExists('Add a new test entity bundle.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.