122 lines
3.8 KiB
PHP
122 lines
3.8 KiB
PHP
<?php
|
|
/**
|
|
* @author XE Developers <developers@xpressengine.com>
|
|
* @copyright 2020 Copyright XEHub Corp. <https://www.xehub.io>
|
|
* @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
|
|
* @link https://xpressengine.io
|
|
*/
|
|
|
|
namespace Xpressengine\Tests\Interception;
|
|
|
|
use Xpressengine\Interception\Advisor;
|
|
use Xpressengine\Interception\AdvisorCollection;
|
|
|
|
class AdvisorCollectionTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
|
|
/**
|
|
* @var AdvisorCollection
|
|
*/
|
|
protected $advisorCollection = null;
|
|
|
|
protected function tearDown()
|
|
{
|
|
\Mockery::close();
|
|
parent::tearDown();
|
|
}
|
|
|
|
protected function setUp()
|
|
{
|
|
|
|
$this->advisorCollection = new AdvisorCollection();
|
|
|
|
parent::setUp(); // TODO: Change the autogenerated stub
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @expectedException \Xpressengine\Interception\Exceptions\AdvisorNameAlreadyExistsException
|
|
*/
|
|
public function testPutDuplicateAdvisorName()
|
|
{
|
|
$advisor1 = new Advisor(
|
|
'ad1', 'Xpressengine\Tests\Interception\Document@insertDocument', function ($target, $args) {
|
|
return $target($args);
|
|
}
|
|
);
|
|
$this->advisorCollection->put($advisor1);
|
|
|
|
$advisor2 = new Advisor(
|
|
'ad1', ['Xpressengine\Tests\Interception\Document@insertDocument', 'Xpressengine\Tests\Interception\Document@deleteDocument'], function ($target, $args) {
|
|
return $target($args);
|
|
}
|
|
);
|
|
$this->advisorCollection->put($advisor2);
|
|
}
|
|
|
|
|
|
public function testPutAndGetAdvisorList()
|
|
{
|
|
|
|
$advisor1 = new Advisor(
|
|
'ad1', 'Xpressengine\Tests\Interception\Document@insertDocument', function ($target, $args) {
|
|
return $target($args);
|
|
}
|
|
);
|
|
$this->advisorCollection->put($advisor1);
|
|
|
|
$advisor2 = new Advisor(
|
|
'ad2', ['Xpressengine\Tests\Interception\Document@insertDocument', 'Xpressengine\Tests\Interception\Document@deleteDocument'], function ($target, $args) {
|
|
return $target($args);
|
|
}
|
|
|
|
);
|
|
$this->advisorCollection->put($advisor2, ['before' => ['ad1', 'ad3']]);
|
|
|
|
$advisor3 = new Advisor(
|
|
'ad3', 'Xpressengine\Tests\Interception\Document@deleteDocument', function ($target, $args) {
|
|
return $target($args);
|
|
});
|
|
|
|
$this->advisorCollection->put($advisor3, ['before'=>['ad1']]);
|
|
|
|
$proxyObject = \Mockery::mock('Proxy');
|
|
|
|
|
|
$advisorList = $this->advisorCollection->getAdvisorList('Xpressengine\Tests\Interception\Document@insertDocument', $proxyObject);
|
|
|
|
$this->assertEquals($advisorList->next(), $advisor1);
|
|
$this->assertEquals($advisorList->next(), $advisor2);
|
|
|
|
$advisorList = $this->advisorCollection->getAdvisorList('Xpressengine\Tests\Interception\Document@deleteDocument', $proxyObject);
|
|
|
|
$this->assertEquals($advisorList->next(), $advisor3);
|
|
$this->assertEquals($advisorList->next(), $advisor2);
|
|
}
|
|
|
|
public function testSetAlias()
|
|
{
|
|
|
|
$advisor1 = new Advisor(
|
|
'ad1', 'Bar@insertDocument', function ($target, $args) {
|
|
return $target($args);
|
|
}
|
|
);
|
|
$this->advisorCollection->put($advisor1);
|
|
|
|
$this->advisorCollection->setAlias('Bar', 'Acme\\Bar');
|
|
$this->assertEquals(['Bar'=>'Acme\\Bar'], $this->getPropertyValue($this->advisorCollection, 'aliases'));
|
|
$map = $this->getPropertyValue($this->advisorCollection, 'advisorMap');
|
|
$this->assertFalse(isset($map->Bar));
|
|
|
|
}
|
|
|
|
protected function getPropertyValue($object, $property)
|
|
{
|
|
$refl = new \ReflectionObject($object);
|
|
$repoProp = $refl->getProperty($property);
|
|
$repoProp->setAccessible(true);
|
|
return $repoProp->getValue($object);
|
|
}
|
|
}
|