View source
<?php
namespace Drupal\Tests\webform\Functional\Element;
use Drupal\webform\Entity\Webform;
class WebformElementTableTest extends WebformElementBrowserTestBase {
public static $modules = [
'webform',
'webform_ui',
'file',
];
protected static $testWebforms = [
'test_element_table',
];
public function testTable() {
global $base_path;
$webform = Webform::load('test_element_table');
$this
->drupalGet('/webform/test_element_table');
$this
->assertRaw('<table class="js-form-wrapper responsive-enabled" data-drupal-selector="edit-table" id="edit-table" data-striping="1">');
$this
->assertPattern('#<th>First Name</th>\\s+<th>Last Name</th>\\s+<th>Gender</th>#');
$this
->assertRaw('<tr data-drupal-selector="edit-table-1">');
$this
->assertRaw('<td><div class="js-form-item form-item js-form-type-textfield form-item-table__1__first-name js-form-item-table__1__first-name form-no-label">');
$this
->assertRaw('<input data-drupal-selector="edit-table-1-first-name" type="text" id="edit-table-1-first-name" name="table__1__first_name" value="John" size="20" maxlength="255" class="form-text" />');
$this
->assertRaw('<table data-drupal-selector="edit-table-basic" class="webform-table responsive-enabled" id="edit-table-basic" data-striping="1">');
$this
->assertRaw('<tr data-drupal-selector="edit-table-basic-01" class="webform-table-row">');
$this
->assertRaw('<input data-drupal-selector="edit-table-basic-01-first-name" type="text" id="edit-table-basic-01-first-name" name="table_basic_01_first_name" value="" size="60" maxlength="255" class="form-text" />');
$this
->assertRaw('<table data-drupal-selector="edit-table-advanced" class="webform-table sticky-enabled responsive-enabled" id="edit-table-advanced" data-striping="1">');
$this
->assertPattern('#<th width="50%">Composite</th>\\s+<th width="50%">Nested</th>#');
$this
->assertRaw('<table data-drupal-selector="edit-table-states" class="webform-table responsive-enabled" id="edit-table-states" data-drupal-states="{"invisible":{".webform-submission-test-element-table-add-form :input[name=\\u0022table_rows\\u0022]":{"value":""}}}" data-striping="1">');
$this
->assertRaw('<tr data-drupal-selector="edit-table-states-01" class="webform-table-row js-form-item" data-drupal-states="{"visible":{".webform-submission-test-element-table-add-form :input[name=\\u0022table_rows\\u0022]":{"value":{"greater":"0"}}}}">');
$edit = [
'table_basic_01_first_name' => 'Ringo',
'table_basic_01_last_name' => 'Starr',
'table_basic_01_gender' => 'Man',
'table_advanced_01_first_name' => 'John',
'table_advanced_01_last_name' => 'Lennon',
'table_advanced_01_gender' => 'Man',
];
$this
->drupalPostForm('/webform/test_element_table', $edit, 'Preview');
$this
->assertRaw("table__1__first_name: John\ntable__1__last_name: Smith\ntable__1__gender: Man\ntable__2__first_name: Jane\ntable__2__last_name: Doe\ntable__2__gender: Woman\ntable_basic_01_first_name: Ringo\ntable_basic_01_last_name: Starr\ntable_basic_01_gender: Man\ntable_advanced_01_address: null\ntable_advanced_01_first_name: John\ntable_advanced_01_last_name: Lennon\ntable_advanced_01_gender: Man\ntable_advanced_01_managed_file: null\ntable_rows: '1'\ntable_advanced_01_textfield: ''\ntable_advanced_02_textfield: ''\ntable_advanced_03_textfield: ''\ntable_advanced_04_textfield: ''");
$this
->assertPattern('#<th>First Name</th>\\s+<th>Last Name</th>\\s+<th>Gender</th>\\s+<th>Markup</th>#');
$this
->assertPattern('#<td>John</td>\\s+<td>Smith</td>\\s+<td>Man</td>\\s+<td>{markup_1}</td>#');
$this
->assertPattern('#<td>Jane</td>\\s+<td>Doe</td>\\s+<td>Woman</td>\\s+<td>{markup_2}</td>#');
$this
->assertPattern('#<label>table_basic</label>\\s+<table class="responsive-enabled" data-striping="1">#');
$this
->assertPattern('#<tr>\\s+<td>Ringo</td>\\s+<td>Starr</td>\\s+<td>Man</td>\\s+<td>{markup_1}</td>\\s+</tr>#');
$this
->assertPattern('#<label>table_advanced</label>\\s+<div><details class="webform-container webform-container-type-details#');
$this
->assertRaw('<section class="js-form-item form-item js-form-wrapper form-wrapper webform-section" id="test_element_table--table_advanced_01_container">');
$this
->assertPattern('<div class="webform-element webform-element-type-webform-table js-form-item form-item js-form-type-item form-item-table-states js-form-item-table-states" id="test_element_table--table_states">');
$this
->drupalLogin($this->rootUser);
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add');
$this
->assertNoRaw('Table row');
$this
->drupalGet('/admin/structure/webform/manage/test_element_table');
$this
->assertLinkByHref("{$base_path}admin/structure/webform/manage/test_element_table/element/add/webform_table_row?parent=table_basic");
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row');
$this
->assertResponse(404);
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row', [
'query' => [
'parent' => 'table_basic',
],
]);
$this
->assertFieldByName('properties[title]', 'Basic Person (2)');
$this
->assertFieldByName('key', 'table_basic_02');
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row', [
'query' => [
'parent' => 'table_basic',
],
]);
$this
->assertFieldByName('properties[duplicate]', TRUE);
$this
->drupalPostForm('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row', [], 'Save', [
'query' => [
'parent' => 'table_basic',
],
]);
$this
->assertRaw('>table_basic_02<');
$this
->assertRaw('>table_basic_02_first_name<');
$this
->assertRaw('>table_basic_02_last_name<');
$this
->assertRaw('>table_basic_02_gender<');
$this
->assertRaw('>table_basic_02_markup<');
$this
->drupalPostForm('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row', [
'properties[duplicate]' => FALSE,
], 'Save', [
'query' => [
'parent' => 'table_basic',
],
]);
$this
->assertRaw('>table_basic_03<');
$this
->assertNoRaw('>table_basic_03_first_name<');
$this
->assertNoRaw('>table_basic_03_last_name<');
$this
->assertNoRaw('>table_basic_03_gender<');
$this
->assertNoRaw('>table_basic_03_markup<');
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/textfield', [
'query' => [
'parent' => 'table_basic_01',
],
]);
$this
->assertRaw("Element keys are automatically prefixed with parent row's key.");
$this
->assertRaw('<span class="field-prefix">table_basic_01_</span>');
$edit = [
'key' => 'testing',
'properties[title]' => 'Testing',
];
$options = [
'query' => [
'parent' => 'table_basic_01',
],
];
$this
->drupalPostForm('/admin/structure/webform/manage/test_element_table/element/add/textfield', $edit, 'Save', $options);
$this
->assertRaw('>table_basic_01_testing<');
$webform
->setElementProperties('textfield', [
'#type' => 'textfield',
'title' => 'textfield',
], 'table_basic_01')
->save();
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row', [
'query' => [
'parent' => 'table_basic',
],
]);
$this
->assertNoFieldByName('properties[duplicate]');
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/webform_table_row', [
'query' => [
'parent' => 'table_prefix_children_false',
],
]);
$this
->assertFieldByName('properties[title]', '');
$this
->assertFieldByName('key', '');
$this
->drupalGet('/admin/structure/webform/manage/test_element_table/element/add/textfield', [
'query' => [
'parent' => 'table_prefix_children_false_01',
],
]);
$this
->assertNoRaw("Element keys are automatically prefixed with parent row's key.");
$this
->assertNoRaw('<span class="field-prefix">table_basic_01_</span>');
}
}