Coverage for tests.py : 95%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import unittest
2import database
3import time
4import http
5import flask_unittest
6import flask.globals
7from api import app, connect_db
9db = database.Database(True)
12class ADatabaseTests(unittest.TestCase):
13 def test_a_check_user_exists_one(self):
14 self.assertFalse(db.check_user_exists("test"))
15 def test_b_register(self):
16 self.assertTrue(db.create_user("test", "testpassword", "tech"), "user creation failed")
17 def test_c_check_user_exists_two(self):
18 self.assertTrue(db.check_user_exists("test"))
19 def test_d_login(self):
20 result, id = db.check_password("test", "testpassword")
21 self.assertTrue(result, "failed to login")
22 self.assertIsNotNone(id, "id was none")
23 result, id = db.check_password("test", "wrongpassword")
24 self.assertFalse(result, "logged in with wrong password")
25 self.assertIsNone(id, "id was given for wrong password")
26 result, id = (db.check_password("userDoesntExist", "whocares"))
27 self.assertFalse(result)
28 self.assertIsNone(id)
29 def test_e_create_token(self):
30 result, id = db.check_password("test", "testpassword")
31 if result is False:
32 self.skipTest("failed to login")
33 token = db.create_token(60, id)
34 self.assertIsNotNone(token, "token was none")
35 def test_f_check_token(self):
36 result, user0 = db.check_password("test", "testpassword")
37 if result is False:
38 self.skipTest("failed to login")
39 token = db.create_token(2, user0["id"])
40 if token is None:
41 self.skipTest("failed to create token")
42 user = db.check_token(token)
43 self.assertIsNotNone(user, "user was None")
44 self.assertEqual(user["name"], "test", "user name was wrong")
45 self.assertEqual(user["id"], user0["id"], "user id was wrong")
46 self.assertEqual(user["role"], "tech", "user role was wrong")
47 user = db.check_token("0000a1")
48 self.assertIsNone(user, "user was returned for bad Token")
49 time.sleep(2)
50 user = db.check_token(token)
51 self.assertIsNone(user, "Token worked after timeout")
52 def test_g_get_templates_one(self):
53 self.assertEqual(db.get_templates(), [])
54 def test_h_create_template(self):
55 template = db.create_template("test", [{"title":"test1", "type":"string", "role":"tech"}, {"title":"test2", "type":"string", "role":"doc"}])
56 self.assertEqual(template["name"], "test")
57 self.assertEqual(template["headers"], {"test1": ["string", "tech"], "test2": ["string", "doc"]})
58 def test_i_get_templates_two(self):
59 self.assertIsNot(db.get_templates(), [])
60 templates = db.get_templates()
61 self.assertEqual(templates[0]["name"], "test")
62 self.assertEqual(templates[0]["headers"], {"test1": ["string", "tech"], "test2": ["string", "doc"]})
63 def test_j_get_tests_one(self):
64 self.assertEqual(db.get_tests(), [])
65 def test_k_create_test(self):
66 templates = db.get_templates()
67 if not templates:
68 self.skipTest("failed to get template")
69 self.assertTrue(db.create_test("test",
70 templates[0]["id"],
71 [{"name":"test1", "value":"blue"}, {"name":"test2", "value":"green"}]
72 ))
73 def test_l_get_tests_two(self):
74 self.assertIsNot(db.get_tests(), [])
75 tests = db.get_tests()
76 self.assertEqual(tests[0]["name"], "test")
77 self.assertEqual(tests[0]["fields"], [{"name":"test1", "value":"blue"}, {"name":"test2", "value":"green"}])
78 def test_m_get_logs_one(self):
79 self.assertEqual(db.get_logs(), [])
80 def test_n_create_and_get_log(self):
81 templates = db.get_templates()
82 if not templates:
83 self.skipTest("failed to get template")
84 tests = db.get_tests()
85 if not tests:
86 self.skipTest("failed to get tests")
87 template_id = templates[0]["id"]
88 test_id = tests[0]["id"]
89 result = db.create_log(template_id, test_id, None)["id"]
90 self.assertIsNotNone(result)
91 log = db.get_log(result)
92 self.assertEqual(log["id"], result)
93 self.assertEqual(log["template"], template_id)
94 self.assertEqual(log["test"], test_id)
95 self.assertEqual(log["name"], "test")
96 self.assertEqual(log["slides"], [])
97 result = db.create_log(template_id, test_id, "test2")["id"]
98 self.assertIsNotNone(result)
99 log = db.get_log(result)
100 self.assertEqual(log["id"], result)
101 self.assertEqual(log["template"], template_id)
102 self.assertEqual(log["test"], test_id)
103 self.assertEqual(log["name"], "test2")
104 self.assertEqual(log["slides"], [])
105 def test_o_get_logs_two(self):
106 self.assertIsNot(db.get_logs(), [])
107 self.assertEqual(len(db.get_logs()), 2)
108 def test_pa_post_and_edit_slide(self):
109 logs = db.get_logs()
110 if not logs:
111 self.skipTest("failed to get logs")
112 log_id = logs[0]["id"]
113 fields = {"test1": "green"}
114 result, user0 = db.check_password("test", "testpassword")
115 if not result:
116 self.skipTest("failed to login")
117 token = db.create_token(60, user0["id"])
118 user = db.check_token(token)
119 if user is None:
120 self.skipTest("failed to get user")
121 slide_id = db.post_slide(log_id, fields, False, user)["id"]
122 self.assertIsNotNone(slide_id)
123 self.assertEqual(db.get_logs()[0]["slides"][0], slide_id)
124 slide = db.get_slide(slide_id)
125 self.assertEqual(slide["fields"]["test1"], "green")
126 self.assertFalse(slide["submitted"])
127 self.assertTrue(db.edit_slide(slide_id, {"test1": "blue", "test2": "green"}, True, user))
128 slide = db.get_slide(slide_id)
129 self.assertEqual(slide["fields"]["test1"], "blue")
130 self.assertRaises(KeyError, lambda: slide["fields"]["test2"])
131 def test_pb_get_slides(self):
132 logs = db.get_logs()
133 if not logs:
134 self.skipTest("failed to get logs")
135 log_id = logs[0]["id"]
136 slides = db.get_slides(log_id)
137 self.assertIsNot(slides, [])
138 self.assertEqual(slides[0]["fields"]["test1"], "blue")
140class qApiTests(flask_unittest.ClientTestCase):
141 app = app
143 def setUp(self, client) -> None:
144 connect_db(True)
146 def test_q_register(self, client):
147 response1 = client.post("/register", json={"name":"test", 'password':'testpass', 'role':'tech'})
148 self.assertJsonEqual(response1, {"result": True})
149 response2 = client.post("/register", json={'name':'test', 'password':"testpass", 'role':'doc'})
150 self.assertJsonEqual(response2, {"result": False})
151 response1 = client.put("/login", json={"name":"test", "password":"test"})
152 self.assertJsonEqual(response1, {"result": False})
153 response = client.put("/login", json={"name":"lol", "password":"bad"})
154 self.assertJsonEqual(response, {"result": False})
155 response2 = client.put("login", json={"name":"test", "password":"testpass"})
156 self.assertIsNotNone(response2.json["user"]["token"])
157 self.assertTrue(response2.json["result"])
158 token = response2.json["user"]["token"]
160 templates = client.get(f"/templates/?token=123")
161 self.assertStatus(templates, 403)
162 templates = client.get(f"/templates/?token={token}")
163 self.assertJsonEqual(templates, {"result": []})
165 template = client.post("/templates/create", json={"name": "test",
166 "columns": [
167 {"title":"test1", "type":"string", "role":"tech"},
168 {"title":"test2", "type":"string", "role":"doc"}
169 ],
170 "token": token
171 })
172 self.assertEqual(template.json["name"], "test")
173 self.assertEqual(template.json["headers"], {"test1": ["string", "tech"], "test2": ["string", "doc"]})
174 template = client.post("/templates/create", json={"name": "test",
175 "columns": [
176 {"title":"test1", "type":"string", "role":"tech"},
177 {"title":"test2", "type":"string", "role":"doc"}
178 ],
179 "token": "123"
180 })
181 self.assertStatus(template, 403)
183 template = client.post("/templates/create", json={
184 "columns":
185 {"title":"test1", "type":"string", "role":"tech"},
186 "token": token
187 })
188 self.assertStatus(template, 400)
190 templates = client.get(f"/templates/?token={token}").json["result"]
191 self.assertEqual(templates[0]["name"], "test")
192 self.assertEqual(templates[0]["headers"], {"test1": ["string", "tech"], "test2": ["string", "doc"]})
194 create_test = client.post("/tests/create", json={"name": "test",
195 "template": templates[0]["id"],
196 "fields": [{"name": "test1", "value": "blue"}, {"name": "test2", "value": "green"}],
197 "token": token
198 })
199 self.assertStatus(create_test, 200)
200 create_test = client.post("/tests/create", json={"name": "test",
201 "template": templates[0]["id"],
202 "fieldasdfs": [{"name": "test1", "value": "blue"}, {"name": "test2", "value": "green"}],
203 "token": token
204 })
205 self.assertStatus(create_test, 400)
206 tests = client.get(f"/tests/?token={token}").json["result"]
207 self.assertEqual(tests[0]["name"], "test")
208 self.assertEqual(tests[0]["fields"], [{"name":"test1", "value":"blue"}, {"name":"test2", "value":"green"}])
210 result = client.post("/logs/create", json={"template": templates[0]["id"], "test": tests[0]["id"], "token":token}).json
211 result = result["result"]
212 log = client.get(f"/logs/{result['id']}/?token={token}").json["result"]
213 self.assertEqual(log["template"], templates[0]["id"])
214 self.assertEqual(log["test"], tests[0]["id"])
215 self.assertEqual(log["name"], "test")
216 self.assertEqual(log["slides"], [])
218 logs = client.get(f"/logs/?token={token}").json
219 self.assertEqual(len(logs), 1)
220 fields = {"test1": "green"}
221 slide = client.post(f"/logs/{log['id']}/slides/create", json={"fields": fields, "submit": False, "token":token}).json["result"]
222 slide = client.put(f"/logs/{log['id']}/slides/edit", json={"slide": slide["id"], "fields":{"test1": "blue", "test2": "green"}, "submit": True, "token": token})
223 self.assertStatus(slide, 200)
226 slides = client.get(f"/logs/{log['id']}/slides/?token={token}").json
227 self.assertEqual(len(logs), 1)
228 self.assertEqual(slides[0]["fields"], {"test1": "blue"})
230if __name__ == '__main__':
231 unittest.main()