views_ajax_get-8.x-1.0-rc2/tests/src/FunctionalJavascript/ExposedFilterViewsAjaxGetTest.php
tests/src/FunctionalJavascript/ExposedFilterViewsAjaxGetTest.php
<?php
namespace Drupal\Tests\views_ajax_get\FunctionalJavascript;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
/**
* Tests basic AJAX functionality of Views exposed forms using GET requests.
*
* @group views_ajax_get
*/
class ExposedFilterViewsAjaxGetTest extends WebDriverTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['views_ajax_get_cache_test'];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* Tests if exposed filtering via AJAX works for the "Content" View.
*/
public function testExposedFiltering() {
// Create a Content type and two test nodes.
$this->createContentType(['type' => 'page']);
$this->createNode(['title' => 'Page One']);
$this->createNode(['title' => 'Page Two']);
// Enable page cache.
$config = $this->config('system.performance');
$config->set('cache.page.max_age', 300);
$config->save();
// Visit the test view page to test caching.
$this->drupalGet('views-ajax-get-cache-test');
$this->addAjaxCompleteHandler();
$session = $this->getSession();
// Search for "Page One".
$this->submitForm(['title' => 'Page One'], t('Filter'));
$this->assertSession()->assertWaitOnAjaxRequest();
// Check that the AJAX request was a GET and cache missed first time.
$drupal_settings = $this->getDrupalSettings();
$this->assertEquals('GET', $drupal_settings['viewsAjaxGetMethod']);
$this->assertEquals('MISS', $drupal_settings['viewsAjaxGetCacheHeader']);
// Verify that only the "Page One" Node is present.
$html = $session->getPage()->getHtml();
$this->assertStringContainsString('Page One', $html);
$this->assertStringNotContainsString('Page Two', $html);
// Search for "Page Two".
$this->submitForm(['title' => 'Page Two'], t('Filter'));
$this->assertSession()->assertWaitOnAjaxRequest();
$drupal_settings = $this->getDrupalSettings();
$this->assertEquals('GET', $drupal_settings['viewsAjaxGetMethod']);
$this->assertEquals('MISS', $drupal_settings['viewsAjaxGetCacheHeader']);
// Verify that only the "Page Two" Node is present.
$html = $session->getPage()->getHtml();
$this->assertStringContainsString('Page Two', $html);
$this->assertStringNotContainsString('Page One', $html);
// Search for "Page One".
$this->submitForm(['title' => 'Page One'], t('Filter'));
$this->assertSession()->assertWaitOnAjaxRequest();
// AJAX request should be a get and a hit now.
$drupal_settings = $this->getDrupalSettings();
$this->assertEquals('GET', $drupal_settings['viewsAjaxGetMethod']);
// @todo Check for X-Drupal-Cache header is HIT. Right now it's coming
// up in the XHR response header as MISS, event though it seems to be HIT
// server side.
// Verify that only the "Page One" Node is present.
$html = $session->getPage()->getHtml();
$this->assertStringContainsString('Page One', $html);
$this->assertStringNotContainsString('Page Two', $html);
// Search for "Page Two".
$this->submitForm(['title' => 'Page Two'], t('Filter'));
$this->assertSession()->assertWaitOnAjaxRequest();
$drupal_settings = $this->getDrupalSettings();
$this->assertEquals('GET', $drupal_settings['viewsAjaxGetMethod']);
// @todo Check for X-Drupal-Cache header is HIT. Right now it's coming
// up in the XHR response header as MISS, event though it seems to be HIT
// server side.
// Verify that only the "Page Two" Node is present.
$html = $session->getPage()->getHtml();
$this->assertStringContainsString('Page Two', $html);
$this->assertStringNotContainsString('Page One', $html);
}
/**
* Add an AJAX event handler to get the AJAX response information.
*/
protected function addAjaxCompleteHandler() {
$javascript = <<<JS
(function($, drupalSettings) {
$(document).on('ajaxComplete', function(event, xhr, settings) {
drupalSettings.viewsAjaxGetMethod = settings.type;
drupalSettings.viewsAjaxGetCacheHeader = xhr.getResponseHeader('X-Drupal-Cache');
});
}(jQuery, drupalSettings));
JS;
$this->getSession()->executeScript($javascript);
}
}
