Completed
Push — master ( 226c9c...5c7c85 )
by Jérémy
03:00
created

testCanOverrideDateTimeToStringOption()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
c 1
b 0
f 0
dl 0
loc 11
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Th3Mouk\RethinkDB\Translator\Tests;
6
7
use PHPUnit\Framework\TestCase;
8
use r\Connection;
9
use r\Cursor;
10
use Th3Mouk\RethinkDB\Translator\Translate;
11
12
class TranslateTest extends TestCase
13
{
14
    public function testCanNormalizeArrayObjectValues(): void
15
    {
16
        $values = [new \ArrayObject(['foo' => 'bar']),
17
        ];
18
19
        $this->assertEquals(Translate::normalizeValues($values), [
20
            ['foo' => 'bar'],
21
        ]);
22
    }
23
24
    public function testCanNormalizeDateTimeValues(): void
25
    {
26
        $values = [new \DateTime('2000-05-26T13:30:20+0000')];
27
28
        $this->assertEquals(Translate::normalizeValues($values), ['2000-05-26T13:30:20+0000']);
29
    }
30
31
    public function testCanNormalizeNestedValues(): void
32
    {
33
        $values = [
34
            new \ArrayObject([
35
                'foo' => new \DateTime('2000-05-26T13:30:20+0000'),
36
            ]),
37
        ];
38
39
        $this->assertEquals(Translate::normalizeValues($values), [
40
            ['foo' => '2000-05-26T13:30:20+0000'],
41
        ]);
42
    }
43
44
    public function testCanOverrideDateTimeToStringOption(): void
45
    {
46
        $values = [new \ArrayObject([
47
            'foo' => new \DateTime('2000-05-26T13:30:20+0000'),
48
        ]),
49
        ];
50
51
        $normalized = Translate::normalizeValues($values, ['dateTimeToString' => false]);
52
53
        $this->assertInstanceOf(\DateTime::class, $normalized[0]['foo']);
54
        $this->assertEquals($normalized[0]['foo']->format(DATE_ISO8601), '2000-05-26T13:30:20+0000');
55
    }
56
57
    public function testCanNormalizeNestedArrayObjectInArray(): void
58
    {
59
        $values = [
60
            [
61
                new \ArrayObject(['foo' => 'bar']),
62
            ],
63
        ];
64
65
        $this->assertEquals(Translate::normalizeValues($values), [
66
            [
67
                ['foo' => 'bar'],
68
            ],
69
        ]);
70
    }
71
72
    public function testCanTransformArrayObjectToAssociativeArray(): void
73
    {
74
        $ao = new \ArrayObject(['foo' => 'bar']);
75
76
        $this->assertEquals(Translate::arrayObjectToAssociativeArray($ao), ['foo' => 'bar']);
77
    }
78
79
    /**
80
     * @throws \ReflectionException
81
     */
82
    public function testCanTransformCursorToAssociativeArray(): void
83
    {
84
        $connection = $this->createMock(Connection::class);
85
86
        $data      = new \stdClass();
87
        $data->foo = 'bar';
88
        $data->bar = 'foo';
89
90
        /** @var Connection $connection */
91
        $cursor = new Cursor(
92
            $connection,
93
            [
94
                'r' => [$data],
95
                't' => 2,
96
            ],
97
            'token',
98
            [],
99
            []
100
        );
101
102
        $this->assertEquals(Translate::cursorToAssociativeArray($cursor), [
103
            [
104
                'foo' => 'bar',
105
                'bar' => 'foo',
106
            ],
107
        ]);
108
    }
109
110
    public function testCanTransformArrayOfArrayObjectToAssociativeArray(): void
111
    {
112
        $mockResult = [];
113
114
        $mockResult[] = new \ArrayObject([
115
            'domains' => ['cine.fr'],
116
            'id' => '46ba3de0-3210-4f7b-aac9-c5176daa0cca',
117
            'status_changed_at' => new \DateTime('2000-05-26T13:30:20+0000'),
118
        ]);
119
120
        $mockResult[] = new \ArrayObject([
121
            'domains' => ['nyxinteractive.eu', 'irond.info'],
122
            'id' => '4640ebcb-48f0-4948-8d5b-93cf08d4249c',
123
            'status_changed_at' => new \DateTime('2000-05-27T13:30:20+0000'),
124
        ]);
125
126
        $this->assertEquals(Translate::arrayOfArrayObjectToAssociativeArray($mockResult), [
127
            [
128
                'domains' => ['cine.fr'],
129
                'id' => '46ba3de0-3210-4f7b-aac9-c5176daa0cca',
130
                'status_changed_at' => '2000-05-26T13:30:20+0000',
131
            ],
132
            [
133
                'domains' => ['nyxinteractive.eu', 'irond.info'],
134
                'id' => '4640ebcb-48f0-4948-8d5b-93cf08d4249c',
135
                'status_changed_at' => '2000-05-27T13:30:20+0000',
136
            ],
137
        ]);
138
    }
139
}
140