Skip to content

Commit 8281a2c

Browse files
committed
Update tests
1 parent f449421 commit 8281a2c

20 files changed

+914
-570
lines changed

.gitignore

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
1-
tests/test
2-
tests/*
3-
!tests/t*.nim
41
src/sqlbuilder
5-
.vscode
2+
.vscode
3+
4+
tests/db_general.db
5+
tests/mytest.db
6+
tests/test_string
7+
8+
!tests/t*.nim
9+
tests/*/*
10+
!tests/*/t*.nim
11+
12+
!tests/config.nims
13+
!tests/create_db.nim
14+
15+
tests/test_string/test_dead.nim

tests/config.nims

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
switch("path", "..")
2-
switch("d", "test")
2+
switch("d", "test")
3+
switch("d", "dev")

tests/create_db.nim

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Copyright Thomas T. Jarløv (TTJ) - ttj@ttj.dk
2+
3+
when NimMajor >= 2:
4+
import
5+
db_connector/db_sqlite
6+
else:
7+
import
8+
std/db_sqlite
9+
10+
11+
const dbName = "tests/db_general.db"
12+
13+
proc openDB*(): DbConn =
14+
return open(dbName, "", "", "")
15+
16+
proc createDB*() =
17+
let db = openDB()
18+
19+
db.exec(sql"DROP TABLE IF EXISTS my_table")
20+
db.exec(sql"""CREATE TABLE my_table (
21+
id INTEGER PRIMARY KEY,
22+
name VARCHAR(50) NOT NULL,
23+
age INTEGER,
24+
ident TEXT,
25+
is_nimmer BOOLEAN
26+
)""")
27+
28+
29+
db.exec(sql"INSERT INTO my_table (id, name) VALUES (0, ?)", "Jack")
30+
31+
for i in 1..5:
32+
db.exec(sql("INSERT INTO my_table (id, name, age, ident, is_nimmer) VALUES (?, ?, ?, ?, ?)"), $i, "Joe-" & $i, $i, "Nim", (if i <= 2: "true" else: "false"))
33+
34+
for i in 6..10:
35+
db.exec(sql("INSERT INTO my_table (id, name, age, ident) VALUES (?, ?, ?, ?)"), $i, "Cathrine-" & $i, $i, "Lag")
36+
37+
db.close()
38+
39+
Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,21 @@ import
1313
suite "test formats":
1414

1515
test "genArgsColumns":
16-
let (s, a) = genArgsColumns((true, "name", ""), (true, "age", 30), (false, "nim", ""), (true, "", "154"))
16+
let (s, a) = genArgsColumns(SQLQueryType.INSERT, (true, "name", ""), (true, "age", 30), (false, "nim", ""), (true, "", "154"))
1717

18-
assert s == ["name", "age"]
18+
check s == ["age"]
1919

2020
for k, v in a.query:
2121
if k == 0:
22-
assert $v == """(val: "", isNull: false)"""
23-
if k == 1:
24-
assert $v == """(val: "30", isNull: false)"""
25-
if k == 3:
26-
assert $v == """(val: "154", isNull: false)"""
22+
check $v == """(val: "30", isNull: false)"""
23+
if k == 2:
24+
check $v == """(val: "154", isNull: false)"""
2725

2826
for k, v in a.args:
2927
if k == 0:
30-
assert $v == ""
31-
if k == 1:
32-
assert $v == "30"
33-
if k == 3:
34-
assert $v == "154"
28+
check $v == "30"
29+
if k == 2:
30+
check $v == "154"
3531

3632
let a1 = sqlInsert("my-table", s, a.query)
3733
let a2 = sqlDelete("my-table", s, a.query)

tests/delete/test_delete.nim

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Copyright Thomas T. Jarløv (TTJ) - ttj@ttj.dk
2+
3+
when NimMajor >= 2:
4+
import
5+
db_connector/db_common
6+
else:
7+
import
8+
std/db_common
9+
10+
import
11+
std/strutils,
12+
std/unittest
13+
14+
import
15+
src/sqlbuilder,
16+
src/sqlbuilderpkg/utils_private
17+
18+
19+
suite "delete - normal":
20+
21+
test "sqlDelete":
22+
var test: SqlQuery
23+
24+
test = sqlDelete("my-table", ["name", "age"])
25+
check querycompare(test, sql("DELETE FROM my-table WHERE name = ? AND age = ?"))
26+
27+
28+
test "sqlDeleteWhere":
29+
var test: SqlQuery
30+
31+
test = sqlDelete("my-table", ["name !=", "age > "])
32+
check querycompare(test, sql("DELETE FROM my-table WHERE name != ? AND age > ?"))
33+
34+
35+
test "sqlDelete with null manually":
36+
var test: SqlQuery
37+
38+
test = sqlDelete("my-table", ["name IS NULL", "age"])
39+
check querycompare(test, sql("DELETE FROM my-table WHERE name IS NULL AND age = ?"))
40+
41+
42+
43+
44+
suite "delete - macro":
45+
46+
test "sqlDelete":
47+
var test: SqlQuery
48+
49+
test = sqlDeleteMacro("my-table", ["name", "age"])
50+
check querycompare(test, sql("DELETE FROM my-table WHERE name = ? AND age = ?"))
51+
52+
53+
test "sqlDeleteWhere":
54+
var test: SqlQuery
55+
56+
test = sqlDeleteMacro("my-table", ["name !=", "age > "])
57+
check querycompare(test, sql("DELETE FROM my-table WHERE name != ? AND age > ?"))
58+
59+
60+
test "sqlDelete with null manually":
61+
var test: SqlQuery
62+
63+
test = sqlDeleteMacro("my-table", ["name IS NULL", "age"])
64+
check querycompare(test, sql("DELETE FROM my-table WHERE name IS NULL AND age = ?"))
65+
66+
67+

tests/insert/test_insert.nim

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# Copyright Thomas T. Jarløv (TTJ) - ttj@ttj.dk
2+
3+
when NimMajor >= 2:
4+
import
5+
db_connector/db_common
6+
else:
7+
import
8+
std/db_common
9+
10+
import
11+
std/strutils,
12+
std/unittest
13+
14+
import
15+
src/sqlbuilder,
16+
src/sqlbuilderpkg/utils_private
17+
18+
19+
20+
suite "insert - custom args":
21+
22+
test "sqlInsert - dynamic columns":
23+
var test: SqlQuery
24+
25+
let (s, a1) = genArgsColumns(SQLQueryType.INSERT, (true, "name", ""), (true, "age", 30), (false, "nim", ""), (true, "", "154"))
26+
test = sqlInsert("my-table", s, a1.query)
27+
check querycompare(test, sql("INSERT INTO my-table (age) VALUES (?)"))
28+
29+
30+
test "sqlInsert - setting null":
31+
var test: SqlQuery
32+
33+
let a2 = genArgsSetNull("hje", "")
34+
test = sqlInsert("my-table", ["name", "age"], a2.query)
35+
check querycompare(test, sql("INSERT INTO my-table (name) VALUES (?)"))
36+
37+
38+
39+
suite "insert - default":
40+
41+
test "sqlInsert - default":
42+
var test: SqlQuery
43+
44+
test = sqlInsert("my-table", ["name", "age"])
45+
check querycompare(test, sql("INSERT INTO my-table (name, age) VALUES (?, ?)"))
46+
47+
48+
test "sqlInsert - with manual null":
49+
var test: SqlQuery
50+
51+
test = sqlInsert("my-table", ["name", "age = NULL"])
52+
check querycompare(test, sql("INSERT INTO my-table (name, age) VALUES (?, NULL)"))
53+
54+
55+
test "sqlInsert - with args check for null #1":
56+
var test: SqlQuery
57+
58+
let vals = @["thomas", "30"]
59+
test = sqlInsert("my-table", ["name", "age"], vals)
60+
check querycompare(test, sql("INSERT INTO my-table (name, age) VALUES (?, ?)"))
61+
62+
63+
test "sqlInsert - with args check for null #2":
64+
var test: SqlQuery
65+
66+
let vals = @["thomas", ""]
67+
test = sqlInsert("my-table", ["name", "age"], vals)
68+
check querycompare(test, sql("INSERT INTO my-table (name, age) VALUES (?, NULL)"))
69+
70+
71+
suite "insert - macro":
72+
73+
test "sqlInsert - default":
74+
var test: SqlQuery
75+
76+
test = sqlInsertMacro("my-table", ["name", "age"])
77+
check querycompare(test, sql("INSERT INTO my-table (name, age) VALUES (?, ?)"))
78+
79+
80+
test "sqlInsertMacro - with manual null":
81+
var test: SqlQuery
82+
83+
test = sqlInsertMacro("my-table", ["name", "age = NULL"])
84+
check querycompare(test, sql("INSERT INTO my-table (name, age) VALUES (?, NULL)"))
Lines changed: 70 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,17 @@
11
# Copyright Thomas T. Jarløv (TTJ) - ttj@ttj.dk
22

33
when NimMajor >= 2:
4-
import
5-
db_connector/db_common
4+
import db_connector/db_common
65
else:
7-
import
8-
std/db_common
6+
import std/db_common
97

108
import
119
std/strutils,
1210
std/unittest
1311

1412
import
15-
src/sqlbuilder
16-
17-
18-
19-
proc querycompare(a, b: SqlQuery): bool =
20-
var
21-
a1: seq[string]
22-
b1: seq[string]
23-
for c in splitWhitespace(string(a)):
24-
a1.add($c)
25-
for c in splitWhitespace(string(b)):
26-
b1.add($c)
27-
28-
if a1 != b1:
29-
echo ""
30-
echo "a1: ", string(a)
31-
echo "b1: ", string(b).replace("\n", " ").splitWhitespace().join(" ")
32-
echo ""
33-
34-
return a1 == b1
35-
36-
13+
src/sqlbuilder,
14+
src/sqlbuilderpkg/utils_private
3715

3816

3917

@@ -165,6 +143,72 @@ suite "legacy - sqlSelect(Convert)":
165143
"""))
166144

167145

146+
test "complex query":
147+
148+
var test: SqlQuery
149+
150+
test = sqlSelect("tasksitems AS tasks",
151+
[
152+
"tasks.id",
153+
"tasks.name",
154+
"tasks.status",
155+
"tasks.created",
156+
"his.id",
157+
"his.name",
158+
"his.status",
159+
"his.created",
160+
"projects.id",
161+
"projects.name",
162+
"person.id",
163+
"person.name",
164+
"person.email"
165+
],
166+
[
167+
"history AS his ON his.id = tasks.hid AND his.status = 1",
168+
"projects ON projects.id = tasks.project_id AND projects.status = 1",
169+
"person ON person.id = tasks.person_id"
170+
],
171+
[
172+
"projects.id =",
173+
"tasks.status >"
174+
],
175+
"1,2,3",
176+
"tasks.id",
177+
"ORDER BY tasks.created DESC"
178+
)
179+
180+
check querycompare(test, (sql("""
181+
SELECT
182+
tasks.id,
183+
tasks.name,
184+
tasks.status,
185+
tasks.created,
186+
his.id,
187+
his.name,
188+
his.status,
189+
his.created,
190+
projects.id,
191+
projects.name,
192+
person.id,
193+
person.name,
194+
person.email
195+
FROM
196+
tasksitems AS tasks
197+
LEFT JOIN history AS his ON
198+
(his.id = tasks.hid AND his.status = 1)
199+
LEFT JOIN projects ON
200+
(projects.id = tasks.project_id AND projects.status = 1)
201+
LEFT JOIN person ON
202+
(person.id = tasks.person_id)
203+
WHERE
204+
projects.id = ?
205+
AND tasks.status > ?
206+
AND tasks.id in (1,2,3)
207+
ORDER BY
208+
tasks.created DESC
209+
""")))
210+
211+
168212

169213
suite "legacy - sqlSelect(Convert) - genArgs":
170214

0 commit comments

Comments
 (0)