Mercurial > hg > isophonics-drupal-site
diff core/modules/views/src/Tests/ViewAjaxTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/views/src/Tests/ViewAjaxTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,74 @@ +<?php + +namespace Drupal\views\Tests; + +use Drupal\Component\Serialization\Json; +use Drupal\Core\EventSubscriber\MainContentViewSubscriber; + +/** + * Tests the ajax view functionality. + * + * @group views + */ +class ViewAjaxTest extends ViewTestBase { + + /** + * Views used by this test. + * + * @var array + */ + public static $testViews = ['test_ajax_view', 'test_view']; + + protected function setUp() { + parent::setUp(); + + $this->enableViewsTestModule(); + } + + /** + * Tests an ajax view. + */ + 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 = []; + $data['view_name'] = 'test_ajax_view'; + $data['view_display_id'] = 'test_ajax_view'; + + $post = [ + 'view_name' => 'test_ajax_view', + 'view_display_id' => 'page_1', + ]; + $post += $this->getAjaxPageStatePostData(); + $response = $this->drupalPost('views/ajax', '', $post, ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']]); + $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.'); + } + + /** + * Ensures that non-ajax view cannot be accessed via an ajax HTTP request. + */ + public function testNonAjaxViewViaAjax() { + $this->drupalPost('views/ajax', '', ['view_name' => 'test_ajax_view', 'view_display_id' => 'default'], ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']]); + $this->assertResponse(200); + $this->drupalPost('views/ajax', '', ['view_name' => 'test_view', 'view_display_id' => 'default'], ['query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax']]); + $this->assertResponse(403); + } + +}