Completed
Push — 3.1 ( 7e9d2a...4fdd2b )
by Piotr
13:37 queued 13:35
created

FormElementContextSpec::let()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
1
<?php
2
3
/**
4
 * (c) FSi sp. z o.o. <[email protected]>
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
declare(strict_types=1);
11
12
namespace spec\FSi\Bundle\AdminBundle\Admin\CRUD\Context;
13
14
use FSi\Bundle\AdminBundle\Admin\Context\ContextInterface;
15
use FSi\Bundle\AdminBundle\Admin\Context\Request\HandlerInterface;
16
use FSi\Bundle\AdminBundle\Admin\CRUD\FormElement;
17
use FSi\Bundle\AdminBundle\Event\FormEvent;
18
use PhpSpec\ObjectBehavior;
19
use Prophecy\Argument;
20
use Symfony\Component\Form\FormInterface;
21
use Symfony\Component\Form\FormView;
22
use Symfony\Component\HttpFoundation\Request;
23
use Symfony\Component\HttpFoundation\Response;
24
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
25
26
class FormElementContextSpec extends ObjectBehavior
27
{
28
    function let(FormElement $element, FormInterface $form, HandlerInterface $handler)
29
    {
30
        $this->beConstructedWith([$handler], 'default_form');
31
        $element->hasOption('allow_add')->willReturn(true);
32
        $element->getOption('allow_add')->willReturn(true);
33
        $element->createForm(null)->willReturn($form);
34
        $this->setElement($element);
35
    }
36
37
    function it_is_context()
38
    {
39
        $this->shouldBeAnInstanceOf(ContextInterface::class);
40
    }
41
42
    function it_has_array_data(
43
        FormElement $element,
44
        FormInterface $form,
45
        FormView $formView,
46
        Request $request
47
    ) {
48
        $form->createView()->willReturn($formView);
49
        $form->getData()->willReturn(null);
50
51
        $this->handleRequest($request)->shouldReturn(null);
52
53
        $this->getData()->shouldReturn(['form' => $formView, 'element' => $element]);
54
    }
55
56
    function it_returns_default_template_if_element_does_not_have_one(FormElement $element)
57
    {
58
        $element->hasOption('template_form')->willReturn(false);
59
        $this->getTemplateName()->shouldReturn('default_form');
60
        $this->hasTemplateName()->shouldReturn(true);
61
    }
62
63
    function it_returns_template_from_element_if_it_has_one(FormElement $element)
64
    {
65
        $element->hasOption('template_form')->willReturn(true);
66
        $element->getOption('template_form')->willReturn('form.html.twig');
67
        $this->hasTemplateName()->shouldReturn(true);
68
        $this->getTemplateName()->shouldReturn('form.html.twig');
69
    }
70
71
    function it_handles_request_with_request_handlers(HandlerInterface $handler, Request $request)
72
    {
73
        $handler->handleRequest(Argument::type(FormEvent::class), $request)
74
            ->willReturn(null);
75
76
        $this->handleRequest($request)->shouldReturn(null);
77
    }
78
79
    function it_returns_response_from_handler(HandlerInterface $handler, Request $request)
80
    {
81
        $handler->handleRequest(Argument::type(FormEvent::class), $request)
82
            ->willReturn(new Response());
83
84
        $this->handleRequest($request)
85
            ->shouldReturnAnInstanceOf(Response::class);
86
    }
87
88
    function it_throws_exception_when_adding_is_not_allowed(Request $request, FormElement $element)
89
    {
90
        $request->get('id')->willReturn(null);
91
        $element->getOption('allow_add')->willReturn(false);
92
        $this->shouldThrow(NotFoundHttpException::class)->during('handleRequest', [$request]);
93
    }
94
}
95