Issue #1792766 by dawehner, tim.plunkett: Split ViewTest between ViewStorageTest and ViewExecutableTest.
parent
b412ae1ade
commit
e127cd6d44
|
@ -1,18 +1,30 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Definition of Drupal\views\Tests\ViewExecutable.
|
||||
* @file
|
||||
* Definition of Drupal\views\Tests\ViewExecutableTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\views\Tests;
|
||||
|
||||
use Drupal\views\ViewExecutable;
|
||||
use Drupal\views\Plugin\views\display\DefaultDisplay;
|
||||
use Drupal\views\Plugin\views\display\Page;
|
||||
|
||||
/**
|
||||
* Tests the ViewExecutable class.
|
||||
*
|
||||
* @see Drupal\views\ViewExecutableExecutable
|
||||
* @see Drupal\views\ViewExecutable
|
||||
*/
|
||||
class ViewExecutableTest extends ViewTestBase {
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('comment');
|
||||
|
||||
/**
|
||||
* Properties that should be stored in the configuration.
|
||||
*
|
||||
|
@ -47,6 +59,13 @@ class ViewExecutableTest extends ViewTestBase {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides Drupal\views\Tests\ViewTestBase::getBasicView().
|
||||
*/
|
||||
protected function getBasicView() {
|
||||
return $this->createViewFromConfig('test_destroy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the generation of the executable object.
|
||||
*/
|
||||
|
@ -75,9 +94,9 @@ class ViewExecutableTest extends ViewTestBase {
|
|||
$count = count($view->displayHandlers);
|
||||
$this->assertEqual($count, 3, format_string('Make sure all display handlers got instantiated (@count of @count_expected)', array('@count' => $count, '@count_expected' => 3)));
|
||||
// Tests the classes of the instances.
|
||||
$this->assertTrue($view->displayHandlers['default'] instanceof \Drupal\views\Plugin\views\display\DefaultDisplay);
|
||||
$this->assertTrue($view->displayHandlers['page'] instanceof \Drupal\views\Plugin\views\display\Page);
|
||||
$this->assertTrue($view->displayHandlers['page_2'] instanceof \Drupal\views\Plugin\views\display\Page);
|
||||
$this->assertTrue($view->displayHandlers['default'] instanceof DefaultDisplay);
|
||||
$this->assertTrue($view->displayHandlers['page'] instanceof Page);
|
||||
$this->assertTrue($view->displayHandlers['page_2'] instanceof Page);
|
||||
|
||||
// After initializing the default display is the current used display.
|
||||
$this->assertEqual($view->current_display, 'default');
|
||||
|
@ -103,4 +122,81 @@ class ViewExecutableTest extends ViewTestBase {
|
|||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the deconstructor to be sure that every kind of heavy objects are removed.
|
||||
*/
|
||||
function testDestroy() {
|
||||
$view = $this->getView();
|
||||
|
||||
$view->preview();
|
||||
$view->destroy();
|
||||
|
||||
$this->assertViewDestroy($view);
|
||||
|
||||
// Manipulate the display variable to test a previous bug.
|
||||
$view = $this->getView();
|
||||
$view->preview();
|
||||
|
||||
$view->destroy();
|
||||
$this->assertViewDestroy($view);
|
||||
}
|
||||
|
||||
function assertViewDestroy($view) {
|
||||
$this->assertFalse(isset($view->displayHandlers['default']), 'Make sure all displays are destroyed.');
|
||||
$this->assertFalse(isset($view->displayHandlers['attachment_1']), 'Make sure all displays are destroyed.');
|
||||
|
||||
$this->assertFalse(isset($view->filter), 'Make sure all filter handlers are destroyed');
|
||||
$this->assertFalse(isset($view->field), 'Make sure all field handlers are destroyed');
|
||||
$this->assertFalse(isset($view->argument), 'Make sure all argument handlers are destroyed');
|
||||
$this->assertFalse(isset($view->relationship), 'Make sure all relationship handlers are destroyed');
|
||||
$this->assertFalse(isset($view->sort), 'Make sure all sort handlers are destroyed');
|
||||
$this->assertFalse(isset($view->area), 'Make sure all area handlers are destroyed');
|
||||
|
||||
$keys = array('current_display', 'display_handler', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'result', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'many_to_one_tables');
|
||||
foreach ($keys as $key) {
|
||||
$this->assertFalse(isset($view->{$key}), $key);
|
||||
}
|
||||
$this->assertEqual($view->built, FALSE);
|
||||
$this->assertEqual($view->executed, FALSE);
|
||||
$this->assertEqual($view->build_info, array());
|
||||
$this->assertEqual($view->attachment_before, '');
|
||||
$this->assertEqual($view->attachment_after, '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests ViewExecutable::viewsHandlerTypes().
|
||||
*/
|
||||
public function testViewsHandlerTypes() {
|
||||
$types = ViewExecutable::viewsHandlerTypes();
|
||||
foreach (array('field', 'filter', 'argument', 'sort', 'header', 'footer', 'empty') as $type) {
|
||||
$this->assertTrue(isset($types[$type]));
|
||||
// @todo The key on the display should be footers, headers and empties
|
||||
// or something similar instead of the singular, but so long check for
|
||||
// this special case.
|
||||
if (isset($types[$type]['type']) && $types[$type]['type'] == 'area') {
|
||||
$this->assertEqual($types[$type]['plural'], $type);
|
||||
}
|
||||
else {
|
||||
$this->assertEqual($types[$type]['plural'], $type . 's');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function testValidate() {
|
||||
// Test a view with multiple displays.
|
||||
// Validating a view shouldn't change the active display.
|
||||
// @todo Create an extra validation view.
|
||||
$this->view->setDisplay('page_1');
|
||||
|
||||
$this->view->validate();
|
||||
|
||||
$this->assertEqual('page_1', $this->view->current_display, "The display should be constant while validating");
|
||||
|
||||
// @todo Write real tests for the validation.
|
||||
// In general the following things could be tested:
|
||||
// - Deleted displays shouldn't be validated
|
||||
// - Multiple displays are validating and the errors are merged together.
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,17 +7,19 @@
|
|||
|
||||
namespace Drupal\views\Tests;
|
||||
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
use Drupal\views\ViewExecutable;
|
||||
use Drupal\views\ViewStorageController;
|
||||
use Drupal\views\ViewStorage;
|
||||
use Drupal\views\ViewDisplay;
|
||||
use Drupal\views\Plugin\views\display\Page;
|
||||
use Drupal\views\Plugin\views\display\DefaultDisplay;
|
||||
use Drupal\views\Plugin\views\display\Feed;
|
||||
|
||||
/**
|
||||
* Tests the functionality of the ViewStorageController.
|
||||
* Tests the functionality of ViewStorage and ViewStorageController.
|
||||
*
|
||||
* @see Drupal\views\ViewStorage
|
||||
* @see Drupal\views\ViewStorageController
|
||||
*/
|
||||
class ViewStorageTest extends WebTestBase {
|
||||
class ViewStorageTest extends ViewTestBase {
|
||||
|
||||
/**
|
||||
* Properties that should be stored in the configuration.
|
||||
|
@ -56,7 +58,7 @@ class ViewStorageTest extends WebTestBase {
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('views', 'node', 'search', 'comment', 'taxonomy');
|
||||
public static $modules = array('node', 'search', 'comment', 'taxonomy');
|
||||
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
|
@ -141,7 +143,7 @@ class ViewStorageTest extends WebTestBase {
|
|||
// Check that all of these machine names match.
|
||||
$this->assertIdentical(array_keys($all_configuration_entities), array_map($prefix_map, $all_config), 'All loaded elements match.');
|
||||
|
||||
// Make sure that loaded default views get a uuid.
|
||||
// Make sure that loaded default views get a UUID.
|
||||
$view = views_get_view('frontpage');
|
||||
$this->assertTrue($view->storage->uuid());
|
||||
}
|
||||
|
@ -175,11 +177,11 @@ class ViewStorageTest extends WebTestBase {
|
|||
$this->assertIdentical($values[$property], $created->{$property}, format_string('Property value: @property matches configuration value.', array('@property' => $property)));
|
||||
}
|
||||
|
||||
// Check the uuid of the loaded View.
|
||||
// Check the UUID of the loaded View.
|
||||
$created->set('name', 'glossary_new');
|
||||
$created->save();
|
||||
$created_loaded = $this->loadView('glossary_new');
|
||||
$this->assertIdentical($created->uuid(), $created_loaded->uuid(), 'The created uuid has been saved correctly.');
|
||||
$this->assertIdentical($created->uuid(), $created_loaded->uuid(), 'The created UUID has been saved correctly.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -342,12 +344,12 @@ class ViewStorageTest extends WebTestBase {
|
|||
$random_title = $this->randomName();
|
||||
|
||||
$id = $view->addDisplay('page', $random_title);
|
||||
$this->assertEqual($id, 'page_1', format_string('Make sure the first display (%id_new) has the expected id (%id)', array('%id_new' => $id, '%id' => 'page_1')));
|
||||
$this->assertEqual($id, 'page_1', format_string('Make sure the first display (%id_new) has the expected ID (%id)', array('%id_new' => $id, '%id' => 'page_1')));
|
||||
$this->assertEqual($view->display[$id]['display_title'], $random_title);
|
||||
|
||||
$random_title = $this->randomName();
|
||||
$id = $view->addDisplay('page', $random_title);
|
||||
$this->assertEqual($id, 'page_2', format_string('Make sure the second display (%id_new) has the expected id (%id)', array('%id_new' => $id, '%id' => 'page_2')));
|
||||
$this->assertEqual($id, 'page_2', format_string('Make sure the second display (%id_new) has the expected ID (%id)', array('%id_new' => $id, '%id' => 'page_2')));
|
||||
$this->assertEqual($view->display[$id]['display_title'], $random_title);
|
||||
|
||||
$id = $view->addDisplay('page');
|
||||
|
@ -356,29 +358,29 @@ class ViewStorageTest extends WebTestBase {
|
|||
// Tests Drupal\views\ViewStorage::generateDisplayId().
|
||||
// @todo Sadly this method is not public so it cannot be tested.
|
||||
// $view = $this->controller->create(array());
|
||||
// $this->assertEqual($view->generateDisplayId('default'), 'default', 'The plugin id for default is always default.');
|
||||
// $this->assertEqual($view->generateDisplayId('feed'), 'feed_1', 'The generated id for the first instance of a plugin type should have an suffix of _1.');
|
||||
// $this->assertEqual($view->generateDisplayId('default'), 'default', 'The plugin ID for default is always default.');
|
||||
// $this->assertEqual($view->generateDisplayId('feed'), 'feed_1', 'The generated ID for the first instance of a plugin type should have an suffix of _1.');
|
||||
// $view->addDisplay('feed', 'feed title');
|
||||
// $this->assertEqual($view->generateDisplayId('feed'), 'feed_2', 'The generated id for the first instance of a plugin type should have an suffix of _2.');
|
||||
// $this->assertEqual($view->generateDisplayId('feed'), 'feed_2', 'The generated ID for the first instance of a plugin type should have an suffix of _2.');
|
||||
|
||||
// Tests Drupal\views\ViewStorage::newDisplay().
|
||||
$view = $this->controller->create(array());
|
||||
$view->newDisplay('default');
|
||||
|
||||
$display = $view->newDisplay('page');
|
||||
$this->assertTrue($display instanceof \Drupal\views\Plugin\views\display\Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_1'] instanceof \Drupal\views\Plugin\views\display\Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_1']->default_display instanceof \Drupal\views\Plugin\views\display\DefaultDisplay);
|
||||
$this->assertTrue($display instanceof Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_1'] instanceof Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_1']->default_display instanceof DefaultDisplay);
|
||||
|
||||
$display = $view->newDisplay('page');
|
||||
$this->assertTrue($display instanceof \Drupal\views\Plugin\views\display\Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_2'] instanceof \Drupal\views\Plugin\views\display\Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_2']->default_display instanceof \Drupal\views\Plugin\views\display\DefaultDisplay);
|
||||
$this->assertTrue($display instanceof Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_2'] instanceof Page);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['page_2']->default_display instanceof DefaultDisplay);
|
||||
|
||||
$display = $view->newDisplay('feed');
|
||||
$this->assertTrue($display instanceof \Drupal\views\Plugin\views\display\Feed);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['feed_1'] instanceof \Drupal\views\Plugin\views\display\Feed);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['feed_1']->default_display instanceof \Drupal\views\Plugin\views\display\DefaultDisplay);
|
||||
$this->assertTrue($display instanceof Feed);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['feed_1'] instanceof Feed);
|
||||
$this->assertTrue($view->getExecutable()->displayHandlers['feed_1']->default_display instanceof DefaultDisplay);
|
||||
|
||||
// Tests item related methods().
|
||||
$view = $this->controller->create(array('base_table' => 'views_test_data'));
|
||||
|
@ -429,4 +431,43 @@ class ViewStorageTest extends WebTestBase {
|
|||
$this->assertEqual($view->getItems('field', $display_id), $expected_items);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the createDuplicate() View method.
|
||||
*/
|
||||
public function testCreateDuplicate() {
|
||||
$view = views_get_view('archive');
|
||||
$copy = $view->createDuplicate();
|
||||
|
||||
$this->assertTrue($copy instanceof ViewStorage, 'The copied object is a View.');
|
||||
|
||||
// Check that the original view and the copy have different UUIDs.
|
||||
$this->assertNotIdentical($view->storage->uuid(), $copy->uuid(), 'The copied view has a new UUID.');
|
||||
|
||||
// Check the 'name' (ID) is using the View objects default value ('') as it
|
||||
// gets unset.
|
||||
$this->assertIdentical($copy->id(), '', 'The ID has been reset.');
|
||||
|
||||
// Check the other properties.
|
||||
// @todo Create a reusable property on the base test class for these?
|
||||
$config_properties = array(
|
||||
'disabled',
|
||||
'api_version',
|
||||
'description',
|
||||
'tag',
|
||||
'base_table',
|
||||
'human_name',
|
||||
'core',
|
||||
);
|
||||
|
||||
foreach ($config_properties as $property) {
|
||||
$this->assertIdentical($view->storage->{$property}, $copy->{$property}, format_string('@property property is identical.', array('@property' => $property)));
|
||||
}
|
||||
|
||||
// Check the displays are the same.
|
||||
foreach ($view->storage->display as $id => $display) {
|
||||
// assertIdentical will not work here.
|
||||
$this->assertEqual($display, $copy->display[$id], format_string('The @display display has been copied correctly.', array('@display' => $id)));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,155 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Definition of Drupal\views\Tests\ViewTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\views\Tests;
|
||||
|
||||
use Drupal\views\ViewExecutable;
|
||||
use Drupal\views\ViewStorage;
|
||||
|
||||
/**
|
||||
* Views class tests.
|
||||
*/
|
||||
class ViewTest extends ViewTestBase {
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('comment');
|
||||
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'Views object',
|
||||
'description' => 'Tests some functionality of the View class.',
|
||||
'group' => 'Views',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the deconstructor to be sure that every kind of heavy objects are removed.
|
||||
*/
|
||||
function testDestroy() {
|
||||
$view = $this->getView();
|
||||
|
||||
$view->preview();
|
||||
$view->destroy();
|
||||
|
||||
$this->assertViewDestroy($view);
|
||||
|
||||
// Manipulate the display variable to test a previous bug.
|
||||
$view = $this->getView();
|
||||
$view->preview();
|
||||
|
||||
$view->destroy();
|
||||
$this->assertViewDestroy($view);
|
||||
}
|
||||
|
||||
function assertViewDestroy($view) {
|
||||
$this->assertFalse(isset($view->displayHandlers['default']), 'Make sure all displays are destroyed.');
|
||||
$this->assertFalse(isset($view->displayHandlers['attachment_1']), 'Make sure all displays are destroyed.');
|
||||
|
||||
$this->assertFalse(isset($view->filter), 'Make sure all handlers are destroyed');
|
||||
$this->assertFalse(isset($view->field), 'Make sure all handlers are destroyed');
|
||||
$this->assertFalse(isset($view->argument), 'Make sure all handlers are destroyed');
|
||||
$this->assertFalse(isset($view->relationship), 'Make sure all handlers are destroyed');
|
||||
$this->assertFalse(isset($view->sort), 'Make sure all handlers are destroyed');
|
||||
$this->assertFalse(isset($view->area), 'Make sure all handlers are destroyed');
|
||||
|
||||
$keys = array('current_display', 'display_handler', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'result', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'many_to_one_tables');
|
||||
foreach ($keys as $key) {
|
||||
$this->assertFalse(isset($view->{$key}), $key);
|
||||
}
|
||||
$this->assertEqual($view->built, FALSE);
|
||||
$this->assertEqual($view->executed, FALSE);
|
||||
$this->assertEqual($view->build_info, array());
|
||||
$this->assertEqual($view->attachment_before, '');
|
||||
$this->assertEqual($view->attachment_after, '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests ViewExecutable::viewsHandlerTypes().
|
||||
*/
|
||||
public function testViewshandlerTypes() {
|
||||
$types = ViewExecutable::viewsHandlerTypes();
|
||||
foreach (array('field', 'filter', 'argument', 'sort', 'header', 'footer', 'empty') as $type) {
|
||||
$this->assertTrue(isset($types[$type]));
|
||||
// @todo The key on the display should be footers, headers and empties
|
||||
// or something similar instead of the singular, but so long check for
|
||||
// this special case.
|
||||
if (isset($types[$type]['type']) && $types[$type]['type'] == 'area') {
|
||||
$this->assertEqual($types[$type]['plural'], $type);
|
||||
}
|
||||
else {
|
||||
$this->assertEqual($types[$type]['plural'], $type . 's');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function testValidate() {
|
||||
// Test a view with multiple displays.
|
||||
// Validating a view shouldn't change the active display.
|
||||
// @todo: Create an extra validation view.
|
||||
$this->view->setDisplay('page_1');
|
||||
|
||||
$this->view->validate();
|
||||
|
||||
$this->assertEqual('page_1', $this->view->current_display, "The display should be constant while validating");
|
||||
|
||||
// @todo: Write real tests for the validation.
|
||||
// In general the following things could be tested:
|
||||
// - Deleted displays shouldn't be validated
|
||||
// - Multiple displays are validating and the errors are merged together.
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the createDuplicate() View method.
|
||||
*/
|
||||
public function testCreateDuplicate() {
|
||||
$view = views_get_view('archive');
|
||||
$copy = $view->createDuplicate();
|
||||
|
||||
$this->assertTrue($copy instanceof ViewStorage, 'The copied object is a View.');
|
||||
|
||||
// Check that the original view and the copy have different uuids.
|
||||
$this->assertNotIdentical($view->storage->uuid(), $copy->uuid(), 'The copied view has a new uuid.');
|
||||
|
||||
// Check the 'name' (id) is using the View objects default value ('') as it
|
||||
// gets unset.
|
||||
$this->assertIdentical($copy->id(), '', 'The ID has been reset.');
|
||||
|
||||
// Check the other properties.
|
||||
// @todo Create a reusable property on the base test class for these?
|
||||
$config_properties = array(
|
||||
'disabled',
|
||||
'api_version',
|
||||
'description',
|
||||
'tag',
|
||||
'base_table',
|
||||
'human_name',
|
||||
'core',
|
||||
);
|
||||
|
||||
foreach ($config_properties as $property) {
|
||||
$this->assertIdentical($view->storage->{$property}, $copy->{$property}, format_string('@property property is identical.', array('@property' => $property)));
|
||||
}
|
||||
|
||||
// Check the displays are the same.
|
||||
foreach ($view->storage->display as $id => $display) {
|
||||
// assertIdentical will not work here.
|
||||
$this->assertEqual($display, $copy->display[$id], format_string('The @display display has been copied correctly.', array('@display' => $id)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides Drupal\views\Tests\ViewTestBase::getBasicView().
|
||||
*/
|
||||
protected function getBasicView() {
|
||||
return $this->createViewFromConfig('test_destroy');
|
||||
}
|
||||
|
||||
}
|
|
@ -33,5 +33,5 @@ display:
|
|||
id: default
|
||||
position: '0'
|
||||
human_name: ''
|
||||
name: test_view_argument_validate_numeric
|
||||
name: test_view_argument_validate_php
|
||||
tag: ''
|
||||
|
|
Loading…
Reference in New Issue