diff --git a/src/Tests/DynamicEntityReferenceTest.php b/tests/src/Functional/DynamicEntityReferenceTest.php similarity index 74% rename from src/Tests/DynamicEntityReferenceTest.php rename to tests/src/Functional/DynamicEntityReferenceTest.php index 1bd8605..ca43558 100644 --- a/src/Tests/DynamicEntityReferenceTest.php +++ b/tests/src/Functional/DynamicEntityReferenceTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\dynamic_entity_reference\Tests\DynamicEntityReferenceTest. + * Contains \Drupal\Tests\dynamic_entity_reference\Functional\DynamicEntityReferenceTest. */ -namespace Drupal\dynamic_entity_reference\Tests; +namespace Drupal\Tests\dynamic_entity_reference\Functional; use Drupal\Component\Utility\Crypt; use Drupal\Component\Utility\Unicode; @@ -16,17 +16,19 @@ use Drupal\Core\Url; use Drupal\entity_test\Entity\EntityTest; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; -use Drupal\simpletest\WebTestBase; +use Drupal\simpletest\BrowserTestBase; use Drupal\taxonomy\Entity\Term; use Drupal\taxonomy\Entity\Vocabulary; -use Symfony\Component\CssSelector\CssSelector; /** * Ensures that Dynamic Entity References field works correctly. * * @group dynamic_entity_reference + * + * @runTestsInSeparateProcesses + * @preserveGlobalState disabled */ -class DynamicEntityReferenceTest extends WebTestBase { +class DynamicEntityReferenceTest extends BrowserTestBase { /** * Admin user @@ -79,14 +81,14 @@ class DynamicEntityReferenceTest extends WebTestBase { 'field_name' => 'foobar', 'new_storage_type' => 'dynamic_entity_reference', ); - $this->drupalPostForm(NULL, $edit, t('Save and continue')); - $this->drupalPostForm(NULL, array( + $this->submitForm($edit, t('Save and continue')); + $this->submitForm(array( 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, 'settings[entity_type_ids][]' => 'user', ), t('Save field settings')); - $this->assertFieldByName('default_value_input[field_foobar][0][target_type]'); - $this->assertFieldByXPath(CssSelector::toXPath('select[name="default_value_input[field_foobar][0][target_type]"] > option[value=entity_test]'), 'entity_test'); - $this->assertNoFieldByXPath(CssSelector::toXPath('select[name="default_value_input[field_foobar][0][target_type]"] > option[value=user]'), 'user'); + $this->assertSession()->fieldExists('default_value_input[field_foobar][0][target_type]'); + $this->assertSession()->elementTextContains('css', 'select[name="default_value_input[field_foobar][0][target_type]"] > option[value=entity_test]', 'Test entity'); + $this->assertSession()->elementNotExists('css', 'select[name="default_value_input[field_foobar][0][target_type]"] > option[value=user]'); $edit = array( 'settings[entity_test_label][handler_settings][target_bundles][entity_test_label]' => TRUE, 'settings[entity_test_no_id][handler_settings][target_bundles][entity_test_no_id]' => TRUE, @@ -112,38 +114,38 @@ class DynamicEntityReferenceTest extends WebTestBase { 'settings[entity_test_string_id][handler_settings][target_bundles][entity_test_string_id]' => TRUE, 'settings[entity_test_view_builder][handler_settings][target_bundles][entity_test_view_builder]' => TRUE, ); - $this->drupalPostForm(NULL, $edit, t('Save settings')); - $this->assertRaw(t('Saved %name configuration', array('%name' => 'Foobar'))); + $this->submitForm($edit, t('Save settings')); + $this->getSession()->getPage()->hasContent(t('Saved %name configuration', array('%name' => 'Foobar'))); $excluded_entity_type_ids = FieldStorageConfig::loadByName('entity_test', 'field_foobar') ->getSetting('entity_type_ids'); $this->assertNotNull($excluded_entity_type_ids); - $this->assertIdentical(array_keys($excluded_entity_type_ids), array('user')); + $this->assertEquals(array_keys($excluded_entity_type_ids), array('user')); // Check the include entity settings. $this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.field_foobar/storage'); - $this->drupalPostForm(NULL, array( + $this->submitForm(array( 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, 'settings[exclude_entity_types]' => FALSE, 'settings[entity_type_ids][]' => 'user', ), t('Save field settings')); $this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.field_foobar'); - $this->assertFieldByName('default_value_input[field_foobar][0][target_type]'); - $this->assertFieldByXPath(CssSelector::toXPath('select[name="default_value_input[field_foobar][0][target_type]"] > option[value=user]'), 'user'); - $this->assertNoFieldByXPath(CssSelector::toXPath('select[name="default_value_input[field_foobar][0][target_type]"] > option[value=entity_test]'), 'entity_test'); - $this->drupalPostForm(NULL, array(), t('Save settings')); - $this->assertRaw(t('Saved %name configuration', array('%name' => 'Foobar'))); + $this->assertSession()->fieldExists('default_value_input[field_foobar][0][target_type]'); + $this->assertSession()->elementTextContains('css', 'select[name="default_value_input[field_foobar][0][target_type]"] > option[value=user]', 'User'); + $this->assertSession()->elementNotExists('css', 'select[name="default_value_input[field_foobar][0][target_type]"] > option[value=entity_test]'); + $this->submitForm(array(), t('Save settings')); + $this->getSession()->getPage()->hasContent(t('Saved %name configuration', array('%name' => 'Foobar'))); $excluded_entity_type_ids = FieldStorageConfig::loadByName('entity_test', 'field_foobar') ->getSetting('entity_type_ids'); $this->assertNotNull($excluded_entity_type_ids); - $this->assertIdentical(array_keys($excluded_entity_type_ids), array('user')); + $this->assertEquals(array_keys($excluded_entity_type_ids), array('user')); // Check the default settings. $this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.field_foobar'); - $this->drupalPostForm(NULL, array( + $this->submitForm(array( 'default_value_input[field_foobar][0][target_type]' => 'user', 'default_value_input[field_foobar][0][target_id]' => $this->adminUser->label() . ' (' . $this->adminUser->id() . ')', ), t('Save settings')); $field_config = FieldConfig::loadByName('entity_test', 'entity_test', 'field_foobar')->toArray(); - $this->assertEqual($field_config['default_value']['0'], array('target_type' => 'user', 'target_uuid' => $this->adminUser->uuid())); + $this->assertSame($field_config['default_value']['0'], array('target_type' => 'user', 'target_uuid' => $this->adminUser->uuid())); } @@ -159,8 +161,8 @@ class DynamicEntityReferenceTest extends WebTestBase { 'field_name' => 'foobar', 'new_storage_type' => 'dynamic_entity_reference', ); - $this->drupalPostForm(NULL, $edit, t('Save and continue')); - $this->drupalPostForm(NULL, array( + $this->submitForm($edit, t('Save and continue')); + $this->submitForm(array( 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, ), t('Save field settings')); @@ -190,8 +192,8 @@ class DynamicEntityReferenceTest extends WebTestBase { 'settings[entity_test_view_builder][handler_settings][target_bundles][entity_test_view_builder]' => TRUE, ); - $this->drupalPostForm(NULL, $edit, t('Save settings')); - $this->assertRaw(t('Saved %name configuration', array('%name' => 'Foobar'))); + $this->submitForm($edit, t('Save settings')); + $this->getSession()->getPage()->hasContent(t('Saved %name configuration', array('%name' => 'Foobar'))); // Create some items to reference. $item1 = EntityTest::create([ @@ -205,11 +207,12 @@ class DynamicEntityReferenceTest extends WebTestBase { // Test the new entity commenting inherits default. $this->drupalGet('entity_test/add'); - $this->assertField('field_foobar[0][target_id]', 'Found foobar field target id'); - $this->assertField('field_foobar[0][target_type]', 'Found foobar field target type'); + $this->assertSession()->fieldExists('field_foobar[0][target_id]'); + $this->assertSession()->fieldExists('field_foobar[0][target_type]'); // Ensure that the autocomplete path is correct. - $input = $this->xpath('//input[@name=:name]', array(':name' => 'field_foobar[0][target_id]'))[0]; + $input = $this->getSession()->getPage()->findField('field_foobar[0][target_id]'); + $settings = FieldConfig::loadByName('entity_test', 'entity_test', 'field_foobar')->getSettings(); $selection_settings = $settings['entity_test_label']['handler_settings'] ?: []; $data = serialize($selection_settings) . 'entity_test_label' . $settings['entity_test_label']['handler']; @@ -219,12 +222,11 @@ class DynamicEntityReferenceTest extends WebTestBase { 'selection_handler' => $settings['entity_test_label']['handler'], 'selection_settings_key' => $selection_settings_key, ))->toString(); - $this->assertTrue(strpos((string) $input['data-autocomplete-path'], $expected_autocomplete_path) !== FALSE); + $this->assertTrue(strpos($input->getAttribute('data-autocomplete-path'), $expected_autocomplete_path) !== FALSE); // Add some extra dynamic entity reference fields. - $this->drupalPostAjaxForm(NULL, array(), array('field_foobar_add_more' => t('Add another item')), NULL, array(), array(), 'entity-test-entity-test-form'); - $this->drupalPostAjaxForm(NULL, array(), array('field_foobar_add_more' => t('Add another item')), NULL, array(), array(), 'entity-test-entity-test-form'); - + $this->getSession()->getPage()->findButton('field_foobar_add_more')->click(); + $this->getSession()->getPage()->findButton('field_foobar_add_more')->click(); $edit = array( 'field_foobar[0][target_id]' => $this->adminUser->label() . ' (' . $this->adminUser->id() . ')', 'field_foobar[0][target_type]' => 'user', @@ -237,24 +239,24 @@ class DynamicEntityReferenceTest extends WebTestBase { 'user_id[0][target_id]' => $this->adminUser->label() . ' (' . $this->adminUser->id() . ')', ); - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, t('Save')); $entities = \Drupal::entityManager() ->getStorage('entity_test') ->loadByProperties(array( 'name' => 'Barfoo', )); - $this->assertEqual(1, count($entities), 'Entity was saved'); + $this->assertSame(1, count($entities), 'Entity was saved'); $entity = reset($entities); $this->drupalGet('entity_test/' . $entity->id()); - $this->assertText('Barfoo'); - $this->assertText($this->adminUser->label()); - $this->assertText('item1'); - $this->assertText('item2'); + $this->assertSession()->pageTextContains('Barfoo'); + $this->assertSession()->pageTextContains($this->adminUser->label()); + $this->assertSession()->pageTextContains('item1'); + $this->assertSession()->pageTextContains('item2'); - $this->assertEqual(count($entity->field_foobar), 3, 'Three items in field'); - $this->assertEqual($entity->field_foobar[0]->entity->label(), $this->adminUser->label()); - $this->assertEqual($entity->field_foobar[1]->entity->label(), 'item1'); - $this->assertEqual($entity->field_foobar[2]->entity->label(), 'item2'); + $this->assertSame(count($entity->field_foobar), 3, 'Three items in field'); + $this->assertSame($entity->field_foobar[0]->entity->label(), $this->adminUser->label()); + $this->assertSame($entity->field_foobar[1]->entity->label(), 'item1'); + $this->assertSame($entity->field_foobar[2]->entity->label(), 'item2'); $this->drupalGet('entity_test/manage/' . $entity->id()); @@ -263,13 +265,13 @@ class DynamicEntityReferenceTest extends WebTestBase { $selection_settings = $settings[$expected_entity_type]['handler_settings'] ?: []; $data = serialize($selection_settings) . $expected_entity_type . $settings[$expected_entity_type]['handler']; $selection_settings_key = Crypt::hmacBase64($data, Settings::getHashSalt()); - $input = $this->xpath('//input[@name=:name]', array(':name' => 'field_foobar[' . $index . '][target_id]'))[0]; + $input = $this->getSession()->getPage()->findField('field_foobar[' . $index . '][target_id]'); $expected_autocomplete_path = Url::fromRoute('system.entity_autocomplete', array( 'target_type' => $expected_entity_type, 'selection_handler' => $settings[$expected_entity_type]['handler'], 'selection_settings_key' => $selection_settings_key, ))->toString(); - $this->assertTrue(strpos((string) $input['data-autocomplete-path'], $expected_autocomplete_path) !== FALSE); + $this->assertTrue(strpos($input->getAttribute('data-autocomplete-path'), $expected_autocomplete_path) !== FALSE); } $edit = array( @@ -277,13 +279,13 @@ class DynamicEntityReferenceTest extends WebTestBase { // Remove one child. 'field_foobar[2][target_id]' => '', ); - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, t('Save')); $this->drupalGet('entity_test/' . $entity->id()); - $this->assertText('Bazbar'); + $this->assertSession()->pageTextContains('Bazbar'); // Reload entity. \Drupal::entityManager()->getStorage('entity_test')->resetCache(array($entity->id())); - $entity = entity_load('entity_test', $entity->id()); - $this->assertEqual(count($entity->field_foobar), 2, 'Two values in field'); + $entity = EntityTest::load($entity->id()); + $this->assertSame(count($entity->field_foobar), 2, 'Two values in field'); // Create two entities with the same label. $labels = array(); @@ -301,14 +303,14 @@ class DynamicEntityReferenceTest extends WebTestBase { $edit = array( 'field_foobar[1][target_id]' => 'duplicate label', ); - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, t('Save')); // We don't know the order in which the entities will be listed, so just // assert parts and make sure both are shown. $error_message = t('Multiple entities match this reference;'); - $this->assertRaw($error_message); - $this->assertRaw($labels[0]); - $this->assertRaw($labels[1]); + $this->assertSession()->pageTextContains($error_message); + $this->assertSession()->pageTextContains($labels[0]); + $this->assertSession()->pageTextContains($labels[1]); // Create a few more to trigger the case where there are more than 5 // matching results. @@ -321,7 +323,7 @@ class DynamicEntityReferenceTest extends WebTestBase { } // Submit again with the same values. - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, t('Save')); $params = array( '%value' => 'duplicate label', @@ -329,7 +331,7 @@ class DynamicEntityReferenceTest extends WebTestBase { // We don't know which id it will display, so just assert a part of the // error. $error_message = t('Many entities are called %value. Specify the one you want by appending the id in parentheses', $params); - $this->assertRaw($error_message); + $this->getSession()->getPage()->hasContent($error_message); // Submit with a label that does not match anything. // Now try to submit and just specify the label. @@ -337,8 +339,8 @@ class DynamicEntityReferenceTest extends WebTestBase { $edit = array( 'field_foobar[1][target_id]' => 'does not exist', ); - $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertRaw(t('There are no entities matching "%value".', array('%value' => 'does not exist'))); + $this->submitForm($edit, t('Save')); + $this->getSession()->getPage()->hasContent(t('There are no entities matching "%value".', array('%value' => 'does not exist'))); $this->drupalGet('entity_test/manage/' . $entity->id()); $edit = array( @@ -346,13 +348,13 @@ class DynamicEntityReferenceTest extends WebTestBase { // Reference itself. 'field_foobar[1][target_id]' => 'Bazbar (' . $entity->id() . ')', ); - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, t('Save')); $this->drupalGet('entity_test/' . $entity->id()); - $this->assertText('Bazbar'); + $this->assertSession()->pageTextContains('Bazbar'); // Reload entity. \Drupal::entityManager()->getStorage('entity_test')->resetCache(array($entity->id())); $entity = EntityTest::load($entity->id()); - $this->assertEqual($entity->field_foobar[1]->entity->label(), 'Bazbar'); + $this->assertSame($entity->field_foobar[1]->entity->label(), 'Bazbar'); } /** @@ -382,8 +384,8 @@ class DynamicEntityReferenceTest extends WebTestBase { 'field_name' => 'foobar', 'new_storage_type' => 'dynamic_entity_reference', ); - $this->drupalPostForm(NULL, $edit, t('Save and continue')); - $this->drupalPostForm(NULL, array( + $this->submitForm($edit, t('Save and continue')); + $this->submitForm(array( 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, 'settings[exclude_entity_types]' => FALSE, 'settings[entity_type_ids][]' => array('taxonomy_term', 'user'), @@ -392,12 +394,12 @@ class DynamicEntityReferenceTest extends WebTestBase { 'settings[taxonomy_term][handler_settings][target_bundles]['. $vocabulary->id() .']' => $vocabulary->id(), 'settings[taxonomy_term][handler_settings][auto_create]' => TRUE, ); - $this->drupalPostForm(NULL, $edit, t('Save settings')); + $this->submitForm($edit, t('Save settings')); $this->drupalGet('entity_test/add'); // Add some extra dynamic entity reference fields. - $this->drupalPostAjaxForm(NULL, array(), array('field_foobar_add_more' => t('Add another item')), NULL, array(), array(), 'entity-test-entity-test-form'); - $this->drupalPostAjaxForm(NULL, array(), array('field_foobar_add_more' => t('Add another item')), NULL, array(), array(), 'entity-test-entity-test-form'); + $this->getSession()->getPage()->findButton('field_foobar_add_more')->click(); + $this->getSession()->getPage()->findButton('field_foobar_add_more')->click(); $edit = array( 'field_foobar[0][target_id]' => $this->adminUser->label() . ' (' . $this->adminUser->id() . ')', 'field_foobar[0][target_type]' => 'user', @@ -410,25 +412,26 @@ class DynamicEntityReferenceTest extends WebTestBase { 'user_id[0][target_id]' => $this->adminUser->label() . ' (' . $this->adminUser->id() . ')', ); - $this->drupalPostForm(NULL, $edit, t('Save')); + $this->submitForm($edit, t('Save')); $entities = \Drupal::entityManager() ->getStorage('entity_test') ->loadByProperties(array( 'name' => 'Barfoo', )); - $this->assertEqual(1, count($entities), 'Entity was saved'); + $this->assertSame(1, count($entities), 'Entity was saved'); $entity = reset($entities); + $this->getSession()->getPage()->hasContent(t('%entity_type @id has been created.', array('@id' => $entity->id(), '%entity_type' => $entity->getEntityTypeId()))); - $this->assertEqual(count($entity->field_foobar), 3, 'Three items in field'); - $this->assertEqual($entity->field_foobar[0]->entity->label(), $this->adminUser->label()); - $this->assertEqual($entity->field_foobar[1]->entity->label(), 'tag'); - $this->assertEqual($entity->field_foobar[2]->entity->label(), $term->label()); + $this->assertSame(count($entity->field_foobar), 3, 'Three items in field'); + $this->assertSame($entity->field_foobar[0]->entity->label(), $this->adminUser->label()); + $this->assertSame($entity->field_foobar[1]->entity->label(), 'tag'); + $this->assertSame($entity->field_foobar[2]->entity->label(), $term->label()); $this->drupalGet('entity_test/' . $entity->id()); - $this->assertText('Barfoo'); - $this->assertText($this->adminUser->label()); - $this->assertText('tag'); - $this->assertText($term->label()); + $this->assertSession()->pageTextContains('Barfoo'); + $this->assertSession()->pageTextContains($this->adminUser->label()); + $this->assertSession()->pageTextContains('tag'); + $this->assertSession()->pageTextContains($term->label()); }