Passed
Push — master ( f67228...ea1bad )
by Matthew
08:44
created

TrendsControllerTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 2
Bugs 1 Features 1
Metric Value
wmc 3
lcom 1
cbo 8
dl 0
loc 86
rs 10
c 2
b 1
f 1
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\Controller;
4
5
use Dtc\QueueBundle\Controller\TrendsController;
6
use Dtc\QueueBundle\ORM\JobTimingManager;
7
use Dtc\QueueBundle\Model\BaseJob;
8
use PHPUnit\Framework\TestCase;
9
use Symfony\Component\HttpFoundation\Request;
10
11
class TrendsControllerTest extends TestCase
12
{
13
    use ControllerTrait;
14
15
    public function testTimingsAction()
16
    {
17
        $container = $this->getContainerOrm();
18
        $this->runTimingsActionTests($container);
19
        $container = $this->getContainerOdm();
20
        $this->runTimingsActionTests($container);
21
    }
22
23
    public function testTrendsAction()
24
    {
25
        $container = $this->getContainerOrm();
26
        $trendsController = new TrendsController();
27
        $trendsController->setContainer($container);
28
        $response = $trendsController->trendsAction();
29
        $this->runJsCssTest($response);
30
    }
31
32
    /**
33
     * @param \Symfony\Component\DependencyInjection\Container $container
34
     */
35
    public function runTimingsActionTests($container)
36
    {
37
        $trendsController = new TrendsController();
38
        $trendsController->setContainer($container);
39
40
        $dateTimeStr = '2017-07-01T4:04:04Z';
41
        $dateTime = \DateTime::createFromFormat(DATE_ISO8601, $dateTimeStr);
42
        self::assertNotFalse($dateTime);
43
44
        /** @var JobTimingManager $jobTimingManager */
45
        $jobTimingManager = $container->get('dtc_queue.manager.job_timing');
46
        $jobTimingManager->recordTiming(BaseJob::STATUS_SUCCESS, $dateTime);
47
        $jobTimingManager->recordTiming(BaseJob::STATUS_SUCCESS, $dateTime);
48
        $jobTimingManager->recordTiming(BaseJob::STATUS_EXCEPTION, $dateTime);
49
50
        $request = new Request();
51
        $request->query->set('type', 'HOUR');
52
        $request->query->set('end', '2017-07-01T5:05:00.0Z');
53
        $timings = $trendsController->getTimingsAction($request);
54
        $content = $timings->getContent();
55
56
        self::assertNotEmpty($content);
57
        $contentDecoded = json_decode($content, true);
58
        self::assertCount(3, $contentDecoded);
59
        self::assertEquals([3], $contentDecoded['timings_data_0']);
60
        self::assertEquals(['2017-07-01 04'], $contentDecoded['timings_dates']);
61
        self::assertEquals(['2017-07-01T04:00:00+00:00'], $contentDecoded['timings_dates_rfc3339']);
62
63
        $request = new Request();
64
        $request->query->set('type', 'MINUTE');
65
        $request->query->set('end', '2017-07-01T4:05:04.0Z');
66
        $timings = $trendsController->getTimingsAction($request);
67
        $content = $timings->getContent();
68
        $contentDecoded = json_decode($content, true);
69
        self::assertEquals(['2017-07-01 04:04'], $contentDecoded['timings_dates']);
70
        self::assertEquals(['2017-07-01T04:04:00+00:00'], $contentDecoded['timings_dates_rfc3339']);
71
72
        $request = new Request();
73
        $request->query->set('type', 'DAY');
74
        $request->query->set('end', '2017-07-01T4:05:04.0Z');
75
        $timings = $trendsController->getTimingsAction($request);
76
        $content = $timings->getContent();
77
        $contentDecoded = json_decode($content, true);
78
        self::assertEquals(['2017-07-01'], $contentDecoded['timings_dates']);
79
80
        $request = new Request();
81
        $request->query->set('type', 'MONTH');
82
        $request->query->set('end', '2017-07-01T4:05:04.0Z');
83
        $timings = $trendsController->getTimingsAction($request);
84
        $content = $timings->getContent();
85
        $contentDecoded = json_decode($content, true);
86
        self::assertEquals(['2017-07'], $contentDecoded['timings_dates']);
87
88
        $request = new Request();
89
        $request->query->set('type', 'YEAR');
90
        $request->query->set('end', '2017-07-01T4:05:04.0Z');
91
        $timings = $trendsController->getTimingsAction($request);
92
        $content = $timings->getContent();
93
        $contentDecoded = json_decode($content, true);
94
        self::assertEquals(['2017'], $contentDecoded['timings_dates']);
95
    }
96
}
97