Skip to content

Commit 53c2517

Browse files
committed
test: finished testing multiInsertUpdate and added more tests on select
1 parent a7cc6fc commit 53c2517

File tree

2 files changed

+241
-0
lines changed

2 files changed

+241
-0
lines changed

tests/QueryBuilderTest/ClausesTest/MultiInsertUpdateTest.php

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,188 @@
33
namespace QueryBuilderTest\ClausesTest;
44

55
use PHPUnit\Framework\TestCase;
6+
use Saraf\QB\QueryBuilder\Clauses\MultiInsertUpdate;
7+
use Saraf\QB\QueryBuilder\Exceptions\QueryBuilderException;
68

79
final class MultiInsertUpdateTest extends TestCase
810
{
11+
public function testInsertAliasEscape()
12+
{
13+
$miu = new MultiInsertUpdate();
14+
15+
$miu->setInsertAlias("updates");
16+
17+
$reflection = new \ReflectionClass($miu);
18+
19+
$alias = $reflection->getProperty("alias");
20+
$alias->setAccessible(true);
21+
22+
self::assertEquals("`updates`", $alias->getValue($miu));
23+
24+
25+
$miu->setInsertAlias("updates", false);
26+
self::assertEquals("updates", $alias->getValue($miu));
27+
}
28+
29+
public function testSetColumnsThrowExceptionOnRowsSet()
30+
{
31+
$miu = new MultiInsertUpdate();
32+
33+
self::expectException(QueryBuilderException::class);
34+
$miu->addRows([
35+
["John", "Doe", "Baker st.", true],
36+
["Mohammad", "Abbas", "No 1", false]
37+
])->setColumns([
38+
"name", "family", "address", "isActive"
39+
]);
40+
}
41+
42+
public function testAddUpdateExceptionWithoutColumns()
43+
{
44+
$miu = new MultiInsertUpdate();
45+
46+
self::expectException(QueryBuilderException::class);
47+
$miu->addUpdate("name", "John");
48+
}
49+
50+
public function testAddUpdateExceptionWithoutRows()
51+
{
52+
$miu = new MultiInsertUpdate();
53+
54+
self::expectException(QueryBuilderException::class);
55+
$miu->setColumns([
56+
"name", "family", "address", "isActive"
57+
])->addUpdate("name", "John");
58+
}
59+
60+
/**
61+
* @throws \Saraf\QB\QueryBuilder\Exceptions\QueryBuilderException
62+
*/
63+
public function testAddUpdateEscapeBoolNULL()
64+
{
65+
$miu = new MultiInsertUpdate();
66+
67+
$miu->setColumns([
68+
"name", "address", "isActive"
69+
])->addRows([
70+
["John", "USA", false],
71+
["Jessi", "CANADA", true],
72+
])->addUpdates([
73+
"isActive" => true,
74+
"address" => null
75+
], false, false);
76+
77+
$reflection = new \ReflectionClass($miu);
78+
79+
$updates = $reflection->getProperty("updates");
80+
$updates->setAccessible(true);
81+
82+
self::assertEquals("1", $updates->getValue($miu)["isActive"]);
83+
self::assertEquals("NULL", $updates->getValue($miu)["address"]);
84+
}
85+
86+
public function testCompileWithEmptyTable()
87+
{
88+
$miu = new MultiInsertUpdate();
89+
90+
self::expectException(QueryBuilderException::class);
91+
$miu->setInsertAlias("u")->setColumns([
92+
"name", "address", "isActive"
93+
])->addRows([
94+
["John", "USA", false],
95+
["Jessi", "CANADA", true],
96+
])->addUpdates([
97+
"isActive" => true,
98+
"address" => null
99+
], false, false)
100+
->compile();
101+
}
102+
103+
public function testCompileWithNoAlias()
104+
{
105+
$miu = new MultiInsertUpdate();
106+
107+
self::expectException(QueryBuilderException::class);
108+
$miu->into("Users")->setColumns([
109+
"name", "address", "isActive"
110+
])->addRows([
111+
["John", "USA", false],
112+
["Jessi", "CANADA", true],
113+
])->addUpdates([
114+
"isActive" => true,
115+
"address" => null
116+
], false, false)
117+
->compile();
118+
}
119+
120+
public function testCompileWithNoColumn()
121+
{
122+
$miu = new MultiInsertUpdate();
123+
124+
self::expectException(QueryBuilderException::class);
125+
$miu->into("Users")->setInsertAlias("u")->addRows([
126+
["John", "USA", false],
127+
["Jessi", "CANADA", true],
128+
])->addUpdates([
129+
"isActive" => true,
130+
"address" => null
131+
], false, false)
132+
->compile();
133+
}
134+
135+
public function testCompileWithNoRows()
136+
{
137+
$miu = new MultiInsertUpdate();
138+
139+
self::expectException(QueryBuilderException::class);
140+
$miu->into("Users")->setInsertAlias("u")->setColumns([
141+
"name", "address", "isActive"
142+
])->addUpdates([
143+
"isActive" => true,
144+
"address" => null
145+
], false, false)
146+
->compile();
147+
}
148+
149+
public function testCompileWithNoUpdates()
150+
{
151+
$miu = new MultiInsertUpdate();
152+
153+
self::expectException(QueryBuilderException::class);
154+
$miu->into("Users")->setInsertAlias("u")->setColumns([
155+
"name", "address", "isActive"
156+
])->addRows([
157+
["John", "USA", false],
158+
["Jessi", "CANADA", true],
159+
])->compile();
160+
}
161+
162+
/**
163+
* @throws \Saraf\QB\QueryBuilder\Exceptions\QueryBuilderException
164+
*/
165+
public function testValidMultiInsertUpdateQuery()
166+
{
167+
$miu = new MultiInsertUpdate();
168+
$query = $miu->into("Users")
169+
->setInsertAlias("u")
170+
->setColumns([
171+
"name", "address", "isActive"
172+
])
173+
->addRows([
174+
["John", "USA", false],
175+
["Jessi", "CANADA", true],
176+
])
177+
->addUpdates([
178+
"isActive" => true,
179+
"address" => null
180+
], false, false)
181+
->compile()
182+
->getQueryAsString();
183+
184+
// TODO: is this valid?
185+
self::assertEquals(
186+
"INSERT INTO `Users` (`name`,`address`,`isActive`) VALUES ('John','USA',0),('Jessi','CANADA',1) AS `u` ON DUPLICATE KEY UPDATE isActive = 1, address = NULL",
187+
$query
188+
);
189+
}
9190
}

