1.20.x views_ajax.test public ViewsAjaxTest::testAjaxView()

Tests an ajax and non-ajax view.

File

modules/views/tests/views_ajax.test, line 60
Definition of ViewsAjaxTest.

Class

ViewsAjaxTest
Tests views ajax display.

Code

public function testAjaxView() {
  $this->backdropCreateNode();
  $this->backdropGet('test_ajax_view');
  $backdrop_settings = $this->backdropGetSettings();

  $this->assertTrue(isset($backdrop_settings['views']['ajax_path']), 'The Ajax callback path is set in backdropSettings.');
  $this->assertEqual(count($backdrop_settings['views']['ajaxViews']), 1);
  $view_entry = current(array_keys($backdrop_settings['views']['ajaxViews']));
  $this->assertEqual($backdrop_settings['views']['ajaxViews'][$view_entry]['view_name'], 'test_ajax', 'The view\'s ajaxViews array entry has the correct \'view_name\' key.');
  $this->assertEqual($backdrop_settings['views']['ajaxViews'][$view_entry]['view_display_id'], 'page', 'The view\'s ajaxViews array entry has the correct \'view_display_id\' key.');

  $post = array(
    'view_name' => 'test_ajax',
    'view_display_id' => 'page',
  );

  $response = $this->simpleAjaxPost('views/ajax', 'application/json', $post);
  $data = backdrop_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'], '.view-dom-id-') === 0);

  $this->backdropSetContent($data[1]['data']);
  $result = $this->xpath('//div[contains(@class, "views-row")]');
  $this->assertEqual(count($result), 4, 'Ensure that all site node are rendered in the HTML.');

  $post = array(
    'view_name' => 'test_noajax',
    'view_display_id' => 'default',
  );

  $response = $this->simpleAjaxPost('views/ajax', 'application/json', $post);
  $data = backdrop_json_decode($response);

  // We get an ajax response with no commands instead of a 403 if
  // the view cannot be accessed.
  foreach ($data as $item) {
    $this->assertIdentical('settings', $item['command']);
    $this->assertTrue(empty($item['data']));
  }
}