DateTimeTest::testStartOfMonth()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
3
namespace JhFlexiTimeTest\DateTime;
4
5
use PHPUnit_Framework_TestCase;
6
use JhFlexiTime\DateTime\DateTime;
7
8
/**
9
 * Class DateTimeTest
10
 * @package JhFlexiTimeTest\DateTime
11
 * @author Aydin Hassan <[email protected]>
12
 */
13
class DateTimeTest extends PHPUnit_Framework_TestCase
14
{
15
16
    /**
17
     * @param string $start
18
     * @param DateTime$end
19
     * @param DateTime[] $expected
20
     *
21
     * @dataProvider monthBetweenProvider
22
     */
23
    public function testGetMonthsBetween($start, DateTime $end, array $expected)
24
    {
25
        $date = new DateTime($start);
26
        $period = $date->getMonthsBetween($end);
27
28
        $this->assertEquals($expected, $period);
29
    }
30
31
    /**
32
     * @return array
33
     */
34
    public function monthBetweenProvider()
35
    {
36
        return [
37
            [
38
                'start'     => "3 November 2014 00:00:00",
39
                'end'       => new DateTime("2 March 2015"),
40
                'expected'  => [
41
                    new DateTime("1 November 2014 00:00:00"),
42
                    new DateTime("1 December 2014 00:00:00"),
43
                    new DateTime("1 January 2015 00:00:00"),
44
                    new DateTime("1 February 2015 00:00:00"),
45
                    new DateTime("1 March 2015 00:00:00"),
46
                ]
47
            ],
48
            [
49
                'start'     => "3 November 2014 00:00:00",
50
                'end'       => new DateTime("31 March 2015"),
51
                'expected'  => [
52
                    new DateTime("1 November 2014 00:00:00"),
53
                    new DateTime("1 December 2014 00:00:00"),
54
                    new DateTime("1 January 2015 00:00:00"),
55
                    new DateTime("1 February 2015 00:00:00"),
56
                    new DateTime("1 March 2015 00:00:00"),
57
                ]
58
            ],
59
            [
60
                'start'     => "30 November 2014 23:59:59",
61
                'end'       => new DateTime("31 March 2015"),
62
                'expected'  => [
63
                    new DateTime("1 November 2014 00:00:00"),
64
                    new DateTime("1 December 2014 00:00:00"),
65
                    new DateTime("1 January 2015 00:00:00"),
66
                    new DateTime("1 February 2015 00:00:00"),
67
                    new DateTime("1 March 2015 00:00:00"),
68
                ]
69
            ]
70
        ];
71
    }
72
73
    public function testToString()
74
    {
75
        $d1 = new \DateTime("11 November 1947 00:00:00");
76
        $d2 = new DateTime("11 November 1947 00:00:00");
77
78
        $this->assertEquals($d1->format('U'), $d2->__toString());
79
    }
80
81
    /**
82
     * @param DateTime $date
83
     * @param bool $expected
84
     * @dataProvider sameMonthYearProvider
85
     */
86
    public function testIsSameMonthAndYear(DateTime $date, $expected)
87
    {
88
        $subject = new DateTime("11 November 1947 00:00:00");
89
90
        $this->assertEquals($expected, $subject->isSameMonthAndYear($date));
91
    }
92
93
    /**
94
     * @return array
95
     */
96
    public function sameMonthYearProvider()
97
    {
98
        return [
99
            [new DateTime("1 November 1947 00:00:00"), true],
100
            [new DateTime("30 November 1947 23:59:59"), true],
101
            [new DateTime("1 November 1948 00:00:00"), false],
102
            [new DateTime("30 November 1948 23:59:59"), false],
103
            [new DateTime("31 November 1947 23:59:59"), false],
104
        ];
105
    }
106
107
    public function testStartOfMonth()
108
    {
109
        $d = new DateTime("11 November 1947 00:00:00");
110
        $new = $d->startOfMonth();
111
112
        $this->assertNotSame($d, $new);
113
        $this->assertEquals('01-11-1947 00:00:00', $new->format('d-m-Y H:i:s'));
114
    }
115
116
    public function testEndOfMonth()
117
    {
118
        $d = new DateTime("11 November 1947 00:00:00");
119
        $new = $d->endOfMonth();
120
121
        $this->assertNotSame($d, $new);
122
        $this->assertEquals('30-11-1947 23:59:59', $new->format('d-m-Y H:i:s'));
123
    }
124
125
    /**
126
     * @param DateTime $date
127
     * @param bool     $expected
128
     * @dataProvider previousMonthProvider
129
     */
130
    public function testIsInPreviousMonth(DateTime $date, $expected)
131
    {
132
        $subject = new DateTime("11 November 1947 00:00:00");
133
        $this->assertEquals($expected, $subject->isInPreviousMonth($date));
134
    }
135
136
    /**
137
     * @return array
138
     */
139
    public function previousMonthProvider()
140
    {
141
        return [
142
            [new DateTime("31 October 1947 23:59:59"), true],
143
            [new DateTime("31 October 1947 00:00:00"), true],
144
            [new DateTime("10 November 1940 00:00:00"), true],
145
            [new DateTime("11 November 1947 00:00:00"), false],
146
            [new DateTime("11 November 2010 00:00:00"), false],
147
        ];
148
    }
149
}
150