class ViewAjaxControllerTest in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php \Drupal\Tests\views\Unit\Controller\ViewAjaxControllerTest
@coversDefaultClass \Drupal\views\Controller\ViewAjaxController @group views
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \Drupal\Tests\PHPUnit_Framework_TestCase
- class \Drupal\Tests\views\Unit\Controller\ViewAjaxControllerTest
Expanded class hierarchy of ViewAjaxControllerTest
File
- core/
modules/ views/ tests/ src/ Unit/ Controller/ ViewAjaxControllerTest.php, line 22 - Contains \Drupal\Tests\views\Unit\Controller\ViewAjaxControllerTest.
Namespace
Drupal\Tests\views\Unit\ControllerView source
class ViewAjaxControllerTest extends UnitTestCase {
/**
* The mocked view entity storage.
*
* @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $viewStorage;
/**
* The mocked executable factory.
*
* @var \Drupal\views\ViewExecutableFactory|\PHPUnit_Framework_MockObject_MockObject
*/
protected $executableFactory;
/**
* The tested views ajax controller.
*
* @var \Drupal\views\Controller\ViewAjaxController
*/
protected $viewAjaxController;
/**
* The mocked current path.
*
* @var \Drupal\Core\Path\CurrentPathStack|\PHPUnit_Framework_MockObject_MockObject
*/
protected $currentPath;
/**
* The redirect destination.
*
* @var \Drupal\Core\Routing\RedirectDestinationInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $redirectDestination;
/**
* The renderer.
*
* @var \Drupal\Core\Render\RendererInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $renderer;
/**
* {@inheritdoc}
*/
protected function setUp() {
$this->viewStorage = $this
->getMock('Drupal\\Core\\Entity\\EntityStorageInterface');
$this->executableFactory = $this
->getMockBuilder('Drupal\\views\\ViewExecutableFactory')
->disableOriginalConstructor()
->getMock();
$this->renderer = $this
->getMock('\\Drupal\\Core\\Render\\RendererInterface');
$this->renderer
->expects($this
->any())
->method('render')
->will($this
->returnCallback(function (array &$elements) {
$elements['#attached'] = [];
return isset($elements['#markup']) ? $elements['#markup'] : '';
}));
$this->renderer
->expects($this
->any())
->method('executeInRenderContext')
->willReturnCallback(function (RenderContext $context, callable $callable) {
return $callable();
});
$this->currentPath = $this
->getMockBuilder('Drupal\\Core\\Path\\CurrentPathStack')
->disableOriginalConstructor()
->getMock();
$this->redirectDestination = $this
->getMock('\\Drupal\\Core\\Routing\\RedirectDestinationInterface');
$this->viewAjaxController = new ViewAjaxController($this->viewStorage, $this->executableFactory, $this->renderer, $this->currentPath, $this->redirectDestination);
$element_info_manager = $this
->getMock('\\Drupal\\Core\\Render\\ElementInfoManagerInterface');
$request_stack = new RequestStack();
$request_stack
->push(new Request());
$args = [
$this
->getMock('\\Drupal\\Core\\Controller\\ControllerResolverInterface'),
$this
->getMock('\\Drupal\\Core\\Theme\\ThemeManagerInterface'),
$element_info_manager,
$this
->getMock('\\Drupal\\Core\\Render\\PlaceholderGeneratorInterface'),
$this
->getMock('\\Drupal\\Core\\Render\\RenderCacheInterface'),
$request_stack,
[
'required_cache_contexts' => [
'languages:language_interface',
'theme',
],
],
];
$this->renderer = $this
->getMockBuilder('Drupal\\Core\\Render\\Renderer')
->setConstructorArgs($args)
->setMethods(NULL)
->getMock();
$container = new ContainerBuilder();
$container
->set('renderer', $this->renderer);
\Drupal::setContainer($container);
}
/**
* Tests missing view_name and view_display_id
*
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function testMissingViewName() {
$request = new Request();
$this->viewAjaxController
->ajaxView($request);
}
/**
* Tests with view_name and view_display_id but not existing view.
*
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function testMissingView() {
$request = new Request();
$request->request
->set('view_name', 'test_view');
$request->request
->set('view_display_id', 'page_1');
$this->viewStorage
->expects($this
->once())
->method('load')
->with('test_view')
->will($this
->returnValue(FALSE));
$this->viewAjaxController
->ajaxView($request);
}
/**
* Tests a view without having access to it.
*
* @expectedException \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
*/
public function testAccessDeniedView() {
$request = new Request();
$request->request
->set('view_name', 'test_view');
$request->request
->set('view_display_id', 'page_1');
$view = $this
->getMockBuilder('Drupal\\views\\Entity\\View')
->disableOriginalConstructor()
->getMock();
$this->viewStorage
->expects($this
->once())
->method('load')
->with('test_view')
->will($this
->returnValue($view));
$executable = $this
->getMockBuilder('Drupal\\views\\ViewExecutable')
->disableOriginalConstructor()
->getMock();
$executable
->expects($this
->once())
->method('access')
->will($this
->returnValue(FALSE));
$this->executableFactory
->expects($this
->once())
->method('get')
->with($view)
->will($this
->returnValue($executable));
$this->viewAjaxController
->ajaxView($request);
}
/**
* Tests a valid view without arguments pagers etc.
*/
public function testAjaxView() {
$request = new Request();
$request->request
->set('view_name', 'test_view');
$request->request
->set('view_display_id', 'page_1');
list($view, $executable) = $this
->setupValidMocks();
$display_handler = $this
->getMockBuilder('Drupal\\views\\Plugin\\views\\display\\DisplayPluginBase')
->disableOriginalConstructor()
->getMock();
// Ensure that the pager element is not set.
$display_handler
->expects($this
->never())
->method('setOption');
$display_collection = $this
->getMockBuilder('Drupal\\views\\DisplayPluginCollection')
->disableOriginalConstructor()
->getMock();
$display_collection
->expects($this
->any())
->method('get')
->with('page_1')
->will($this
->returnValue($display_handler));
$executable->displayHandlers = $display_collection;
$response = $this->viewAjaxController
->ajaxView($request);
$this
->assertTrue($response instanceof ViewAjaxResponse);
$this
->assertSame($response
->getView(), $executable);
$this
->assertViewResultCommand($response);
}
/**
* Tests a valid view with arguments.
*/
public function testAjaxViewWithArguments() {
$request = new Request();
$request->request
->set('view_name', 'test_view');
$request->request
->set('view_display_id', 'page_1');
$request->request
->set('view_args', 'arg1/arg2');
list($view, $executable) = $this
->setupValidMocks();
$executable
->expects($this
->once())
->method('preview')
->with('page_1', array(
'arg1',
'arg2',
));
$response = $this->viewAjaxController
->ajaxView($request);
$this
->assertTrue($response instanceof ViewAjaxResponse);
$this
->assertViewResultCommand($response);
}
/**
* Tests a valid view with arguments.
*/
public function testAjaxViewWithEmptyArguments() {
$request = new Request();
$request->request
->set('view_name', 'test_view');
$request->request
->set('view_display_id', 'page_1');
// Simulate a request that has a second, empty argument.
$request->request
->set('view_args', 'arg1/');
list($view, $executable) = $this
->setupValidMocks();
$executable
->expects($this
->once())
->method('preview')
->with('page_1', $this
->identicalTo(array(
'arg1',
NULL,
)));
$response = $this->viewAjaxController
->ajaxView($request);
$this
->assertTrue($response instanceof ViewAjaxResponse);
$this
->assertViewResultCommand($response);
}
/**
* Tests a valid view with a pager.
*/
public function testAjaxViewWithPager() {
$request = new Request();
$request->request
->set('view_name', 'test_view');
$request->request
->set('view_display_id', 'page_1');
$dom_id = $this
->randomMachineName(20);
$request->request
->set('view_dom_id', $dom_id);
$request->request
->set('pager_element', '0');
list($view, $executable) = $this
->setupValidMocks();
$display_handler = $this
->getMockBuilder('Drupal\\views\\Plugin\\views\\display\\DisplayPluginBase')
->disableOriginalConstructor()
->getMock();
$display_handler
->expects($this
->once())
->method('setOption', '0')
->with($this
->equalTo('pager_element'));
$display_collection = $this
->getMockBuilder('Drupal\\views\\DisplayPluginCollection')
->disableOriginalConstructor()
->getMock();
$display_collection
->expects($this
->any())
->method('get')
->with('page_1')
->will($this
->returnValue($display_handler));
$executable->displayHandlers = $display_collection;
$response = $this->viewAjaxController
->ajaxView($request);
$this
->assertTrue($response instanceof ViewAjaxResponse);
$commands = $this
->getCommands($response);
$this
->assertEquals('viewsScrollTop', $commands[0]['command']);
$this
->assertEquals('.js-view-dom-id-' . $dom_id, $commands[0]['selector']);
$this
->assertViewResultCommand($response, 1);
}
/**
* Sets up a bunch of valid mocks like the view entity and executable.
*/
protected function setupValidMocks() {
$view = $this
->getMockBuilder('Drupal\\views\\Entity\\View')
->disableOriginalConstructor()
->getMock();
$this->viewStorage
->expects($this
->once())
->method('load')
->with('test_view')
->will($this
->returnValue($view));
$executable = $this
->getMockBuilder('Drupal\\views\\ViewExecutable')
->disableOriginalConstructor()
->getMock();
$executable
->expects($this
->once())
->method('access')
->will($this
->returnValue(TRUE));
$executable
->expects($this
->once())
->method('preview')
->will($this
->returnValue(array(
'#markup' => 'View result',
)));
$this->executableFactory
->expects($this
->once())
->method('get')
->with($view)
->will($this
->returnValue($executable));
return array(
$view,
$executable,
);
}
/**
* Gets the commands entry from the response object.
*
* @param \Drupal\views\Ajax\ViewAjaxResponse $response
* The views ajax response object.
*
* @return mixed
* Returns the commands.
*/
protected function getCommands(ViewAjaxResponse $response) {
$reflection_property = new \ReflectionProperty('Drupal\\views\\Ajax\\ViewAjaxResponse', 'commands');
$reflection_property
->setAccessible(TRUE);
$commands = $reflection_property
->getValue($response);
return $commands;
}
/**
* Ensures that the main view content command is added.
*
* @param \Drupal\views\Ajax\ViewAjaxResponse $response
* The response object.
* @param int $position
* The position where the view content command is expected.
*/
protected function assertViewResultCommand(ViewAjaxResponse $response, $position = 0) {
$commands = $this
->getCommands($response);
$this
->assertEquals('insert', $commands[$position]['command']);
$this
->assertEquals('View result', $commands[$position]['data']);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
UnitTestCase:: |
protected | property | The random generator. | |
UnitTestCase:: |
protected | property | The app root. | |
UnitTestCase:: |
protected | function | Asserts if two arrays are equal by sorting them first. | |
UnitTestCase:: |
protected | function | Mocks a block with a block plugin. | |
UnitTestCase:: |
protected | function | Returns a stub class resolver. | |
UnitTestCase:: |
public | function | Returns a stub config factory that behaves according to the passed in array. | |
UnitTestCase:: |
public | function | Returns a stub config storage that returns the supplied configuration. | |
UnitTestCase:: |
protected | function | Sets up a container with a cache tags invalidator. | |
UnitTestCase:: |
protected | function | Gets the random generator for the utility methods. | |
UnitTestCase:: |
public | function | Returns a stub translation manager that just returns the passed string. | |
UnitTestCase:: |
public | function | Generates a unique random string containing letters and numbers. | |
ViewAjaxControllerTest:: |
protected | property | The mocked current path. | |
ViewAjaxControllerTest:: |
protected | property | The mocked executable factory. | |
ViewAjaxControllerTest:: |
protected | property | The redirect destination. | |
ViewAjaxControllerTest:: |
protected | property | The renderer. | |
ViewAjaxControllerTest:: |
protected | property | The tested views ajax controller. | |
ViewAjaxControllerTest:: |
protected | property | The mocked view entity storage. | |
ViewAjaxControllerTest:: |
protected | function | Ensures that the main view content command is added. | |
ViewAjaxControllerTest:: |
protected | function | Gets the commands entry from the response object. | |
ViewAjaxControllerTest:: |
protected | function |
Overrides UnitTestCase:: |
|
ViewAjaxControllerTest:: |
protected | function | Sets up a bunch of valid mocks like the view entity and executable. | |
ViewAjaxControllerTest:: |
public | function | Tests a view without having access to it. | |
ViewAjaxControllerTest:: |
public | function | Tests a valid view without arguments pagers etc. | |
ViewAjaxControllerTest:: |
public | function | Tests a valid view with arguments. | |
ViewAjaxControllerTest:: |
public | function | Tests a valid view with arguments. | |
ViewAjaxControllerTest:: |
public | function | Tests a valid view with a pager. | |
ViewAjaxControllerTest:: |
public | function | Tests with view_name and view_display_id but not existing view. | |
ViewAjaxControllerTest:: |
public | function | Tests missing view_name and view_display_id |