-
Notifications
You must be signed in to change notification settings - Fork 524
/
Copy pathsql_tests.dm
138 lines (107 loc) · 3.73 KB
/
sql_tests.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
var/DBConnection/dbcon_ut
/proc/check_ut_db()
if (!dbcon_ut)
dbcon_ut = new("127.0.0.1", 3306, "ss13_test", "root")
return establish_db_connection(dbcon_ut)
/datum/unit_test/sql_preferences_columns
name = "SQL: Preferences Columns"
/datum/unit_test/sql_preferences_columns/start_test()
if (!check_ut_db())
fail("Test DB setup failed.")
return TRUE
var/faults = 0
var/valid_columns = list()
var/list/table_names = list(
"ss13_characters",
"ss13_characters_flavour",
"ss13_player",
"ss13_player_preferences",
"ss13_player_pai"
)
for (var/T in table_names)
var/DBQuery/get_cs = dbcon_ut.NewQuery("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME` = :table:")
get_cs.Execute(list("table" = T))
if (get_cs.ErrorMsg())
log_unit_test("[ascii_red]--------------- SQL error encountered: [get_cs.ErrorMsg()].[ascii_reset]")
fail("SQL error encountered.")
return TRUE
valid_columns[T] = list()
while (get_cs.NextRow())
valid_columns[T][get_cs.item[1]] = TRUE
var/datum/preferences/P = new(null)
for (var/datum/category_group/player_setup_category/G in P.player_setup.categories)
for (var/datum/category_item/player_setup_item/A in G.items)
var/list/test_columns = list()
var/list/temp
temp = A.gather_load_query()
for (var/B in temp)
if (!test_columns[B])
test_columns[B] = list()
test_columns[B] |= temp[B]["vars"]
test_columns[B] |= temp[B]["args"]
temp.Cut()
temp = A.gather_load_parameters()
var/list/unfound = temp.Copy()
for (var/C in temp)
for (var/B in test_columns)
if (C in test_columns[B])
unfound -= C
break
if (unfound.len)
for (var/C in unfound)
log_unit_test("[ascii_red]--------------- load parameter '[C]' not found in any queries for '[A.name]':[A.type].[ascii_reset]")
faults++
temp.Cut()
temp = A.gather_save_query()
for (var/B in temp)
if (!test_columns[B])
test_columns[B] = list()
test_columns[B] |= temp[B]
temp.Cut()
for (var/B in test_columns)
var/list/valids = valid_columns[B]
if (!valids || !valids.len)
log_unit_test("[ascii_red]--------------- table '[B]' referenced but not found for '[A.name]':[A.type].[ascii_reset]")
faults++
continue
for (var/C in test_columns[B])
if (!(C in valids))
log_unit_test("[ascii_red]--------------- column '[C]' referenced but not in table '[B]' for item '[A.name]':[A.type].[ascii_reset]")
faults++
if (faults)
fail("\[[faults]\] faults found in the SQL preferences setup.")
else
pass("No faults found in the SQL preferences setup.")
return TRUE
/datum/unit_test/sql_preferences_vars
name = "SQL: Preferences Variables"
/datum/unit_test/sql_preferences_vars/start_test()
var/faults = 0
var/total = 0
var/datum/preferences/P = new(null)
for (var/datum/category_group/player_setup_category/G in P.player_setup.categories)
for (var/datum/category_item/player_setup_item/A in G.items)
var/list/test = list()
var/list/temp = A.gather_load_query()
for (var/B in temp)
var/list/some_vars = temp[B]["vars"]
for (var/C in some_vars)
if (some_vars[C])
C = some_vars[C]
var/list/layers = splittext(C, "/")
if (layers.len == 1)
test |= C
else
test |= layers[1]
else
test |= C
total += test.len
for (var/V in test)
if (!(V in P.vars))
log_unit_test("[ascii_red]--------------- variable '[V]' referenced by, but not found in preferences class variables, '[A.name]':[A.type].[ascii_reset]")
faults++
if (faults)
fail("\[[faults] / [total]\] variable references found invalid in the SQL preferences setup.")
else
pass("All \[[total]\] variable references found valid in the SQL preferences setup.")
return TRUE