Passed
Push — master ( 3f7870...ee79c5 )
by Tomasz
01:36
created

StdRangesCalculatorTest::test_sumEmpty()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace Test;
6
7
use Hop\Ranges\Range;
8
use Hop\Ranges\RangesCalculator;
9
use Hop\Ranges\StdRangesCalculator;
10
use PHPUnit\Framework\TestCase;
11
12
final class StdRangesCalculatorTest extends TestCase
13
{
14
    /**
15
     * @var StdRangesCalculator
16
     */
17
    private $calculator;
18
19
    public function setUp()
20
    {
21
        $this->calculator = new StdRangesCalculator();
22
    }
23
24
    public function test_instanceOf(): void
25
    {
26
        $this->assertInstanceOf(RangesCalculator::class, $this->calculator);
27
    }
28
29
    public function test_sumEmpty(): void
30
    {
31
        $this->assertEquals([], $this->calculator->sum());
32
    }
33
34
    public function test_sumNotMerge(): void
35
    {
36
        $ranges = $this->calculator->sum(
37
            new Range(new \DateTime('2018-01-01 00:01:01'), new \DateTime('2018-01-01 00:02:00')),
38
            new Range(new \DateTime('2018-02-01 00:00:00'), new \DateTime('2018-02-01 00:01:00')),
39
            new Range(new \DateTime('2018-01-01 00:00:00'), new \DateTime('2018-01-01 00:01:00'))
40
        );
41
42
        $this->assertCount(3, $ranges);
43
44
        $this->assertEquals('2018-01-01 00:00:00', $ranges[0]->dateFrom()->format('Y-m-d H:i:s'));
45
        $this->assertEquals('2018-01-01 00:01:00', $ranges[0]->dateTo()->format('Y-m-d H:i:s'));
46
47
        $this->assertEquals('2018-01-01 00:01:01', $ranges[1]->dateFrom()->format('Y-m-d H:i:s'));
48
        $this->assertEquals('2018-01-01 00:02:00', $ranges[1]->dateTo()->format('Y-m-d H:i:s'));
49
50
        $this->assertEquals('2018-02-01 00:00:00', $ranges[2]->dateFrom()->format('Y-m-d H:i:s'));
51
        $this->assertEquals('2018-02-01 00:01:00', $ranges[2]->dateTo()->format('Y-m-d H:i:s'));
52
    }
53
54
    public function test_sumAndMerge(): void
55
    {
56
        $ranges = $this->calculator->sum(
57
            new Range(new \DateTime('2018-01-01 00:01:00'), new \DateTime('2018-01-01 00:02:00')),
58
            new Range(new \DateTime('2018-02-01 00:00:00'), new \DateTime('2018-02-01 00:01:00')),
59
            new Range(new \DateTime('2018-01-01 00:00:00'), new \DateTime('2018-01-01 00:01:00'))
60
        );
61
62
        $this->assertCount(2, $ranges);
63
64
        $this->assertEquals('2018-01-01 00:00:00', $ranges[0]->dateFrom()->format('Y-m-d H:i:s'));
65
        $this->assertEquals('2018-01-01 00:02:00', $ranges[0]->dateTo()->format('Y-m-d H:i:s'));
66
67
        $this->assertEquals('2018-02-01 00:00:00', $ranges[1]->dateFrom()->format('Y-m-d H:i:s'));
68
        $this->assertEquals('2018-02-01 00:01:00', $ranges[1]->dateTo()->format('Y-m-d H:i:s'));
69
70
71
        $ranges = $this->calculator->sum(
72
            new Range(new \DateTime('2018-01-01 00:01:00'), new \DateTime('2018-01-01 00:02:00')),
73
            new Range(new \DateTime('2018-01-01 00:01:58'), new \DateTime('2018-02-01 00:01:00')),
74
            new Range(new \DateTime('2018-01-01 00:00:00'), new \DateTime('2018-01-01 00:01:00'))
75
        );
76
77
        $this->assertCount(1, $ranges);
78
79
        $this->assertEquals('2018-01-01 00:00:00', $ranges[0]->dateFrom()->format('Y-m-d H:i:s'));
80
        $this->assertEquals('2018-02-01 00:01:00', $ranges[0]->dateTo()->format('Y-m-d H:i:s'));
81
82
83
        $ranges = $this->calculator->sum(
84
            new Range(new \DateTime('2018-01-01 00:01:00'), new \DateTime('2018-01-01 00:02:00')),
85
            new Range(new \DateTime('2018-01-01 00:01:56'), new \DateTime('2018-01-01 00:01:58')),
86
            new Range(new \DateTime('2018-01-01 00:00:00'), new \DateTime('2018-01-01 00:01:00'))
87
        );
88
89
        $this->assertCount(1, $ranges);
90
91
        $this->assertEquals('2018-01-01 00:00:00', $ranges[0]->dateFrom()->format('Y-m-d H:i:s'));
92
        $this->assertEquals('2018-01-01 00:02:00', $ranges[0]->dateTo()->format('Y-m-d H:i:s'));
93
    }
94
95
    public function test_sumMergeInner(): void
96
    {
97
        $ranges = $this->calculator->sum(
98
            new Range(new \DateTime('2018-01-01 00:01:00'), new \DateTime('2018-01-01 00:02:00')),
99
            new Range(new \DateTime('2018-01-01 00:01:56'), new \DateTime('2018-01-01 00:01:59')),
100
            new Range(new \DateTime('2018-01-01 00:01:57'), new \DateTime('2018-01-01 00:01:58')),
101
            new Range(new \DateTime('2018-01-01 00:00:00'), new \DateTime('2018-01-01 00:01:00'))
102
        );
103
104
        $this->assertCount(1, $ranges);
105
106
        $this->assertEquals('2018-01-01 00:00:00', $ranges[0]->dateFrom()->format('Y-m-d H:i:s'));
107
        $this->assertEquals('2018-01-01 00:02:00', $ranges[0]->dateTo()->format('Y-m-d H:i:s'));
108
    }
109
}
110