tests/QueryBuilderTest/ClausesTest/SelectTest.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,66 @@ public function compileWhenColumnsAreEmptyArray()
221221
$s->compile();
222222
}
223223

224+
public function testAddColumnMin()
225+
{
226+
$s = new Select();
227+
228+
$s->addColumnMin("price");
229+
230+
$s->addColumnMin("amount", "least", false);
231+
232+
$reflection = new \ReflectionClass($s);
233+
234+
$statements = $reflection->getProperty("statements");
235+
$statements->setAccessible(true);
236+
237+
self::assertCount(2, $statements->getValue($s));
238+
self::assertEquals("MIN(`price`)", $statements->getValue($s)[0]);
239+
self::assertEquals("MIN(amount) AS `least`", $statements->getValue($s)[1]);
240+
}
241+
242+
/**
243+
* @throws \Saraf\QB\QueryBuilder\Exceptions\QueryBuilderException
244+
*/
245+
public function testAddColumnMax()
246+
{
247+
$s = new Select();
248+
249+
$s->addColumnMax("price");
250+
251+
$s->addColumnMax("amount", "best", false);
252+
253+
$reflection = new \ReflectionClass($s);
254+
255+
$statements = $reflection->getProperty("statements");
256+
$statements->setAccessible(true);
257+
258+
self::assertCount(2, $statements->getValue($s));
259+
self::assertEquals("MAX(`price`)", $statements->getValue($s)[0]);
260+
self::assertEquals("MAX(amount) AS `best`", $statements->getValue($s)[1]);
261+
}
262+
263+
/**
264+
* @throws \Saraf\QB\QueryBuilder\Exceptions\QueryBuilderException
265+
*/
266+
public function testAddColumnAVG()
267+
{
268+
$s = new Select();
269+
270+
$s->addColumnAverage("price");
271+
272+
$s->addColumnAverage("amount", "medium", false);
273+
274+
$reflection = new \ReflectionClass($s);
275+
276+
$statements = $reflection->getProperty("statements");
277+
$statements->setAccessible(true);
278+
279+
self::assertCount(2, $statements->getValue($s));
280+
self::assertEquals("AVG(`price`)", $statements->getValue($s)[0]);
281+
self::assertEquals("AVG(amount) AS `medium`", $statements->getValue($s)[1]);
282+
}
283+
224284
/**
225285
* @test
226286
* @throws \Saraf\QB\QueryBuilder\Exceptions\QueryBuilderException

0 commit comments

Comments
 (0)