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

FormElementContextSpec   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 2
dl 0
loc 69
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A let() 0 8 1
A it_is_context() 0 4 1
A it_has_array_data() 0 13 1
A it_returns_default_template_if_element_does_not_have_one() 0 6 1
A it_returns_template_from_element_if_it_has_one() 0 7 1
A it_handles_request_with_request_handlers() 0 7 1
A it_returns_response_from_handler() 0 8 1
A it_throws_exception_when_adding_is_not_allowed() 0 6 1
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