config('system.performance'); $config->set('cache.page.max_age', 300); $config->save(); } /** * Return the build id of the current form. */ protected function getFormBuildId() { $build_id_fields = $this->xpath('//input[@name="form_build_id"]'); $this->assertEquals(count($build_id_fields), 1, 'One form build id field on the page'); return $build_id_fields[0]->getValue(); } /** * Create a simple form, then submit the form via AJAX to change to it. */ public function testSimpleAJAXFormValue() { $this->drupalGet('ajax_forms_test_get_form'); $this->assertEquals($this->drupalGetHeader('X-Drupal-Cache'), 'MISS', 'Page was not cached.'); $build_id_initial = $this->getFormBuildId(); // Changing the value of a select input element, triggers a AJAX // request/response. The callback on the form responds with three AJAX // commands: // - UpdateBuildIdCommand // - HtmlCommand // - DataCommand $session = $this->getSession(); $session->getPage()->selectFieldOption('select', 'green'); // Wait for the DOM to update. The HtmlCommand will update // #ajax_selected_color to reflect the color change. $green_div = $this->assertSession()->waitForElement('css', "#ajax_selected_color div:contains('green')"); $this->assertNotNull($green_div, 'DOM update: The selected color DIV is green.'); // Confirm the operation of the UpdateBuildIdCommand. $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'); // Changing the value of a select input element, triggers a AJAX // request/response. $session->getPage()->selectFieldOption('select', 'red'); // Wait for the DOM to update. $red_div = $this->assertSession()->waitForElement('css', "#ajax_selected_color div:contains('red')"); $this->assertNotNull($red_div, 'DOM update: The selected color DIV is red.'); // Confirm the operation of the UpdateBuildIdCommand. $build_id_second_ajax = $this->getFormBuildId(); $this->assertNotEquals($build_id_first_ajax, $build_id_second_ajax, 'Build id changes on subsequent AJAX submissions'); // Emulate a push of the reload button and then repeat the test sequence // this time with a page loaded from the cache. $session->reload(); $this->assertEquals($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.'); $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'); // Changing the value of a select input element, triggers a AJAX // request/response. $session->getPage()->selectFieldOption('select', 'green'); // Wait for the DOM to update. $green_div2 = $this->assertSession()->waitForElement('css', "#ajax_selected_color div:contains('green')"); $this->assertNotNull($green_div2, 'DOM update: After reload - the selected color DIV 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 simpletest-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'); // Changing the value of a select input element, triggers a AJAX // request/response. $session->getPage()->selectFieldOption('select', 'red'); // Wait for the DOM to update. $red_div2 = $this->assertSession()->waitForElement('css', "#ajax_selected_color div:contains('red')"); $this->assertNotNull($red_div2, 'DOM update: After reload - the selected color DIV 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'); } /** * Tests that updating the text field trigger an AJAX request/response. * * @see \Drupal\system\Tests\Ajax\ElementValidationTest::testAjaxElementValidation() */ public function testAjaxElementValidation() { $this->drupalGet('ajax_validation_test'); // Changing the value of the textfield will trigger an AJAX // request/response. $this->getSession()->getPage()->fillField('drivertext', 'some dumb text'); // When the AJAX command updates the DOM a