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

84 lines
2.8 KiB
PHP

<?php
namespace Engelsystem\Test\Unit\Exceptions\handlers;
use Engelsystem\Application;
use Engelsystem\Exceptions\Handlers\Whoops;
use Engelsystem\Http\Request;
use Exception;
use PHPUnit\Framework\TestCase;
use PHPUnit_Framework_MockObject_MockObject as Mock;
use Whoops\Handler\JsonResponseHandler;
use Whoops\Handler\PrettyPageHandler;
use Whoops\Run as WhoopsRunner;
use Whoops\RunInterface as WhoopsRunnerInterface;
class WhoopsTest extends TestCase
{
/**
* @covers \Engelsystem\Exceptions\Handlers\Whoops
*/
public function testRender()
{
/** @var Application|Mock $app */
$app = $this->createMock(Application::class);
/** @var Request|Mock $request */
$request = $this->createMock(Request::class);
$request->expects($this->once())
->method('isXmlHttpRequest')
->willReturn(true);
/** @var WhoopsRunnerInterface|Mock $whoopsRunner */
$whoopsRunner = $this->getMockForAbstractClass(WhoopsRunnerInterface::class);
/** @var PrettyPageHandler|Mock $prettyPageHandler */
$prettyPageHandler = $this->createMock(PrettyPageHandler::class);
$prettyPageHandler
->expects($this->atLeastOnce())
->method('setApplicationPaths');
$prettyPageHandler
->expects($this->once())
->method('setApplicationPaths');
$prettyPageHandler
->expects($this->once())
->method('addDataTable');
/** @var JsonResponseHandler|Mock $jsonResponseHandler */
$jsonResponseHandler = $this->createMock(JsonResponseHandler::class);
$jsonResponseHandler->expects($this->once())
->method('setJsonApi')
->with(true);
$jsonResponseHandler->expects($this->once())
->method('addTraceToOutput')
->with(true);
/** @var Exception|Mock $exception */
$exception = $this->createMock(Exception::class);
$app->expects($this->exactly(3))
->method('make')
->withConsecutive(
[WhoopsRunner::class],
[PrettyPageHandler::class],
[JsonResponseHandler::class]
)
->willReturnOnConsecutiveCalls(
$whoopsRunner,
$prettyPageHandler,
$jsonResponseHandler
);
$whoopsRunner
->expects($this->exactly(2))
->method('pushHandler')
->withConsecutive(
[$prettyPageHandler],
[$jsonResponseHandler]
);
$whoopsRunner
->expects($this->once())
->method('handleException')
->with($exception);
$handler = new Whoops($app);
$handler->render($request, $exception);
}
}