You are here

public function ConfigEntityTest::testCRUDUI in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/config/tests/src/Functional/ConfigEntityTest.php \Drupal\Tests\config\Functional\ConfigEntityTest::testCRUDUI()

Tests CRUD operations through the UI.

File

core/modules/config/tests/src/Functional/ConfigEntityTest.php, line 228

Class

ConfigEntityTest
Tests configuration entities.

Namespace

Drupal\Tests\config\Functional

Code

public function testCRUDUI() {
  $this
    ->drupalLogin($this
    ->drupalCreateUser([
    'administer site configuration',
  ]));
  $id = strtolower($this
    ->randomMachineName());
  $label1 = $this
    ->randomMachineName();
  $label2 = $this
    ->randomMachineName();
  $label3 = $this
    ->randomMachineName();
  $message_insert = "{$label1} configuration has been created.";
  $message_update = "{$label2} configuration has been updated.";
  $message_delete = "The test configuration {$label2} has been deleted.";

  // Create a configuration entity.
  $edit = [
    'id' => $id,
    'label' => $label1,
  ];
  $this
    ->drupalGet('admin/structure/config_test/add');
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/config_test');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextContains($message_insert);
  $this
    ->assertSession()
    ->pageTextNotContains($message_update);
  $this
    ->assertSession()
    ->linkByHrefExists("admin/structure/config_test/manage/{$id}");

  // Update the configuration entity.
  $edit = [
    'label' => $label2,
  ];
  $this
    ->drupalGet("admin/structure/config_test/manage/{$id}");
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/config_test');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextNotContains($message_insert);
  $this
    ->assertSession()
    ->pageTextContains($message_update);
  $this
    ->assertSession()
    ->linkByHrefExists("admin/structure/config_test/manage/{$id}");
  $this
    ->assertSession()
    ->linkByHrefExists("admin/structure/config_test/manage/{$id}/delete");

  // Delete the configuration entity.
  $this
    ->drupalGet("admin/structure/config_test/manage/{$id}");
  $this
    ->clickLink('Delete');
  $this
    ->assertSession()
    ->addressEquals("admin/structure/config_test/manage/{$id}/delete");
  $this
    ->submitForm([], 'Delete');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/config_test');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextNotContains($message_update);
  $this
    ->assertSession()
    ->pageTextContains($message_delete);
  $this
    ->assertSession()
    ->pageTextNotContains($label1);
  $this
    ->assertSession()
    ->linkByHrefNotExists("admin/structure/config_test/manage/{$id}");

  // Re-create a configuration entity.
  $edit = [
    'id' => $id,
    'label' => $label1,
  ];
  $this
    ->drupalGet('admin/structure/config_test/add');
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/config_test');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextContains($label1);
  $this
    ->assertSession()
    ->linkByHrefExists("admin/structure/config_test/manage/{$id}");

  // Rename the configuration entity's ID/machine name.
  $edit = [
    'id' => strtolower($this
      ->randomMachineName()),
    'label' => $label3,
  ];
  $this
    ->drupalGet("admin/structure/config_test/manage/{$id}");
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->addressEquals('admin/structure/config_test');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextNotContains($label1);
  $this
    ->assertSession()
    ->pageTextNotContains($label2);
  $this
    ->assertSession()
    ->pageTextContains($label3);
  $this
    ->assertSession()
    ->linkByHrefNotExists("admin/structure/config_test/manage/{$id}");
  $id = $edit['id'];
  $this
    ->assertSession()
    ->linkByHrefExists("admin/structure/config_test/manage/{$id}");

  // Create a configuration entity with '0' machine name.
  $edit = [
    'id' => '0',
    'label' => '0',
  ];
  $this
    ->drupalGet('admin/structure/config_test/add');
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $this
    ->assertSession()
    ->pageTextContains('0 configuration has been created.');
  $this
    ->assertSession()
    ->linkByHrefExists('admin/structure/config_test/manage/0');
  $this
    ->assertSession()
    ->linkByHrefExists('admin/structure/config_test/manage/0/delete');
  $this
    ->drupalGet('admin/structure/config_test/manage/0/delete');
  $this
    ->submitForm([], 'Delete');
  $storage = \Drupal::entityTypeManager()
    ->getStorage('config_test');
  $this
    ->assertNull($storage
    ->load(0), 'Test entity deleted');

  // Create a configuration entity with a property that uses AJAX to show
  // extra form elements. Test this scenario in a non-JS case by using a
  // 'js-hidden' submit button.
  // @see \Drupal\Tests\config\FunctionalJavascript\ConfigEntityTest::testAjaxOnAddPage()
  $this
    ->drupalGet('admin/structure/config_test/add');
  $id = strtolower($this
    ->randomMachineName());
  $edit = [
    'id' => $id,
    'label' => $this
      ->randomString(),
    'size' => 'custom',
  ];
  $this
    ->assertSession()
    ->fieldExists('size');
  $this
    ->assertSession()
    ->fieldNotExists('size_value');
  $this
    ->submitForm($edit, 'Change size');
  $this
    ->assertSession()
    ->fieldExists('size');
  $this
    ->assertSession()
    ->fieldExists('size_value');

  // Submit the form with the regular 'Save' button and check that the entity
  // values are correct.
  $edit += [
    'size_value' => 'medium',
  ];
  $this
    ->submitForm($edit, 'Save');
  $entity = $storage
    ->load($id);
  $this
    ->assertEquals('custom', $entity
    ->get('size'));
  $this
    ->assertEquals('medium', $entity
    ->get('size_value'));
}