You are here

public function ViewAjaxTest::testAjaxView in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/modules/views/src/Tests/ViewAjaxTest.php \Drupal\views\Tests\ViewAjaxTest::testAjaxView()

Tests an ajax view.

File

core/modules/views/src/Tests/ViewAjaxTest.php, line 35
Contains \Drupal\views\Tests\ViewAjaxTest.

Class

ViewAjaxTest
Tests the ajax view functionality.

Namespace

Drupal\views\Tests

Code

public function testAjaxView() {
  $this
    ->drupalGet('test_ajax_view');
  $drupal_settings = $this
    ->getDrupalSettings();
  $this
    ->assertTrue(isset($drupal_settings['views']['ajax_path']), 'The Ajax callback path is set in drupalSettings.');
  $this
    ->assertEqual(count($drupal_settings['views']['ajaxViews']), 1);
  $view_entry = array_keys($drupal_settings['views']['ajaxViews'])[0];
  $this
    ->assertEqual($drupal_settings['views']['ajaxViews'][$view_entry]['view_name'], 'test_ajax_view', 'The view\'s ajaxViews array entry has the correct \'view_name\' key.');
  $this
    ->assertEqual($drupal_settings['views']['ajaxViews'][$view_entry]['view_display_id'], 'page_1', 'The view\'s ajaxViews array entry has the correct \'view_display_id\' key.');
  $data = array();
  $data['view_name'] = 'test_ajax_view';
  $data['view_display_id'] = 'test_ajax_view';
  $post = array(
    'view_name' => 'test_ajax_view',
    'view_display_id' => 'page_1',
  );
  $post += $this
    ->getAjaxPageStatePostData();
  $response = $this
    ->drupalPost('views/ajax', 'application/vnd.drupal-ajax', $post);
  $data = Json::decode($response);
  $this
    ->assertTrue(isset($data[0]['settings']['views']['ajaxViews']));

  // Ensure that the view insert command is part of the result.
  $this
    ->assertEqual($data[1]['command'], 'insert');
  $this
    ->assertTrue(strpos($data[1]['selector'], '.js-view-dom-id-') === 0);
  $this
    ->setRawContent($data[1]['data']);
  $result = $this
    ->xpath('//div[contains(@class, "views-row")]');
  $this
    ->assertEqual(count($result), 2, 'Ensure that two items are rendered in the HTML.');
}