Skip to content

Commit

Permalink
Return event response for initialize update event
Browse files Browse the repository at this point in the history
  • Loading branch information
dannyvw committed Dec 23, 2017
1 parent a3ec424 commit 461f2d6
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 2 deletions.
Expand Up @@ -295,7 +295,10 @@ public function createAction(Request $request): Response
return $this->viewHandler->handle($configuration, View::create($form, Response::HTTP_BAD_REQUEST));
}

$this->eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $newResource);
$initializeEvent = $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $newResource);
if ($initializeEvent->hasResponse()) {
return $initializeEvent->getResponse();
}

$view = View::create()
->setData([
Expand Down Expand Up @@ -380,7 +383,10 @@ public function updateAction(Request $request): Response
return $this->viewHandler->handle($configuration, View::create($form, Response::HTTP_BAD_REQUEST));
}

$this->eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE, $configuration, $resource);
$initializeEvent = $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE, $configuration, $resource);
if ($initializeEvent->hasResponse()) {
return $initializeEvent->getResponse();
}

$view = View::create()
->setData([
Expand Down
Expand Up @@ -341,6 +341,8 @@ function it_returns_a_html_response_for_creating_new_resource_form(
$resourceFormFactory->create($configuration, $newResource)->willReturn($form);

$eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $newResource)->willReturn($event);
$event->isStopped()->willReturn(false);
$event->hasResponse()->willReturn(false);

$request->isMethod('POST')->willReturn(false);
$form->createView()->willReturn($formView);
Expand Down Expand Up @@ -394,6 +396,8 @@ function it_returns_a_html_response_for_invalid_form_during_resource_creation(
$resourceFormFactory->create($configuration, $newResource)->willReturn($form);

$eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $newResource)->willReturn($event);
$event->isStopped()->willReturn(false);
$event->hasResponse()->willReturn(false);

$request->isMethod('POST')->willReturn(true);
$form->handleRequest($request)->willReturn($form);
Expand Down Expand Up @@ -860,6 +864,8 @@ function it_returns_a_html_response_for_updating_resource_form(
$resourceFormFactory->create($configuration, $resource)->willReturn($form);

$eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE, $configuration, $resource)->willReturn($event);
$event->isStopped()->willReturn(false);
$event->hasResponse()->willReturn(false);

$request->isMethod('PATCH')->willReturn(false);
$request->getMethod()->willReturn('GET');
Expand Down Expand Up @@ -916,6 +922,8 @@ function it_returns_a_html_response_for_invalid_form_during_resource_update(
$resourceFormFactory->create($configuration, $resource)->willReturn($form);

$eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE, $configuration, $resource)->willReturn($event);
$event->isStopped()->willReturn(false);
$event->hasResponse()->willReturn(false);

$request->isMethod('PATCH')->willReturn(false);
$request->getMethod()->willReturn('PUT');
Expand Down Expand Up @@ -1154,6 +1162,119 @@ function it_uses_response_from_post_update_event_if_defined(
$this->updateAction($request)->shouldReturn($redirectResponse);
}

function it_uses_response_from_initialize_create_event_if_defined(
MetadataInterface $metadata,
RequestConfigurationFactoryInterface $requestConfigurationFactory,
RequestConfiguration $configuration,
AuthorizationCheckerInterface $authorizationChecker,
ViewHandlerInterface $viewHandler,
RedirectHandlerInterface $redirectHandler,
FactoryInterface $factory,
NewResourceFactoryInterface $newResourceFactory,
ResourceInterface $newResource,
ResourceFormFactoryInterface $resourceFormFactory,
EventDispatcherInterface $eventDispatcher,
ResourceControllerEvent $initializeEvent,
Form $form,
FormView $formView,
Request $request,
Response $response
): void {
$metadata->getApplicationName()->willReturn('sylius');
$metadata->getName()->willReturn('product');

$requestConfigurationFactory->create($metadata, $request)->willReturn($configuration);
$configuration->hasPermission()->willReturn(true);
$configuration->getPermission(ResourceActions::CREATE)->willReturn('sylius.product.create');

$authorizationChecker->isGranted($configuration, 'sylius.product.create')->willReturn(true);

$configuration->isHtmlRequest()->willReturn(true);
$configuration->getTemplate(ResourceActions::CREATE . '.html')->willReturn('SyliusShopBundle:Product:create.html.twig');

$newResourceFactory->create($configuration, $factory)->willReturn($newResource);
$resourceFormFactory->create($configuration, $newResource)->willReturn($form);

$request->isMethod('POST')->willReturn(false);
$form->createView()->shouldNotBeCalled();

$eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $newResource)->willReturn($initializeEvent);
$initializeEvent->hasResponse()->willReturn(true);
$initializeEvent->getResponse()->willReturn($response);

$eventDispatcher->dispatchPreEvent(ResourceActions::CREATE, $configuration, $newResource)->shouldNotBeCalled();
$eventDispatcher->dispatchPostEvent(ResourceActions::CREATE, $configuration, $newResource)->shouldNotBeCalled();
$redirectHandler->redirectToResource($configuration, $newResource)->shouldNotBeCalled();

$expectedView = View::create()
->setData([
'configuration' => $configuration,
'metadata' => $metadata,
'resource' => $newResource,
'product' => $newResource,
'form' => $formView,
])
->setTemplate('SyliusShopBundle:Product:create.html.twig')
;
$viewHandler->handle($configuration, Argument::that($this->getViewComparingCallback($expectedView)))->shouldNotBeCalled();

$this->createAction($request)->shouldReturn($response);
}

function it_uses_response_from_initialize_update_event_if_defined(
MetadataInterface $metadata,
RequestConfigurationFactoryInterface $requestConfigurationFactory,
RepositoryInterface $repository,
ObjectManager $manager,
SingleResourceProviderInterface $singleResourceProvider,
ResourceFormFactoryInterface $resourceFormFactory,
RedirectHandlerInterface $redirectHandler,
FlashHelperInterface $flashHelper,
AuthorizationCheckerInterface $authorizationChecker,
EventDispatcherInterface $eventDispatcher,
ResourceUpdateHandlerInterface $resourceUpdateHandler,
RequestConfiguration $configuration,
ResourceInterface $resource,
Form $form,
ResourceControllerEvent $initializeEvent,
Request $request,
Response $response
): void {
$metadata->getApplicationName()->willReturn('sylius');
$metadata->getName()->willReturn('product');

$requestConfigurationFactory->create($metadata, $request)->willReturn($configuration);
$configuration->hasPermission()->willReturn(true);
$configuration->getPermission(ResourceActions::UPDATE)->willReturn('sylius.product.update');
$configuration->hasStateMachine()->willReturn(false);

$authorizationChecker->isGranted($configuration, 'sylius.product.update')->willReturn(true);

$configuration->isHtmlRequest()->willReturn(true);
$configuration->getTemplate(ResourceActions::UPDATE . '.html')->willReturn('SyliusShopBundle:Product:update.html.twig');

$singleResourceProvider->get($configuration, $repository)->willReturn($resource);
$resourceFormFactory->create($configuration, $resource)->willReturn($form);

$request->getMethod()->willReturn('GET');

$form->handleRequest($request)->willReturn($form);
$form->isSubmitted()->willReturn(false);
$form->isValid()->willReturn(false);

$eventDispatcher->dispatchPreEvent(ResourceActions::UPDATE, $configuration, $resource)->shouldNotBeCalled();
$resourceUpdateHandler->handle($resource, $configuration, $manager)->shouldNotBeCalled();
$flashHelper->addSuccessFlash($configuration, ResourceActions::UPDATE, $resource)->shouldNotBeCalled();
$eventDispatcher->dispatchPostEvent(ResourceActions::UPDATE, $configuration, $resource)->shouldNotBeCalled();
$redirectHandler->redirectToResource($configuration, $resource)->shouldNotBeCalled();

$eventDispatcher->dispatchInitializeEvent(ResourceActions::UPDATE, $configuration, $resource)->willReturn($initializeEvent);
$initializeEvent->hasResponse()->willReturn(true);
$initializeEvent->getResponse()->willReturn($response);

$this->updateAction($request)->shouldReturn($response);
}

function it_returns_a_non_html_response_for_correctly_updated_resource(
MetadataInterface $metadata,
ParameterBagInterface $parameterBag,
Expand Down

0 comments on commit 461f2d6

Please sign in to comment.