DatetimeConverterTest::testImmutableViaConvert()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 34
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 34
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 24
nc 1
nop 0
1
<?php
2
3
namespace Spiral\Tests\Statistics;
4
5
use Spiral\Statistics\DatetimeConverter;
6
use Spiral\Statistics\Extract\Range;
7
use Spiral\Tests\BaseTest;
8
9
class DatetimeConverterTest extends BaseTest
10
{
11
    public function testImmutable()
12
    {
13
        $converter = $this->getConverter();
14
15
        $datetime = new \DateTime();
16
        $immutable = $converter->immutable($datetime);
17
18
        $this->assertInstanceOf(\DateTimeImmutable::class, $immutable);
19
        $this->assertNotSame($datetime, $immutable);
20
21
        $datetime = new \DateTimeImmutable();
22
        $immutable = $converter->immutable($datetime);
23
24
        $this->assertInstanceOf(\DateTimeImmutable::class, $immutable);
25
        $this->assertSame($datetime, $immutable);
26
    }
27
28
    public function testImmutableViaConvert()
29
    {
30
        $converter = $this->getConverter();
31
32
        $datetime1 = new \DateTime();
33
        $datetime2 = $converter->convert($datetime1, Range::DAILY);
34
        $datetime3 = $converter->convert($datetime1, Range::WEEKLY);
35
        $datetime4 = $converter->convert($datetime1, Range::MONTHLY);
36
        $datetime5 = $converter->convert($datetime1, Range::YEARLY);
37
        $datetime6 = $converter->convert($datetime1, 'some-unsupported-range');
38
39
        //Any other will be immutable also
40
        $this->assertInstanceOf(\DateTimeImmutable::class, $datetime6);
41
42
        $this->assertNotSame($datetime1, $datetime2);
43
        $this->assertNotSame($datetime1, $datetime3);
44
        $this->assertNotSame($datetime1, $datetime4);
45
        $this->assertNotSame($datetime1, $datetime5);
46
        $this->assertNotSame($datetime1, $datetime6);
47
48
        $this->assertNotSame($datetime2, $datetime3);
49
        $this->assertNotSame($datetime2, $datetime4);
50
        $this->assertNotSame($datetime2, $datetime5);
51
        $this->assertNotSame($datetime2, $datetime6);
52
53
        $this->assertNotSame($datetime3, $datetime4);
54
        $this->assertNotSame($datetime3, $datetime5);
55
        $this->assertNotSame($datetime3, $datetime6);
56
57
        $this->assertNotSame($datetime4, $datetime5);
58
        $this->assertNotSame($datetime4, $datetime6);
59
60
        $this->assertNotSame($datetime5, $datetime6);
61
    }
62
63
    public function testConvert()
64
    {
65
        $converter = $this->getConverter();
66
67
        $datetime = new \DateTime('now');
68
        $immutable = new \DateTimeImmutable('now');
69
70
        $formatMonth = $immutable->format('m');
71
        $formatYear = $immutable->format('Y');
72
        $weekDay = $immutable->format('w') ? $immutable->format('w') - 1 : 6;
73
74
        $this->assertEquals(
75
            $immutable->getTimestamp(),
76
            $converter->convert($datetime)->getTimestamp()
77
        );
78
        $this->assertEquals(
79
            $immutable->setTime(0, 0, 0),
80
            $converter->convert($datetime, Range::DAILY)
81
        );
82
        $this->assertEquals(
83
            $immutable->sub(new \DateInterval('P' . $weekDay . 'D'))->setTime(0, 0, 0),
84
            $converter->convert($datetime, Range::WEEKLY)
85
        );
86
        $this->assertEquals(
87
            $immutable->setDate($formatYear, $formatMonth, 1)->setTime(0, 0, 0),
88
            $converter->convert($datetime, Range::MONTHLY)
89
        );
90
        $this->assertEquals(
91
            $immutable->setDate($formatYear, 1, 1)->setTime(0, 0, 0),
92
            $converter->convert($datetime, Range::YEARLY)
93
        );
94
        $this->assertEquals(
95
            $immutable,
96
            $converter->convert($datetime, 'some-unsupported-range')
97
        );
98
    }
99
}