* @copyright 2020 Copyright XEHub Corp. * @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL * @link https://xpressengine.io */ namespace Xpressengine\Support\Exceptions { /** * xe_trans * * @param $message * @param $args * * @return string */ function xe_trans($message, $args) { return 'translate test code'; } } namespace Xpressengine\Tests\Widget { use PHPUnit\Framework\TestCase; use Mockery as m; use Xpressengine\User\Rating; use Xpressengine\Widget\AbstractWidget; use Xpressengine\Widget\WidgetHandler; /** * Class FakeWidget * * @package Xpressengine\Tests\Widget */ class FakeWidget extends AbstractWidget { /** * @var array */ public static $ratingWhiteList = [Rating::SUPER, Rating::MANAGER, Rating::USER]; /** * init * * @return void */ protected function init() { // TODO: Implement init() method. } /** * getSettingForm * * @param array $args * * @return string */ public function renderSetting(array $args = []) { return 'fake Setup String'; } /** * boot * * @return void */ public static function boot() { // TODO: Implement boot() method. } /** * getSettingsURI * * @return void */ public static function getSettingsURI() { // TODO: Implement getSettingsURI() method. } /** * render * * @return mixed * @internal param array $args to render parameter array * */ public function render() { $dummyView = m::mock('Illuminate\Contracts\Support\Renderable'); $dummyView->shouldReceive('render')->andReturn('fake Render String'); return $dummyView; } } /** * Class WidgetHandlerTest * * @package Xpressengine\Tests\Widget */ class WidgetHandlerTest extends TestCase { /** * @var \Mockery\MockInterface $guard */ protected $guard; /** * @var \Mockery\MockInterface $register */ protected $register; /** * @var \Mockery\MockInterface $register */ protected $factory; /** * @var string */ private $fakeWidgetClassName = 'Xpressengine\Tests\Widget\FakeWidget'; /** * tearDown * * @return void */ public function tearDown() { m::close(); } /** * testGetClassName * * @return void */ public function testGetClassName() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn($this->fakeWidgetClassName); $mockUser = m::mock('Xpressengine\User\UserInterface'); $mockUser->shouldReceive('getRating')->andReturn('super'); $guard = $this->guard; $guard->shouldReceive('user')->andReturn($mockUser); $widgetClassName = $widgetHandler->getClassName('widget/xpressengine@testWidgetId'); $this->assertEquals($this->fakeWidgetClassName, $widgetClassName); } /** * testRender * * @return void */ public function testRender() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn($this->fakeWidgetClassName); $mockUser = m::mock('Xpressengine\User\UserInterface'); $mockUser->shouldReceive('getRating')->andReturn('super'); $guard = $this->guard; $guard->shouldReceive('user')->andReturn($mockUser); $fakeWidgetRenderString = $widgetHandler->render('testWidgetId', []); $this->assertEquals('fake Render String', $fakeWidgetRenderString); } /** * testRenderNoGuard * * @return void */ public function testRenderNoGuard() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn($this->fakeWidgetClassName); $mockUser = m::mock('Xpressengine\User\UserInterface'); $mockUser->shouldReceive('getRating')->andReturn('guest'); $guard = $this->guard; $guard->shouldReceive('user')->andReturn($mockUser); $fakeWidgetRenderString = $widgetHandler->render('testWidgetId', []); $this->assertEquals('', $fakeWidgetRenderString); } /** * testRenderExceptionOccurOnSuper * * @return void */ public function testRenderExceptionOccurOnSuper() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn(null); $mockUser = m::mock('Xpressengine\User\UserInterface'); $mockUser->shouldReceive('getRating')->andReturn('super'); $guard = $this->guard; $guard->shouldReceive('user')->andReturn($mockUser); $view = $this->factory; $view->shouldReceive('make')->andReturn($view); $view->shouldReceive('render')->andReturn('widget error occur!'); $fakeWidgetRenderString = $widgetHandler->render('testWidgetId', []); $this->assertEquals('widget error occur!', $fakeWidgetRenderString); } /** * testRenderExceptionOccurOnGuest * * @return void */ public function testRenderExceptionOccurOnGuest() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn(null); $mockUser = m::mock('Xpressengine\User\UserInterface'); $mockUser->shouldReceive('getRating')->andReturn('guest'); $guard = $this->guard; $guard->shouldReceive('user')->andReturn($mockUser); $fakeWidgetRenderString = $widgetHandler->render('testWidgetId', []); $this->assertEquals('', $fakeWidgetRenderString); } /** * testSetUp * * @return void */ public function testSetup() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn($this->fakeWidgetClassName); $fakeWidgetSetupString = $widgetHandler->setup('testWidgetId'); $this->assertEquals('fake Setup String', $fakeWidgetSetupString); } /** * testSetUpFail * * @return void * * @expectedException \XpressEngine\Widget\Exceptions\NotFoundWidgetException */ public function testSetUpFail() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn(null); $fakeWidgetSetupString = $widgetHandler->setup('testWidgetId'); } /** * testGetAll * * @return void */ public function testGetAll() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn(['FakeWidget']); $fakeWidgets = $widgetHandler->getAll(); $this->assertEquals(['FakeWidget'], $fakeWidgets); } /** * testGetAllWithFilter * * @return void */ public function testGetAllWithFilter() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $register = $this->register; $register->shouldReceive('get')->andReturn(['Xpressengine\Tests\Widget\FakeWidget']); $filter = function ($widgetClassname) { return false; }; $fakeWidgets = $widgetHandler->getAll($filter); $this->assertEquals([], $fakeWidgets); } /** * testGetGeneratedCode * * @return void */ public function testGetGeneratedCode() { $widgetHandler = new WidgetHandler($this->register, $this->guard, $this->factory, false); $id = 'fakeWidgetId'; $inputs = [ 'args1' => 'value1', 'args2' => 'value2', 'args3' => 'value3', ]; $this->register->shouldReceive('get')->with('widget/'.$id)->andReturn($this->fakeWidgetClassName); $resultString = $widgetHandler->generateCode($id, $inputs); $expected = 'value1value2value3'; $this->assertEquals($expected, $resultString); } /** * setUp * * @return void */ public function setUp() { $registerMock = m::mock('Xpressengine\Plugin\PluginRegister'); $guardMock = m::mock('Xpressengine\User\GuardInterface'); $factoryMock = m::mock('Illuminate\Contracts\View\Factory'); $this->register = $registerMock; $this->guard = $guardMock; $this->factory = $factoryMock; } } }