ChronosTimestampsTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 29
c 1
b 0
f 0
dl 0
loc 59
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testFreshTimestamp() 0 5 1
A testAsDateTime() 0 6 1
A dateValues() 0 26 1
A testAsDateTimeException() 0 7 1
1
<?php
2
3
namespace Cino\LaravelChronos\Tests\Database\Concerns;
4
5
use Cake\Chronos\Chronos;
6
use Cake\Chronos\ChronosInterface;
7
use Cino\LaravelChronos\Eloquent\Model;
8
use DateTime;
9
use DateTimeImmutable;
10
use Exception;
11
use PHPUnit\Framework\TestCase;
12
13
class ChronosTimestampsTest extends TestCase
14
{
15
    public function dateValues(): array
16
    {
17
        return [
18
            'timestamp' => [
19
                1545207000,
20
                new Chronos('2018-12-19T08:10:00.000000+0000'),
21
            ],
22
            'chronos instance' => [
23
                new Chronos('2018-12-19T08:10:00.000000+0000'),
24
                new Chronos('2018-12-19T08:10:00.000000+0000'),
25
            ],
26
            'datetime instance' => [
27
                new DateTime('2018-12-19T08:10:00.000000+0000'),
28
                new Chronos('2018-12-19T08:10:00.000000+0000'),
29
            ],
30
            'datetime immutable instance' => [
31
                new DateTimeImmutable('2018-12-19T08:10:00.000000+0000'),
32
                new Chronos('2018-12-19T08:10:00.000000+0000'),
33
            ],
34
            'string' => [
35
                '2018-12-19T08:10:00.000000+0000',
36
                new Chronos('2018-12-19T08:10:00.000000+0000'),
37
            ],
38
            'simple' => [
39
                '2018-12-19',
40
                new Chronos('2018-12-19T00:00:00.000000+0000'),
41
            ],
42
        ];
43
    }
44
45
    /**
46
     * @dataProvider dateValues
47
     * @param $value
48
     * @param \Cake\Chronos\Chronos $expected
49
     */
50
    public function testAsDateTime($value, Chronos $expected)
51
    {
52
        $model = new TimestampsTestModel();
53
54
        $this->assertInstanceOf(ChronosInterface::class, $model->asDateTime($value));
55
        $this->assertEquals($expected, $model->asDateTime($value));
56
    }
57
58
    public function testAsDateTimeException(): void
59
    {
60
        $this->expectException(Exception::class);
61
        $this->expectExceptionMessage('Failed to parse time string');
62
63
        $model = new TimestampsTestModel();
64
        $model->asDateTime('invalid date');
65
    }
66
67
    public function testFreshTimestamp(): void
68
    {
69
        $model = new TimestampsTestModel();
70
71
        $this->assertInstanceOf(ChronosInterface::class, $model->freshTimestamp());
72
    }
73
}
74
75
class TimestampsTestModel extends Model
76
{
77
78
}
79