prepopulate-8.x-2.3/tests/src/Functional/PrepopulateFieldTest.php
tests/src/Functional/PrepopulateFieldTest.php
<?php namespace Drupal\Tests\prepopulate\Functional; use Drupal\Core\Url; use Drupal\Tests\BrowserTestBase; use Drupal\taxonomy\Entity\Term; /** * Field functionality tests of prepopulate. * * @requires module inline_entity_form * * @group prepopulate */ class PrepopulateFieldTest extends BrowserTestBase { /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected static $modules = [ 'datetime', 'datetime_range', 'inline_entity_form', 'filter', 'link', 'node', 'options', 'path', 'prepopulate', 'prepopulate_test', 'prepopulate_test_unsafe', 'taxonomy', 'telephone', 'text', 'user', ]; /** * A user with permission to administer site configuration. * * @var \Drupal\user\UserInterface */ protected $user; /** * A stub node page. * * @var \Drupal\node\NodeInterface */ protected $node; /** * A stub term. * * @var \Drupal\taxonomy\TermInterface */ protected $term; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->user = $this->drupalCreateUser([ 'administer content types', 'administer nodes', 'bypass node access', 'administer taxonomy', ]); $this->drupalLogin($this->user); $this->term = Term::create([ 'vid' => 'tags', 'name' => $this->randomMachineName(), ]); $this->term->save(); } /** * Test pre-populating fields. * * @throws \Behat\Mink\Exception\ResponseTextException */ public function testFieldsPrepopulate(): void { foreach ($this->allFields() as $input) { $this->assertPrepopulate($input['query'], $input['expected']); } } /** * Assert all values are prepopulated as expected. * * @param array $query * The prepopulated query strings. * @param string $expected * The expected results populated in the node. * * @throws \Behat\Mink\Exception\ResponseTextException */ protected function assertPrepopulate(array $query, $expected): void { // Title is required. $query[] = 'edit[title][widget][0][value]=simple title'; // IEF taxonomy 'name' field is required. $query[] = 'edit[field_ief][widget][0][inline_entity_form][name][widget][0][value]=Apples'; $this->drupalGet(Url::fromUri('internal:/node/add/test_content?' . implode('&', $query))); $this->submitForm([], 'Save'); $this->assertSession()->pageTextContains('Test Content simple title has been created.'); $this->assertSession()->pageTextContains($expected); $this->assertSession()->pageTextContains('IEF Apples'); } /** * Test values of prepopulate with all field types. * * @return array * The test data. */ public function allFields(): array { $data['non existent reference'] = [ 'query' => [ 'edit[body][widget][0]=body text', ], 'expected' => '', ]; $data['body'] = [ 'query' => [ 'edit[body][widget][0][value]=body text', 'edit[body][widget][0][summary]=body summary', ], 'expected' => 'body text', ]; $data['field_boolean'] = [ 'query' => [ 'edit[field_boolean][widget][value]=true', ], 'expected' => 'Boolean On', ]; $data['field_checkboxes'] = [ 'query' => [ 'edit[field_checkboxes][widget][Green]=true', ], 'expected' => 'Checkboxes Green', ]; $data['field_date'] = [ 'query' => [ 'edit[field_date][widget][0][value][date]=1970-01-01', ], 'expected' => 'Date Thu, 01/01/1970 - 12:00', ]; $data['field_date_range'] = [ 'query' => [ 'edit[field_date_range][widget][0][value][date]=1970-01-01', 'edit[field_date_range][widget][0][value][time]=16:30:00', 'edit[field_date_range][widget][0][end_value][date]=1970-01-02', 'edit[field_date_range][widget][0][end_value][time]=13:30:00', ], 'expected' => 'Date Range Thu, 01/01/1970 - 16:30 - Fri, 01/02/1970 - 13:30', ]; $data['field_email'] = [ 'query' => [ 'edit[field_email][widget][0][value]=example@example.com', ], 'expected' => 'Email example@example.com', ]; $data['field_link'] = [ 'query' => [ 'edit[field_link][widget][0][uri]=https://example.com', 'edit[field_link][widget][0][title]=Link Title', ], 'expected' => 'Link Link Title https://example.com', ]; $data['field_select_list'] = [ 'query' => [ 'edit[field_select_list][widget]=Green', ], 'expected' => 'Select List Green', ]; $data['field_select_list_numeric'] = [ 'query' => [ 'edit[field_select_list_numeric][widget]=0', ], 'expected' => 'Select List Numeric Zero', ]; $data['field_tags'] = [ 'query' => [ 'edit[field_tags][widget][target_id]=' . $this->term->id(), ], 'expected' => 'Tags ' . $this->term->label(), ]; $data['field_telephone'] = [ 'query' => [ 'edit[field_telephone][widget][0][value]=555-555-5555', ], 'expected' => 'Telephone 555-555-5555', ]; $data['field_time'] = [ 'query' => [ 'edit[field_time][widget][0][value][date]=1970-01-01', 'edit[field_time][widget][0][value][time]=16:30:00', ], 'expected' => 'Time Thu, 01/01/1970 - 16:30', ]; $data['field_text'] = [ 'query' => [ 'edit[field_text][widget][0][value]=text string', ], 'expected' => 'Text text string', ]; $data['field_text_formatted'] = [ 'query' => [ 'edit[field_text_formatted][widget][0][value]=formatted text', 'edit[field_text_formatted][widget][0][summary]=formatted text summary', ], 'expected' => 'Text Formatted formatted text summary', ]; return $data; } }