class AfterParseBaseTest in Feeds 8.3
@coversDefaultClass \Drupal\feeds\EventSubscriber\AfterParseBase @group feeds
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \PHPUnit\Framework\TestCase uses PhpunitCompatibilityTrait
- class \Drupal\Tests\feeds\Unit\FeedsUnitTestCase uses FeedsMockingTrait, FeedsReflectionTrait
- class \Drupal\Tests\feeds\Unit\EventSubscriber\AfterParseBaseTest
- class \Drupal\Tests\feeds\Unit\FeedsUnitTestCase uses FeedsMockingTrait, FeedsReflectionTrait
Expanded class hierarchy of AfterParseBaseTest
File
- tests/
src/ Unit/ EventSubscriber/ AfterParseBaseTest.php, line 19
Namespace
Drupal\Tests\feeds\Unit\EventSubscriberView source
class AfterParseBaseTest extends FeedsUnitTestCase {
/**
* The mocked subscriber object.
*
* @var \Drupal\feeds\EventSubscriber\AfterParseBase
*/
protected $subscriber;
/**
* The parser result.
*
* @var \Drupal\feeds\Result\ParserResult
*/
protected $parserResult;
/**
* The mocked parse event.
*
* @var \Drupal\feeds\Event\ParseEvent
*/
protected $event;
/**
* {@inheritdoc}
*/
public function setUp() {
parent::setUp();
// Create the event subscriber.
$this->subscriber = $this
->getMockBuilder(AfterParseBase::class)
->setMethods([
'alterItem',
])
->getMock();
// Create a parser result.
$this->parserResult = new ParserResult();
// Create the event that returns the parser result.
$this->event = $this
->getMockBuilder(ParseEvent::class)
->disableOriginalConstructor()
->setMethods([
'getParserResult',
])
->getMock();
$this->event
->expects($this
->any())
->method('getParserResult')
->willReturn($this->parserResult);
}
/**
* Tests that a list of items can get manipulated.
*
* @covers ::afterParse
*/
public function testAfterParse() {
// Create two items and add these to the parser result.
$item1 = new DynamicItem();
$item1
->set('title', 'Foo');
$item2 = new DynamicItem();
$item2
->set('title', 'Bar');
$this->parserResult
->addItems([
$item1,
$item2,
]);
// Implement AfterParseBase::alterItem() by adding a '1' to each item's
// title.
$this->subscriber
->expects($this
->exactly(2))
->method('alterItem')
->will($this
->returnCallback(function (ItemInterface $item, ParseEvent $event) {
$item
->set('title', $item
->get('title') . '1');
}));
// Run subscriber.
$this->subscriber
->afterParse($this->event);
// Assert that each item got a '1' added.
$this
->assertEquals('Foo1', $item1
->get('title'));
$this
->assertEquals('Bar1', $item2
->get('title'));
}
/**
* Tests removing items by throwing a SkipItemException.
*
* @covers ::afterParse
*/
public function testSkippingItems() {
// Create a few items.
for ($i = 1; $i <= 5; $i++) {
$item = new DynamicItem();
$item
->set('id', $i);
$this->parserResult
->addItem($item);
}
// Implement AfterParseBase::alterItem() and throw an exception on items 3
// and 5.
$this->subscriber
->expects($this
->exactly(5))
->method('alterItem')
->will($this
->returnCallback(function (ItemInterface $item, ParseEvent $event) {
switch ($item
->get('id')) {
case 3:
case 5:
throw new SkipItemException();
}
}));
// Run subscriber.
$this->subscriber
->afterParse($this->event);
// Check which items are still on the parser result.
$this
->assertCount(3, $this->parserResult);
$expected = [
1,
2,
4,
];
$i = 0;
foreach ($this->parserResult as $item) {
$this
->assertEquals($expected[$i], $item
->get('id'));
$i++;
}
}
/**
* Tests that if applies() returns false, no items are altered.
*
* @covers ::afterParse
*/
public function testApplies() {
$subscriber = $this
->getMockBuilder(AfterParseBase::class)
->setMethods([
'applies',
'alterItem',
])
->getMock();
// Create a few items.
for ($i = 1; $i <= 3; $i++) {
$item = new DynamicItem();
$item
->set('id', $i);
$this->parserResult
->addItem($item);
}
$subscriber
->expects($this
->never())
->method('alterItem');
$subscriber
->expects($this
->once())
->method('applies')
->willReturn(FALSE);
// Run subscriber.
$subscriber
->afterParse($this->event);
}
/**
* Tests that the event subscriber is properly called.
*
* @covers ::getSubscribedEvents
*/
public function testDispatch() {
// Create a few items.
for ($i = 1; $i <= 3; $i++) {
$item = new DynamicItem();
$item
->set('id', $i);
$this->parserResult
->addItem($item);
}
$this->subscriber
->expects($this
->exactly(3))
->method('alterItem');
$dispatcher = new EventDispatcher();
$dispatcher
->addSubscriber($this->subscriber);
// Dispatch the event.
$dispatcher
->dispatch(FeedsEvents::PARSE, $this->event);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AfterParseBaseTest:: |
protected | property | The mocked parse event. | |
AfterParseBaseTest:: |
protected | property | The parser result. | |
AfterParseBaseTest:: |
protected | property | The mocked subscriber object. | |
AfterParseBaseTest:: |
public | function |
Overrides FeedsUnitTestCase:: |
|
AfterParseBaseTest:: |
public | function | Tests that a list of items can get manipulated. | |
AfterParseBaseTest:: |
public | function | Tests that if applies() returns false, no items are altered. | |
AfterParseBaseTest:: |
public | function | Tests that the event subscriber is properly called. | |
AfterParseBaseTest:: |
public | function | Tests removing items by throwing a SkipItemException. | |
FeedsMockingTrait:: |
protected | function | Mocks an account object. | |
FeedsMockingTrait:: |
protected | function | Returns a mocked AccountSwitcher object. | |
FeedsMockingTrait:: |
protected | function | Returns a mocked feed entity. | |
FeedsMockingTrait:: |
protected | function | Returns a mocked feed type entity. | |
FeedsMockingTrait:: |
protected | function | Mocks a field definition. | 1 |
FeedsMockingTrait:: |
protected | function | Mocks the file system. | |
FeedsReflectionTrait:: |
protected | function | Calls a protected method on the given object. | |
FeedsReflectionTrait:: |
protected | function | Gets a ReflectionMethod for a class method. | |
FeedsReflectionTrait:: |
protected | function | Returns a dynamically created closure for the object's method. | |
FeedsReflectionTrait:: |
protected | function | Sets a protected property. | |
FeedsUnitTestCase:: |
protected | function | Returns the absolute directory path of the Feeds module. | |
FeedsUnitTestCase:: |
protected | function | Defines stub constants. | |
FeedsUnitTestCase:: |
protected | function | Returns a mock stream wrapper manager. | |
FeedsUnitTestCase:: |
protected | function | Returns the absolute directory path of the resources folder. | |
PhpunitCompatibilityTrait:: |
public | function | Returns a mock object for the specified class using the available method. | |
PhpunitCompatibilityTrait:: |
public | function | Compatibility layer for PHPUnit 6 to support PHPUnit 4 code. | |
UnitTestCase:: |
protected | property | The random generator. | |
UnitTestCase:: |
protected | property | The app root. | 1 |
UnitTestCase:: |
protected | function | Asserts if two arrays are equal by sorting them first. | |
UnitTestCase:: |
protected | function | Mocks a block with a block plugin. | 1 |
UnitTestCase:: |
protected | function | Returns a stub class resolver. | |
UnitTestCase:: |
public | function | Returns a stub config factory that behaves according to the passed 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. |