Newer
Older
<?php
Dries Buytaert
committed
namespace Drupal\Tests\views\Unit\Plugin\argument_validator;
use Drupal\Tests\UnitTestCase;
use Drupal\views\Plugin\views\argument_validator\Entity;
/**
* @coversDefaultClass \Drupal\views\Plugin\views\argument_validator\Entity
* @group views
*/
class EntityTest extends UnitTestCase {
/**
* The view executable.
*
* @var \Drupal\views\ViewExecutable
*/
protected $executable;
/**
* The view display.
*
* @var \Drupal\views\Plugin\views\display\DisplayPluginBase
*/
protected $display;
/**
* The entity manager.
*
Alex Pott
committed
* @var \PHPUnit_Framework_MockObject_MockObject|\Drupal\Core\Entity\EntityManagerInterface
*/
protected $entityManager;
/**
* The tested argument validator.
*
* @var \Drupal\views\Plugin\views\argument_validator\Entity
*/
protected $argumentValidator;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
Alex Pott
committed
$this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
$mock_entity = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [], '', FALSE, TRUE, TRUE, ['bundle', 'access']);
$mock_entity->expects($this->any())
->method('bundle')
->will($this->returnValue('test_bundle'));
$mock_entity->expects($this->any())
->method('access')
->will($this->returnValueMap([
['test_op', NULL, FALSE, TRUE],
['test_op_2', NULL, FALSE, FALSE],
['test_op_3', NULL, FALSE, TRUE],
]));
$mock_entity_bundle_2 = $this->getMockForAbstractClass('Drupal\Core\Entity\Entity', [], '', FALSE, TRUE, TRUE, ['bundle', 'access']);
$mock_entity_bundle_2->expects($this->any())
->method('bundle')
->will($this->returnValue('test_bundle_2'));
$mock_entity_bundle_2->expects($this->any())
->method('access')
->will($this->returnValueMap([
['test_op', NULL, FALSE, FALSE],
['test_op_2', NULL, FALSE, FALSE],
['test_op_3', NULL, FALSE, TRUE],
]));
catch
committed
$storage = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
// Setup values for IDs passed as strings or numbers.
$value_map = [
[[], []],
[[1], [1 => $mock_entity]],
[['1'], [1 => $mock_entity]],
[[1, 2], [1 => $mock_entity, 2 => $mock_entity_bundle_2]],
[['1', '2'], [1 => $mock_entity, 2 => $mock_entity_bundle_2]],
[[2], [2 => $mock_entity_bundle_2]],
[['2'], [2 => $mock_entity_bundle_2]],
];
catch
committed
$storage->expects($this->any())
->method('loadMultiple')
->will($this->returnValueMap($value_map));
$this->entityManager->expects($this->any())
catch
committed
->method('getStorage')
->with('entity_test')
catch
committed
->will($this->returnValue($storage));
$this->executable = $this->getMockBuilder('Drupal\views\ViewExecutable')
->disableOriginalConstructor()
->getMock();
$this->display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
->disableOriginalConstructor()
->getMock();
$definition = [
'entity_type' => 'entity_test',
];
$this->argumentValidator = new Entity([], 'entity_test', $definition, $this->entityManager);
}
/**
* Tests the validate argument method with no access and bundles.
*
* @see \Drupal\views\Plugin\views\argument_validator\Entity::validateArgument()
*/
public function testValidateArgumentNoAccess() {
$options = [];
$options['access'] = FALSE;
$options['bundles'] = [];
$this->argumentValidator->init($this->executable, $this->display, $options);
$this->assertFalse($this->argumentValidator->validateArgument(3));
$this->assertFalse($this->argumentValidator->validateArgument(''));
$this->assertTrue($this->argumentValidator->validateArgument(1));
$this->assertTrue($this->argumentValidator->validateArgument(2));
$this->assertFalse($this->argumentValidator->validateArgument('1,2'));
}
/**
* Tests the validate argument method with access and no bundles.
*
* @see \Drupal\views\Plugin\views\argument_validator\Entity::validateArgument()
*/
public function testValidateArgumentAccess() {
$options = [];
$options['access'] = TRUE;
$options['bundles'] = [];
$options['operation'] = 'test_op';
$this->argumentValidator->init($this->executable, $this->display, $options);
$this->assertFalse($this->argumentValidator->validateArgument(3));
$this->assertFalse($this->argumentValidator->validateArgument(''));
$this->assertTrue($this->argumentValidator->validateArgument(1));
$options = [];
$options['access'] = TRUE;
$options['bundles'] = [];
$options['operation'] = 'test_op_2';
$this->argumentValidator->init($this->executable, $this->display, $options);
$this->assertFalse($this->argumentValidator->validateArgument(3));
$this->assertFalse($this->argumentValidator->validateArgument(''));
$this->assertFalse($this->argumentValidator->validateArgument(1));
$this->assertFalse($this->argumentValidator->validateArgument(2));
}
/**
* Tests the validate argument method with bundle checking.
*/
public function testValidateArgumentBundle() {
$options = [];
$options['access'] = FALSE;
$options['bundles'] = ['test_bundle' => 1];
$this->argumentValidator->init($this->executable, $this->display, $options);
$this->assertTrue($this->argumentValidator->validateArgument(1));
$this->assertFalse($this->argumentValidator->validateArgument(2));
}
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/**
* @covers ::calculateDependencies
*/
public function testCalculateDependencies() {
// Create an entity manager, storage, entity type, and entity to mock the
// loading of entities providing bundles.
$entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
$storage = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
$entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
$mock_entity = $this->getMock('Drupal\Core\Entity\EntityInterface');
$mock_entity->expects($this->any())
->method('getConfigDependencyKey')
->willReturn('config');
$mock_entity->expects($this->any())
->method('getConfigDependencyName')
->willReturn('test_bundle');
$storage->expects($this->any())
->method('loadMultiple')
->with(['test_bundle'])
->willReturn(['test_bundle' => $mock_entity]);
$entity_type->expects($this->any())
->method('getBundleEntityType')
->willReturn('entity_test_bundle');
$entityManager->expects($this->any())
->method('getDefinition')
->with('entity_test')
->willReturn($entity_type);
$entityManager->expects($this->any())
->method('hasHandler')
->with('entity_test_bundle', 'storage')
->willReturn(TRUE);
$entityManager->expects($this->any())
->method('getStorage')
->with('entity_test_bundle')
->willReturn($storage);
// Set up the argument validator.
$argumentValidator = new Entity([], 'entity_test', ['entity_type' => 'entity_test'], $entityManager);
$options = [];
$options['access'] = FALSE;
$options['bundles'] = ['test_bundle' => 1];
$argumentValidator->init($this->executable, $this->display, $options);
Alex Pott
committed
$this->assertEquals(['config' => ['test_bundle']], $argumentValidator->calculateDependencies());
/**
* Tests the validate argument method with multiple argument splitting.
*/
public function testValidateArgumentMultiple() {
$options = [];
$options['access'] = TRUE;
$options['bundles'] = [];
$options['operation'] = 'test_op';
$options['multiple'] = TRUE;
$this->argumentValidator->init($this->executable, $this->display, $options);
$this->assertTrue($this->argumentValidator->validateArgument('1'));
$this->assertFalse($this->argumentValidator->validateArgument('2'));
$this->assertFalse($this->argumentValidator->validateArgument('1,2'));
$this->assertFalse($this->argumentValidator->validateArgument('1+2'));
$options = [];
$options['access'] = TRUE;
$options['bundles'] = [];
$options['operation'] = 'test_op_3';
$options['multiple'] = TRUE;
$this->argumentValidator->init($this->executable, $this->display, $options);
$this->assertTrue($this->argumentValidator->validateArgument('1,2'));
$this->assertTrue($this->argumentValidator->validateArgument('1+2'));
}
}