View source
<?php
namespace Drupal\FunctionalJavascriptTests\Ajax;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
class AjaxFormPageCacheTest extends WebDriverTestBase {
protected static $modules = [
'ajax_test',
'ajax_forms_test',
];
protected $defaultTheme = 'classy';
protected function setUp() : void {
parent::setUp();
$config = $this
->config('system.performance');
$config
->set('cache.page.max_age', 300);
$config
->save();
}
protected function getFormBuildId() {
$this
->assertSession()
->elementsCount('xpath', '//input[@name="form_build_id"]', 1);
return $this
->assertSession()
->hiddenFieldExists('form_build_id')
->getValue();
}
public function testSimpleAJAXFormValue() {
$this
->drupalGet('ajax_forms_test_get_form');
$build_id_initial = $this
->getFormBuildId();
$session = $this
->getSession();
$session
->getPage()
->selectFieldOption('select', 'green');
$green_span = $this
->assertSession()
->waitForElement('css', "#ajax_selected_color:contains('green')");
$this
->assertNotNull($green_span, 'DOM update: The selected color SPAN is green.');
$build_id_first_ajax = $this
->getFormBuildId();
$this
->assertNotEquals($build_id_initial, $build_id_first_ajax, 'Build id is changed in the form_build_id element on first AJAX submission');
$session
->getPage()
->selectFieldOption('select', 'red');
$red_span = $this
->assertSession()
->waitForElement('css', "#ajax_selected_color:contains('red')");
$this
->assertNotNull($red_span, 'DOM update: The selected color SPAN is red.');
$build_id_second_ajax = $this
->getFormBuildId();
$this
->assertNotEquals($build_id_first_ajax, $build_id_second_ajax, 'Build id changes on subsequent AJAX submissions');
$session
->reload();
$build_id_from_cache_initial = $this
->getFormBuildId();
$this
->assertEquals($build_id_initial, $build_id_from_cache_initial, 'Build id is the same as on the first request');
$session
->getPage()
->selectFieldOption('select', 'green');
$green_span2 = $this
->assertSession()
->waitForElement('css', "#ajax_selected_color:contains('green')");
$this
->assertNotNull($green_span2, 'DOM update: After reload - the selected color SPAN is green.');
$build_id_from_cache_first_ajax = $this
->getFormBuildId();
$this
->assertNotEquals($build_id_from_cache_initial, $build_id_from_cache_first_ajax, 'Build id is changed in the DOM on first AJAX submission');
$this
->assertNotEquals($build_id_first_ajax, $build_id_from_cache_first_ajax, 'Build id from first user is not reused');
$session
->getPage()
->selectFieldOption('select', 'red');
$red_span2 = $this
->assertSession()
->waitForElement('css', "#ajax_selected_color:contains('red')");
$this
->assertNotNull($red_span2, 'DOM update: After reload - the selected color SPAN is red.');
$build_id_from_cache_second_ajax = $this
->getFormBuildId();
$this
->assertNotEquals($build_id_from_cache_first_ajax, $build_id_from_cache_second_ajax, 'Build id changes on subsequent AJAX submissions');
}
public function testAjaxElementValidation() {
$this
->drupalGet('ajax_validation_test');
$field = $this
->getSession()
->getPage()
->findField('drivertext');
$field
->setValue('some dumb text');
$field
->blur();
$placeholder = $this
->assertSession()
->waitForElement('css', "ul.messages__list li.messages__item em:contains('some dumb text')");
$this
->assertNotNull($placeholder, 'Message structure containing input data located.');
}
}