Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

exception in application: pass reference to previous presenter #317

Merged
merged 43 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
2fff150
typo
dg Sep 23, 2023
17043d3
refactoring
dg Sep 23, 2023
5927f8a
ComponentReflection::convertType() supports true|false
dg Oct 4, 2023
0fd1744
added attribute #Parameter
dg Oct 4, 2023
7d06f0e
opened 4.0-dev
dg Mar 1, 2021
1c4fcc5
requires PHP 8.0
dg Jul 30, 2023
e0aa96d
composer: updated dependencies
dg Mar 1, 2021
aaa8b3c
coding style
dg Oct 2, 2023
64c5a64
removed support for PHP 7
dg Oct 2, 2023
c4d5de2
removed deprecated stuff
dg May 4, 2022
41c5a84
removed compatibility for old class names
dg Dec 19, 2022
263aed3
added property typehints
dg Oct 2, 2023
535e6ec
added PHP 8 typehints
dg Mar 1, 2021
2d5ac40
used constructor promotion
dg Dec 12, 2021
fd002ee
used native PHP 8 features
dg Jul 28, 2021
8445862
uses PascalCase constants
dg Nov 27, 2022
2e69d54
removed Nette\SmartObject
dg Aug 29, 2023
f588a48
Control, Presenter::createTemplate has argument
dg Mar 1, 2021
9f5cb40
Revert "UI\PresenterComponent: removed references created by loadStat…
dg Oct 24, 2022
2332cea
UI\Component: removed references returned by getParameters() [Closes …
dg Oct 24, 2022
b9de486
Form: $crossOrigin is defined in descendant
dg Mar 1, 2021
d6b41c3
removed community health files
dg Mar 11, 2021
ab37a47
removed support for Latte 2
dg Aug 14, 2023
3cb0eaa
Form: do not send 'do' when action is changed
dg Aug 30, 2021
65529fa
Url is always without user info
dg Jan 24, 2023
66906e9
Component: only UI components can be added to presenter/component (BC…
dg Sep 12, 2021
ea2da52
uppercase constants marked as deprecated
dg Dec 4, 2022
b4be537
deprecated magic properties except for $template & $payload (BC break)
dg Sep 24, 2021
29548e2
removed support for obsolete inteface Nette\Application\IRouter (repl…
dg Oct 15, 2021
dd28fa3
RouteList: array access is deprecated
dg Oct 15, 2021
ebbeb27
Component::link() & etc uses variadic parameter
dg Oct 19, 2021
cc8d2a8
Request: removed flag SECURED (BC break)
dg Nov 13, 2021
8147ef3
SnippetDriver renamed to SnippetRuntime
dg Oct 2, 2023
6e67cfb
Presenter::injectPrimary() changing the order of parameters (BC break)
dg May 4, 2022
bfff2ee
Component::getParameter() $default is deprecated
dg Jun 21, 2022
bc07732
ComponentReflection: merged getParameterType & getPropertyType
dg Oct 2, 2023
ec629b8
refactoring
dg Oct 4, 2023
5061943
uses nette/routing 4.0
dg Oct 4, 2023
7d1d24f
LatteExtension: added option 'variables'
dg Jan 9, 2023
3cfb4df
AllowedFor wip
dg Nov 13, 2021
602167c
exception in application: pass reference to previous presenter
dakur Oct 5, 2023
7959a15
update test
Oct 5, 2023
f9b64c6
Merge branch 'master' into patch-1
dg Oct 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Application/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public function processException(\Throwable $e): void
$this->httpResponse->setCode($e instanceof BadRequestException ? ($e->getHttpCode() ?: 404) : 500);
}

$args = ['exception' => $e, 'request' => Arrays::last($this->requests) ?: null];
$args = ['exception' => $e, 'previousPresenter' => $this->presenter, 'request' => Arrays::last($this->requests) ?: null];
if ($this->presenter instanceof UI\Presenter) {
try {
$this->presenter->forward(":$this->errorPresenter:", $args);
Expand Down
7 changes: 6 additions & 1 deletion tests/Application/Application.run.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ test('no route with error presenter', function () use ($httpRequest, $httpRespon

Assert::equal($requests[0], $errorPresenter->request);
Assert::null($errorPresenter->request->getParameter('request'));
Assert::null($errorPresenter->request->getParameter('previousPresenter'));
Assert::type(BadRequestException::class, $errorPresenter->request->getParameter('exception'));
});

Expand Down Expand Up @@ -154,6 +155,7 @@ test('route to error presenter', function () use ($httpRequest, $httpResponse) {

Assert::equal($requests[1], $errorPresenter->request);
Assert::equal($requests[0], $errorPresenter->request->getParameter('request'));
Assert::null($errorPresenter->request->getParameter('previousPresenter'));
Assert::type(BadRequestException::class, $errorPresenter->request->getParameter('exception'));
});

Expand Down Expand Up @@ -195,6 +197,7 @@ test('missing presenter with error presenter', function () use ($httpRequest, $h

Assert::equal($requests[1], $errorPresenter->request);
Assert::equal($requests[0], $errorPresenter->request->getParameter('request'));
Assert::null($errorPresenter->request->getParameter('previousPresenter'));
Assert::type(BadRequestException::class, $errorPresenter->request->getParameter('exception'));
});

Expand All @@ -213,10 +216,11 @@ Assert::exception(function () use ($httpRequest, $httpResponse) {


test('presenter error with error presenter', function () use ($httpRequest, $httpResponse) {
$badPresenter = new BadPresenter;
$errorPresenter = new ErrorPresenter;

$presenterFactory = Mockery::mock(IPresenterFactory::class);
$presenterFactory->shouldReceive('createPresenter')->with('Bad')->andReturn(new BadPresenter);
$presenterFactory->shouldReceive('createPresenter')->with('Bad')->andReturn($badPresenter);
$presenterFactory->shouldReceive('createPresenter')->with('Error')->andReturn($errorPresenter);

$router = Mockery::mock(Router::class);
Expand All @@ -236,6 +240,7 @@ test('presenter error with error presenter', function () use ($httpRequest, $htt

Assert::equal($requests[1], $errorPresenter->request);
Assert::equal($requests[0], $errorPresenter->request->getParameter('request'));
Assert::equal($badPresenter, $errorPresenter->request->getParameter('previousPresenter'));
Assert::type(BadException::class, $errorPresenter->request->getParameter('exception'));
});

Expand Down
Loading