Test Failed
Push — master ( 37023c...961468 )
by Theo
01:47
created

testItProvidesAnEventsFeedForACalendar()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 38
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 22
nc 1
nop 0
dl 0
loc 38
rs 9.568
c 0
b 0
f 0
1
<?php
2
3
namespace CalendarBundle\Tests\Controller;
4
5
use CalendarBundle\CalendarEvents;
6
use CalendarBundle\Controller\CalendarController;
7
use CalendarBundle\Entity\Event;
8
use CalendarBundle\Event\CalendarEvent;
9
use CalendarBundle\Serializer\SerializerInterface;
10
use PHPUnit\Framework\TestCase;
11
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\HttpFoundation\Response;
14
use Prophecy\Argument;
15
16
class CalendarControllerTest extends TestCase
17
{
18
    private $calendarEvent;
19
    private $event;
20
    private $eventDispatcher;
21
    private $request;
22
    private $serializer;
23
    private $controller;
24
25
    public function setUp(): void
26
    {
27
        $this->calendarEvent = $this->prophesize(CalendarEvent::class);
28
        $this->event = $this->prophesize(Event::class);
29
        $this->eventDispatcher = $this->prophesize(EventDispatcherInterface::class);
30
        $this->request = $this->prophesize(Request::class);
31
        $this->serializer = $this->prophesize(SerializerInterface::class);
32
33
        $this->controller = new CalendarController(
34
            $this->eventDispatcher->reveal(),
35
            $this->serializer->reveal()
36
        );
37
    }
38
39
    public function testItProvidesAnEventsFeedForACalendar()
40
    {
41
        $this->request->get('start')->willReturn('2016-03-01');
42
        $this->request->get('end')->willReturn('2016-03-19 15:11:00');
43
        $this->request->get('filters', [])->willReturn([]);
44
45
        $this->calendarEvent->getEvents()->willReturn([$this->event]);
46
47
        $this->eventDispatcher
48
            ->dispatch(CalendarEvents::SET_DATA, Argument::type(CalendarEvent::class))
49
            ->willReturn($this->calendarEvent)
50
        ;
51
52
        $data = json_encode([
53
            [
54
                "title" => "Birthday!",
55
                "start" => "2016-03-01",
56
                "allDay" => true,
57
            ],
58
            [
59
                "title" => "Flight to somewhere sunny",
60
                "start" => "2016-03-12T08:55:00Z",
61
                "allDay" => false,
62
                "end" => "2016-03-12T11:50:00Z",
63
            ],
64
        ]);
65
66
        $this->serializer->serialize([$this->event])
67
            ->willReturn($data)
68
        ;
69
70
        $response = $this->controller->loadAction($this->request->reveal());
71
72
        $this->assertInstanceOf(Response::class, $response);
73
74
        $this->assertEquals('application/json', $response->headers->get('Content-Type'));
75
        $this->assertEquals($data, $response->getContent());
76
        $this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
77
    }
78
79
    public function testItNotFindAnyEvents()
80
    {
81
        $this->request->get('start')->willReturn('2016-03-01');
82
        $this->request->get('end')->willReturn('2016-03-19 15:11:00');
83
        $this->request->get('filters', [])->willReturn([]);
84
85
        $this->calendarEvent->getEvents()->willReturn([$this->event]);
86
87
        $this->eventDispatcher
88
            ->dispatch(CalendarEvents::SET_DATA, Argument::type(CalendarEvent::class))
89
            ->willReturn($this->calendarEvent)
90
        ;
91
92
        $data = '';
93
94
        $this->serializer->serialize([$this->event])
95
            ->willReturn($data)
96
        ;
97
98
        $response = $this->controller->loadAction($this->request->reveal());
99
100
        $this->assertInstanceOf(Response::class, $response);
101
102
        $this->assertEquals('application/json', $response->headers->get('Content-Type'));
103
        $this->assertEquals($data, $response->getContent());
104
        $this->assertEquals(Response::HTTP_NO_CONTENT, $response->getStatusCode());
105
    }
106
}
107