buildCreateQuery_ShouldHandleMultiDimensionalDataArray()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.9713
c 0
b 0
f 0
cc 1
eloc 12
nc 1
nop 0
1
<?php
2
3
namespace Hgraca\MicroDbal\Test\Crud\QueryBuilder\Sql;
4
5
use Hgraca\MicroDbal\Crud\QueryBuilder\Sql\SqlQueryBuilder;
6
use Hgraca\MicroDbal\Crud\QueryBuilder\Sql\UpdateToken;
7
use Hgraca\MicroDbal\Crud\QueryBuilder\Sql\WhereToken;
8
use PHPUnit_Framework_TestCase;
9
10
final class SqlQueryBuilderUnitTest extends PHPUnit_Framework_TestCase
11
{
12
    /**
13
     * @test
14
     *
15
     * @small
16
     */
17
    public function buildCreateQuery_ShouldHandleUniDimensionalDataArray()
18
    {
19
        $tableName = 'dummy_table';
20
        $data = [
21
            'id' => 1,
22
            'name' => 'something',
23
        ];
24
25
        $queryBuilder = new SqlQueryBuilder();
26
27
        list($sql, $bindings) = $queryBuilder->buildCreateQuery($tableName, $data);
28
29
        self::assertEquals("INSERT INTO `$tableName` (`id`, `name`) VALUES (:c0, :c1)", $sql);
30
        self::assertEquals(
31
            [
32
                ':c0' => 1,
33
                ':c1' => 'something'
34
            ],
35
            $bindings
36
        );
37
    }
38
39
    /**
40
     * @test
41
     *
42
     * @small
43
     */
44
    public function buildCreateQuery_ShouldHandleMultiDimensionalDataArray()
45
    {
46
        $tableName = 'dummy_table';
47
        $data = [['id' => 1, 'name' => 'something'], ['id' => 2, 'name' => 'something else']];
48
49
        $queryBuilder = new SqlQueryBuilder();
50
51
        list($sql, $bindings) = $queryBuilder->buildCreateQuery($tableName, $data);
52
53
        self::assertEquals("INSERT INTO `$tableName` (`id`, `name`) VALUES (:c0, :c1)", $sql);
54
        self::assertEquals(
55
            [
56
                [
57
                    ':c0' => 1,
58
                    ':c1' => 'something',
59
                ],
60
                [
61
                    ':c0' => 2,
62
                    ':c1' => 'something else',
63
                ],
64
            ],
65
            $bindings
66
        );
67
    }
68
69
    /**
70
     * @test
71
     *
72
     * @small
73
     */
74
    public function buildReadQuery()
75
    {
76
        $tableName = 'dummy_table';
77
        $where = [
78
            'id' => [1, 2, 3],
79
            'name' => 'something',
80
        ];
81
        $orderBy = [
82
            'id' => 'ASC',
83
            'name' => 'DESC',
84
        ];
85
        $limit = 100;
86
        $offset = 3;
87
88
        $queryBuilder = new SqlQueryBuilder();
89
90
        list($sql, $bindings) = $queryBuilder->buildReadQuery($tableName, $where, $orderBy, $limit, $offset);
91
92
        self::assertEquals(
93
            'SELECT * FROM `dummy_table` WHERE (`id`=:w0 OR `id`=:w1 OR `id`=:w2) AND `name`=:w3 ORDER BY `id` ASC, `name` DESC LIMIT 100 OFFSET 3',
94
            $sql
95
        );
96
        self::assertEquals(
97
            [
98
                WhereToken::BINDING_PREFIX . '0' => 1,
99
                WhereToken::BINDING_PREFIX . '1' => 2,
100
                WhereToken::BINDING_PREFIX . '2' => 3,
101
                WhereToken::BINDING_PREFIX . '3' => 'something',
102
            ],
103
            $bindings
104
        );
105
    }
106
107
    /**
108
     * @test
109
     *
110
     * @small
111
     */
112
    public function buildUpdateQuery()
113
    {
114
        $tableName = 'dummy_table';
115
        $update = [
116
            'name' => 'something',
117
            'age' => 21,
118
        ];
119
        $where = [
120
            'id' => 1,
121
            'name' => 'something',
122
        ];
123
124
        $queryBuilder = new SqlQueryBuilder();
125
126
        list($sql, $bindings) = $queryBuilder->buildUpdateQuery($tableName, $update, $where);
127
128
        self::assertEquals(
129
            'UPDATE `dummy_table` SET `name`=:u0, `age`=:u1 WHERE `id`=:w0 AND `name`=:w1',
130
            $sql
131
        );
132
        self::assertEquals(
133
            [
134
                UpdateToken::BINDING_PREFIX . '0' => 'something',
135
                UpdateToken::BINDING_PREFIX . '1' => 21,
136
                WhereToken::BINDING_PREFIX . '0' => 1,
137
                WhereToken::BINDING_PREFIX . '1' => 'something',
138
            ],
139
            $bindings
140
        );
141
    }
142
143
    /**
144
     * @test
145
     *
146
     * @small
147
     */
148
    public function buildDeleteQuery_ShouldHandleUniDimensionalDataArray()
149
    {
150
        $tableName = 'dummy_table';
151
        $where = [
152
            'id' => 1,
153
            'name' => 'something',
154
        ];
155
156
        $queryBuilder = new SqlQueryBuilder();
157
158
        list($sql, $bindings) = $queryBuilder->buildDeleteQuery($tableName, $where);
159
160
        self::assertEquals(
161
            "DELETE FROM `$tableName` WHERE `id`=" . WhereToken::BINDING_PREFIX . '0 AND `name`=' . WhereToken::BINDING_PREFIX . '1',
162
            $sql
163
        );
164
        self::assertEquals(
165
            [
166
                WhereToken::BINDING_PREFIX . '0' => 1,
167
                WhereToken::BINDING_PREFIX . '1' => 'something',
168
            ],
169
            $bindings
170
        );
171
    }
172
173
    /**
174
     * @test
175
     *
176
     * @small
177
     */
178
    public function buildDeleteQuery_ShouldHandleMultiDimensionalDataArray()
179
    {
180
        $tableName = 'dummy_table';
181
        $where = [
182
            'id' => [1, 2, 3],
183
            'name' => 'something',
184
        ];
185
186
        $queryBuilder = new SqlQueryBuilder();
187
188
        list($sql, $bindings) = $queryBuilder->buildDeleteQuery($tableName, $where);
189
190
        self::assertEquals(
191
            "DELETE FROM `$tableName` WHERE (`id`=" . WhereToken::BINDING_PREFIX . '0 OR `id`=' . WhereToken::BINDING_PREFIX . '1 OR `id`=' . WhereToken::BINDING_PREFIX . '2) AND `name`=' . WhereToken::BINDING_PREFIX . '3',
192
            $sql
193
        );
194
        self::assertEquals(
195
            [
196
                WhereToken::BINDING_PREFIX . '0' => 1,
197
                WhereToken::BINDING_PREFIX . '1' => 2,
198
                WhereToken::BINDING_PREFIX . '2' => 3,
199
                WhereToken::BINDING_PREFIX . '3' => 'something',
200
            ],
201
            $bindings
202
        );
203
    }
204
}
205