engelsystem/tests/Unit/Exceptions/Handlers/WhoopsTest.php

91 lines
3.3 KiB
PHP
Raw Normal View History

2017-11-24 15:08:43 +01:00
<?php
namespace Engelsystem\Test\Unit\Exceptions\Handlers;
2017-11-24 15:08:43 +01:00
use Engelsystem\Application;
use Engelsystem\Exceptions\Handlers\Whoops;
use Engelsystem\Helpers\Authenticator;
2017-11-24 15:08:43 +01:00
use Engelsystem\Http\Request;
use Engelsystem\Test\Unit\TestCase;
2017-11-24 15:08:43 +01:00
use Exception;
use PHPUnit\Framework\MockObject\MockObject;
2017-11-24 15:08:43 +01:00
use Whoops\Handler\JsonResponseHandler;
use Whoops\Handler\PrettyPageHandler;
use Whoops\Run as WhoopsRunner;
use Whoops\RunInterface as WhoopsRunnerInterface;
class WhoopsTest extends TestCase
{
/**
2020-01-02 15:08:08 +01:00
* @covers \Engelsystem\Exceptions\Handlers\Whoops::__construct
* @covers \Engelsystem\Exceptions\Handlers\Whoops::render
* @covers \Engelsystem\Exceptions\Handlers\Whoops::getPrettyPageHandler
* @covers \Engelsystem\Exceptions\Handlers\Whoops::getJsonResponseHandler
* @covers \Engelsystem\Exceptions\Handlers\Whoops::getData
2017-11-24 15:08:43 +01:00
*/
public function testRender(): void
2017-11-24 15:08:43 +01:00
{
/** @var Application|MockObject $app */
2017-11-24 15:08:43 +01:00
$app = $this->createMock(Application::class);
/** @var Authenticator|MockObject $auth */
$auth = $this->createMock(Authenticator::class);
/** @var Request|MockObject $request */
2017-11-24 15:08:43 +01:00
$request = $this->createMock(Request::class);
/** @var WhoopsRunnerInterface|MockObject $whoopsRunner */
2017-11-24 15:08:43 +01:00
$whoopsRunner = $this->getMockForAbstractClass(WhoopsRunnerInterface::class);
/** @var PrettyPageHandler|MockObject $prettyPageHandler */
2017-11-24 15:08:43 +01:00
$prettyPageHandler = $this->createMock(PrettyPageHandler::class);
/** @var JsonResponseHandler|MockObject $jsonResponseHandler */
$jsonResponseHandler = $this->createMock(JsonResponseHandler::class);
/** @var Exception|MockObject $exception */
$exception = $this->createMock(Exception::class);
$this->setExpects($request, 'isXmlHttpRequest', null, true);
$this->setExpects($prettyPageHandler, 'setApplicationPaths');
$this->setExpects($prettyPageHandler, 'addDataTable');
$this->setExpects($jsonResponseHandler, 'setJsonApi', [true]);
$this->setExpects($jsonResponseHandler, 'addTraceToOutput', [true]);
2017-11-24 15:08:43 +01:00
$app->expects($this->exactly(3))
->method('make')
->withConsecutive(
[WhoopsRunner::class],
[PrettyPageHandler::class],
[JsonResponseHandler::class]
)
->willReturnOnConsecutiveCalls(
$whoopsRunner,
$prettyPageHandler,
$jsonResponseHandler
);
$app->expects($this->once())
->method('has')
->with('authenticator')
->willReturn(true);
$app->expects($this->once())
->method('get')
->with('authenticator')
->willReturn($auth);
$auth->expects($this->once())
->method('user')
->willReturn(null);
2017-11-24 15:08:43 +01:00
$whoopsRunner
->expects($this->exactly(2))
->method('pushHandler')
->withConsecutive(
[$prettyPageHandler],
[$jsonResponseHandler]
);
$this->setExpects($whoopsRunner, 'writeToOutput', [false]);
$this->setExpects($whoopsRunner, 'allowQuit', [false]);
$this->setExpects($whoopsRunner, 'handleException', [$exception]);
2017-11-24 15:08:43 +01:00
$handler = new Whoops($app);
$handler->render($request, $exception);
}
}