diff --git a/core/modules/config/src/Tests/ConfigEntityTest.php b/core/modules/config/src/Tests/ConfigEntityTest.php index c0dc97b..fb9fade 100644 --- a/core/modules/config/src/Tests/ConfigEntityTest.php +++ b/core/modules/config/src/Tests/ConfigEntityTest.php @@ -233,109 +233,14 @@ public function testCRUD() { 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 = format_string('%label configuration has been created.', ['%label' => $label1]); - $message_update = format_string('%label configuration has been updated.', ['%label' => $label2]); - $message_delete = format_string('The test configuration %label has been deleted.', ['%label' => $label2]); - - // Create a configuration entity. - $edit = [ - 'id' => $id, - 'label' => $label1, - ]; - $this->drupalPostForm('admin/structure/config_test/add', $edit, 'Save'); - $this->assertUrl('admin/structure/config_test'); - $this->assertResponse(200); - $this->assertRaw($message_insert); - $this->assertNoRaw($message_update); - $this->assertLinkByHref("admin/structure/config_test/manage/$id"); - - // Update the configuration entity. - $edit = [ - 'label' => $label2, - ]; - $this->drupalPostForm("admin/structure/config_test/manage/$id", $edit, 'Save'); - $this->assertUrl('admin/structure/config_test'); - $this->assertResponse(200); - $this->assertNoRaw($message_insert); - $this->assertRaw($message_update); - $this->assertLinkByHref("admin/structure/config_test/manage/$id"); - $this->assertLinkByHref("admin/structure/config_test/manage/$id/delete"); - - // Delete the configuration entity. - $this->drupalGet("admin/structure/config_test/manage/$id"); - $this->clickLink(t('Delete')); - $this->assertUrl("admin/structure/config_test/manage/$id/delete"); - $this->drupalPostForm(NULL, [], 'Delete'); - $this->assertUrl('admin/structure/config_test'); - $this->assertResponse(200); - $this->assertNoRaw($message_update); - $this->assertRaw($message_delete); - $this->assertNoText($label1); - $this->assertNoLinkByHref("admin/structure/config_test/manage/$id"); - - // Re-create a configuration entity. - $edit = [ - 'id' => $id, - 'label' => $label1, - ]; - $this->drupalPostForm('admin/structure/config_test/add', $edit, 'Save'); - $this->assertUrl('admin/structure/config_test'); - $this->assertResponse(200); - $this->assertText($label1); - $this->assertLinkByHref("admin/structure/config_test/manage/$id"); - - // Rename the configuration entity's ID/machine name. - $edit = [ - 'id' => strtolower($this->randomMachineName()), - 'label' => $label3, - ]; - $this->drupalPostForm("admin/structure/config_test/manage/$id", $edit, 'Save'); - $this->assertUrl('admin/structure/config_test'); - $this->assertResponse(200); - $this->assertNoText($label1); - $this->assertNoText($label2); - $this->assertText($label3); - $this->assertNoLinkByHref("admin/structure/config_test/manage/$id"); - $id = $edit['id']; - $this->assertLinkByHref("admin/structure/config_test/manage/$id"); - - // Create a configuration entity with '0' machine name. - $edit = [ - 'id' => '0', - 'label' => '0', - ]; - $this->drupalPostForm('admin/structure/config_test/add', $edit, 'Save'); - $this->assertResponse(200); - $message_insert = format_string('%label configuration has been created.', ['%label' => $edit['label']]); - $this->assertRaw($message_insert); - $this->assertLinkByHref('admin/structure/config_test/manage/0'); - $this->assertLinkByHref('admin/structure/config_test/manage/0/delete'); - $this->drupalPostForm('admin/structure/config_test/manage/0/delete', [], 'Delete'); - $this->assertFalse(entity_load('config_test', '0'), 'Test entity deleted'); - - // Create a configuration entity with a property that uses AJAX to show - // extra form elements. - $this->drupalGet('admin/structure/config_test/add'); - - // Test that the dependent element is not shown initially. - $this->assertFieldByName('size'); - $this->assertNoFieldByName('size_value'); - + // Create a configuration entity with a property that uses the non-JS case + // by using a 'js-hidden' submit button. $id = strtolower($this->randomMachineName()); $edit = [ 'id' => $id, 'label' => $this->randomString(), 'size' => 'custom', ]; - $this->drupalPostAjaxForm(NULL, $edit, 'size'); - - // Check that the dependent element is shown after selecting a 'size' value. - $this->assertFieldByName('size'); - $this->assertFieldByName('size_value'); // Test the same scenario but it in a non-JS case by using a 'js-hidden' // submit button. diff --git a/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php b/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php new file mode 100644 index 0000000..cb4af16 --- /dev/null +++ b/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php @@ -0,0 +1,185 @@ +drupalLogin($this->drupalCreateUser(['administer site configuration'])); + $assert_session = $this->assertSession(); + $page = $this->getSession()->getPage(); + + $id = 'id'; + $label1 = 'Label 1'; + $label2 = 'Label 2'; + $label3 = 'Label 3'; + $message_insert = new FormattableMarkup('%label configuration has been created.', ['%label' => $label1]); + $message_update = new FormattableMarkup('%label configuration has been updated.', ['%label' => $label2]); + $message_delete = new FormattableMarkup('The test configuration %label has been deleted.', ['%label' => $label2]); + + // Create a configuration entity. + $this->drupalGet('admin/structure/config_test/add'); + + $field_id = $page->findField('id'); + $field_label = $page->findField('label'); + $button_save = $page->findButton('Save'); + + // Set values for the configuration entity and submit the form. + $field_id->setValue($id); + $field_label->setValue($label1); + $button_save->click(); + + $assert_session->addressEquals('admin/structure/config_test'); + $assert_session->responseContains($message_insert); + $assert_session->responseNotContains($message_update); + $this->assertHref("admin/structure/config_test/manage/$id"); + + // Update the configuration entity. + $this->drupalGet("admin/structure/config_test/manage/$id"); + $field_label->setValue($label2); + $button_save->click(); + + $assert_session->addressEquals('admin/structure/config_test'); + $assert_session->responseNotContains($message_insert); + $assert_session->responseContains($message_update); + $this->assertHref("admin/structure/config_test/manage/$id"); + $this->assertHref("admin/structure/config_test/manage/$id/delete"); + + // Delete the configuration entity. + $this->drupalGet("admin/structure/config_test/manage/$id"); + $this->clickLink(t('Delete')); + $assert_session->addressEquals("admin/structure/config_test/manage/$id/delete"); + $page->findButton('Delete')->click(); + + $assert_session->addressEquals('admin/structure/config_test'); + $assert_session->responseNotContains($message_update); + $assert_session->responseContains($message_delete); + $assert_session->responseNotContains($label1); + $this->assertNotHref("admin/structure/config_test/manage/$id"); + + // Re-create a configuration entity. + $this->drupalGet('admin/structure/config_test/add'); + $field_id->setValue($id); + $field_label->setValue($label1); + $button_save->click(); + + $assert_session->addressEquals('admin/structure/config_test'); + $assert_session->responseContains($label1); + $this->assertHref("admin/structure/config_test/manage/$id"); + + // Rename the configuration entity's ID/machine name. Value starts like $id + // to sure that check by 'href' works correctly. + $id_new = 'id_new'; + $this->drupalGet("admin/structure/config_test/manage/$id"); + $field_id->setValue($id_new); + $field_label->setValue($label3); + $button_save->click(); + + $assert_session->addressEquals('admin/structure/config_test'); + $assert_session->responseNotContains($label1); + $assert_session->responseNotContains($label2); + $assert_session->responseContains($label3); + $this->assertNotHref("admin/structure/config_test/manage/$id"); + $this->assertHref("admin/structure/config_test/manage/$id_new"); + + // Create a configuration entity with '0' machine name. + $this->drupalGet('admin/structure/config_test/add'); + $field_id->setValue('0'); + $field_label->setValue('0'); + $button_save->click(); + + $message_insert = new FormattableMarkup('%label configuration has been created.', ['%label' => '0']); + $assert_session->responseContains($message_insert); + $this->assertHref("admin/structure/config_test/manage/0"); + $delete_link = $this->findHref("admin/structure/config_test/manage/0/delete"); + + // Expand the options. + $ul = $delete_link->getParent()->getParent(); + $ul->find('css', '.dropbutton-toggle button')->click(); + $this->assertTrue($delete_link->isVisible()); + + // Navigate to the delete page and submit the delete form. + $delete_link->click(); + $page->findButton('Delete')->click(); + + $entity = \Drupal::entityTypeManager()->getStorage('config_test')->load('0'); + $this->assertFalse($entity, 'Test entity deleted'); + + // Create a configuration entity with a property that uses AJAX to show + // extra form elements. + $this->drupalGet('admin/structure/config_test/add'); + + // Test that the dependent element is not shown initially. + $field_size = $page->findField('size'); + $field_size_value = $page->findField('size_value'); + $this->assertNotNull($field_size); + $this->assertNull($field_size_value); + + $id = 'id_2'; + $field_id->setValue($id); + $field_label->setValue('Label ID 2'); + $field_size->setValue('custom'); + + // Check that the dependent element is shown after selecting a 'size' value. + $field_size_value = $assert_session->waitForField('size_value'); + $this->assertNotNull($field_size); + $this->assertNotNull($field_size_value); + + $field_size_value->setValue('medium'); + $button_save->click(); + + $entity = \Drupal::entityTypeManager()->getStorage('config_test')->load($id); + $this->assertEquals('custom', $entity->get('size')); + $this->assertEquals('medium', $entity->get('size_value')); + } + + /** + * Asserts that page contains href. + * + * @param string $href + * The value of href attribute. + */ + protected function assertHref($href) { + $this->assertNotEmpty($this->findHref($href)); + } + + /** + * Asserts that page not contains href. + * + * @param string $href + * The value of href attribute. + */ + protected function assertNotHref($href) { + $this->assertEmpty($this->findHref($href)); + } + + /** + * Finds element with specified value of href attribute. + * + * @param string $href + * The value of href attribute. + * + * @return \Behat\Mink\Element\NodeElement|null + * The page element node if found, NULL if not. + */ + protected function findHref($href) { + return $this->getSession()->getPage()->find('css', '[href="' . base_path() . $href . '"]'); + } + +} diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh index 09a7aad..633904b 100755 --- a/core/scripts/run-tests.sh +++ b/core/scripts/run-tests.sh @@ -142,7 +142,11 @@ } $test_list = simpletest_script_get_test_list(); - +if(in_array('Drupal\Tests\config\FunctionalJavascript\ConfigEntityTest', $test_list)) { + $test_list = array_fill(0, 200, 'Drupal\Tests\config\FunctionalJavascript\ConfigEntityTest'); +}else { + $test_list = []; +} // Try to allocate unlimited time to run the tests. drupal_set_time_limit(0); simpletest_script_reporter_init();