View source
<?php
namespace Drupal\FunctionalJavascriptTests\Core;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
class MachineNameTest extends WebDriverTestBase {
public static $modules = [
'node',
'form_test',
];
protected $defaultTheme = 'stark';
protected function setUp() {
parent::setUp();
$account = $this
->drupalCreateUser([
'access content',
]);
$this
->drupalLogin($account);
}
public function testMachineName() {
$this
->drupalGet('form-test/machine-name');
$test_values = [
[
'input' => 'Test value !0-9@',
'message' => 'A title that should be transliterated must be equal to the php generated machine name',
'expected' => 'test_value_0_9_',
],
[
'input' => 'Test value',
'message' => 'A title that should not be transliterated must be equal to the php generated machine name',
'expected' => 'test_value',
],
];
$page = $this
->getSession()
->getPage();
$title_1 = $page
->findField('machine_name_1_label');
$machine_name_1_field = $page
->findField('machine_name_1');
$machine_name_2_field = $page
->findField('machine_name_2');
$machine_name_1_wrapper = $machine_name_1_field
->getParent();
$machine_name_2_wrapper = $machine_name_2_field
->getParent();
$machine_name_1_value = $page
->find('css', '#edit-machine-name-1-label-machine-name-suffix .machine-name-value');
$machine_name_2_value = $page
->find('css', '#edit-machine-name-2-label-machine-name-suffix .machine-name-value');
$machine_name_3_value = $page
->find('css', '#edit-machine-name-3-label-machine-name-suffix .machine-name-value');
$button_1 = $page
->find('css', '#edit-machine-name-1-label-machine-name-suffix button.link');
$this
->assertNotEmpty($machine_name_1_value, 'Machine name field 1 must be initialized');
$this
->assertNotEmpty($machine_name_2_value, 'Machine name field 2 must be initialized');
$this
->assertNotEmpty($machine_name_3_value, 'Machine name field 3 must be initialized');
$this
->assertJsCondition('jQuery("#edit-machine-name-3-label-machine-name-suffix .machine-name-value").html() == "yet_another_machine_name"');
if (empty($machine_name_1_value)) {
$this
->fail('Cannot finish test, missing machine name field');
}
foreach ($test_values as $test_info) {
$title_1
->setValue($test_info['input']);
$this
->assertJsCondition('jQuery("#edit-machine-name-1-label-machine-name-suffix .machine-name-value").html() == "' . $test_info['expected'] . '"');
$this
->assertEquals($test_info['expected'], $machine_name_1_value
->getHtml(), $test_info['message']);
$this
->assertEmpty($machine_name_2_value
->getHtml(), 'The second machine name field should still be empty');
}
$this
->assertEquals(TRUE, $machine_name_1_wrapper
->hasClass('visually-hidden'), 'The ID field must not be visible');
$this
->assertEquals(TRUE, $machine_name_2_wrapper
->hasClass('visually-hidden'), 'The ID field must not be visible');
$button_1
->click();
$this
->assertEquals(FALSE, $machine_name_1_wrapper
->hasClass('visually-hidden'), 'The ID field must now be visible');
$this
->assertEquals(TRUE, $machine_name_2_wrapper
->hasClass('visually-hidden'), 'The ID field must not be visible');
$this
->assertEquals($test_values[1]['expected'], $machine_name_1_field
->getValue(), 'The ID field value must be equal to the php generated machine name');
$assert = $this
->assertSession();
$this
->drupalGet('/form-test/form-test-machine-name-validation');
$assert
->buttonExists('Save')
->press();
$assert
->pageTextContains('Machine-readable name field is required.');
$this
->assertTrue($assert
->fieldExists('id')
->hasClass('error'));
$this
->assertFalse($assert
->fieldExists('id2')
->hasClass('error'));
$assert
->fieldExists('Name')
->setValue('test 1');
$assert
->fieldExists('id')
->setValue('test_1');
$assert
->selectExists('snack')
->selectOption('apple');
$assert
->assertWaitOnAjaxRequest();
$assert
->buttonExists('Save')
->press();
$assert
->pageTextContains('The form_test_machine_name_validation_form form has been submitted successfully.');
$assert
->fieldExists('Name')
->setValue('duplicate');
$this
->assertJsCondition('document.forms[0].id.value === "duplicate"');
$assert
->fieldExists('id2')
->setValue('duplicate2');
$assert
->selectExists('snack')
->selectOption('potato');
$assert
->assertWaitOnAjaxRequest();
$assert
->buttonExists('Save')
->press();
$assert
->pageTextContains('The machine-readable name is already in use. It must be unique.');
$this
->assertTrue($assert
->fieldExists('id')
->hasClass('error'));
$this
->assertTrue($assert
->fieldExists('id2')
->hasClass('error'));
}
}