This repository was archived by the owner on May 30, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathtests.py
350 lines (320 loc) · 11.4 KB
/
tests.py
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
import unittest
import time
import os
from pathlib import Path
from bot.commands import calculate, translate
from bot.db import DBHelper
from bot.data_types import Message, User, ScheduleEntry, Announcement
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
DB_SQL_SCRIPT = os.path.join(BASE_DIR, "db", "bot.db.m1.sql")
class DBHelperTest(unittest.TestCase):
def setUp(self):
"""Create/connect to development database"""
self.SQL_SCRIPT = Path(
DB_SQL_SCRIPT
).read_text() # read a PosixPath file as str
# db connection & creation
self.db = DBHelper(filename="test.db")
print("connecting to db... done.")
self.db.setup()
def tearDown(self):
"""Drop DB tables, close connection and remove the db later"""
self.db.destroy()
def test_add_message(self):
# inserting the message
msg = Message(1, 2, 3, 4, 5, "message 1")
self.assertTrue(self.db.add_message(msg))
# making sure it was inserted right
sql = "SELECT * FROM Message"
got_msg = Message(*self.db.cur.execute(sql).fetchone())
self.assertEqual(msg.id, got_msg.id)
self.assertEqual(msg.update_id, got_msg.update_id)
self.assertEqual(msg.user_id, got_msg.user_id)
self.assertEqual(msg.chat_id, got_msg.chat_id)
self.assertEqual(msg.date, got_msg.date)
self.assertEqual(msg.text, got_msg.text)
print("testing add_message... done.")
def test_get_message(self):
# inserting the message
sql = "INSERT INTO Message VALUES (?, ?, ?, ?, ?, ?)"
params = (1, 2, 3, 4, 5, "message")
self.db.cur.execute(sql, params)
# making sure we get it right
msg = self.db.get_message(1)
self.assertTrue(isinstance(msg, Message))
self.assertEqual(msg.id, params[0])
self.assertEqual(msg.update_id, params[1])
self.assertEqual(msg.user_id, params[2])
self.assertEqual(msg.chat_id, params[3])
self.assertEqual(msg.date, params[4])
self.assertEqual(msg.text, params[5])
not_msg = self.db.get_message(2)
self.assertFalse(not_msg)
print("testing get_message... done.")
def test_add_user(self):
# insert new user
user = User(
70437390,
False,
True,
"Ahmed",
"Shahwan",
"ash753",
"en",
True,
1555512911.45624,
1556303495.79887,
"/calculate",
332324,
)
self.assertTrue(self.db.add_user(user))
# testing if it's inserted correctly
sql = "SELECT * FROM User"
got_user = User(*self.db.cur.execute(sql).fetchone())
self.assertEqual(user.id, got_user.id)
self.assertEqual(user.is_bot, got_user.is_bot)
self.assertEqual(user.is_admin, got_user.is_admin)
self.assertEqual(user.first_name, got_user.first_name)
self.assertEqual(user.last_name, got_user.last_name)
self.assertEqual(user.username, got_user.username)
self.assertEqual(user.language_code, got_user.language_code)
self.assertEqual(user.active, got_user.active)
self.assertEqual(user.created, got_user.created)
self.assertEqual(user.updated, got_user.updated)
self.assertEqual(user.last_command, got_user.last_command)
self.assertEqual(user.chat_id, got_user.chat_id)
def test_get_user(self):
# inserting user to db using sql
sql = "INSERT INTO User VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
params = (
70437390,
False,
True,
"Ahmed",
"Shahwan",
"ash753",
"en",
True,
1555512911.45624,
1556303495.79887,
"/calculate",
2345,
)
self.db.cur.execute(sql, params)
# user exists
user = self.db.get_user(params[0])
self.assertTrue(isinstance(user, User))
self.assertEqual(user.id, params[0])
self.assertEqual(user.is_bot, params[1])
self.assertEqual(user.is_admin, params[2])
self.assertEqual(user.first_name, params[3])
self.assertEqual(user.last_name, params[4])
self.assertEqual(user.username, params[5])
self.assertEqual(user.language_code, params[6])
self.assertEqual(user.active, params[7])
self.assertEqual(user.created, params[8])
self.assertEqual(user.updated, params[9])
self.assertEqual(user.last_command, params[10])
self.assertEqual(user.chat_id, params[11])
# user doesn't exist
not_user = self.db.get_user(111)
self.assertTrue(not_user is None)
def test_get_users(self):
# add users using sql, then get them using the function
# inserting users using sql
sql = "INSERT INTO User VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
user1 = (
43739,
False,
False,
"Ahme",
"Shahwa",
"ash75",
"en",
True,
51291,
30349,
"/calculate",
33,
)
user2 = (
4373,
False,
True,
"Ahm",
"Shahw",
"ash7",
"en",
False,
5129,
3034,
"/translate",
555,
)
user3 = (
437,
False,
False,
"Ah",
"Shah",
"ash",
"en",
True,
512,
303,
"/ocr_url",
556,
)
self.db.cur.execute(sql, user1)
self.db.cur.execute(sql, user2)
self.db.cur.execute(sql, user3)
got_users = self.db.get_users()
self.assertTrue(isinstance(got_users, list))
self.assertTrue(len(got_users) == 3)
self.assertTrue(isinstance(got_users[0], User))
self.assertTrue(isinstance(got_users[1], User))
self.assertTrue(isinstance(got_users[2], User))
def test_set_user_last_command(self):
# create a user in db with tested functions
user = User(
7043739,
False,
False,
"Ahme",
"Shahwa",
"ash75",
"en",
True,
51291,
30349,
"/calculate",
5554,
)
self.db.add_user(user)
# alter user's last command
self.assertTrue(
self.db.set_user_last_command(user.id, time.time(), "/translate")
)
# test alteration success
got_user = self.db.get_user(user.id)
self.assertEqual("/translate", got_user.last_command)
def test_set_user_status(self):
# create a user
user = User(
7043739,
False,
False,
"Ahme",
"Shahwa",
"ash75",
"en",
True,
51291,
30349,
"/calculate",
5556,
)
self.db.add_user(user)
# alter user's status
self.assertTrue(self.db.set_user_status(user.id, time.time(), False))
# test alteration success
got_user = self.db.get_user(user.id)
self.assertEqual(False, got_user.active)
def test_set_user_chat_id(self):
# create a user without caht_id
user = User(
7043739,
False,
False,
"Ahme",
"Shahwa",
"ash75",
"en",
True,
51291,
30349,
"/calculate",
None,
)
self.db.add_user(user)
# alter user's chat_id
new_chat_id = 3456
self.db.set_user_chat_id(user.id, time.time(), new_chat_id)
# test alternation
got_user = self.db.get_user(user.id)
self.assertEqual(got_user.chat_id, new_chat_id)
def test_get_schedule(self):
# get entries
entries_list = self.db.get_schedule()
self.assertTrue(isinstance(entries_list, list))
self.assertTrue(len(entries_list) == 14)
self.assertTrue(isinstance(entries_list[0], ScheduleEntry))
self.assertTrue(entries_list[0].id, 1)
self.assertTrue(isinstance(entries_list[1], ScheduleEntry))
self.assertTrue(entries_list[1].id, 2)
self.assertTrue(isinstance(entries_list[2], ScheduleEntry))
self.assertTrue(entries_list[2].id, 3)
print(entries_list[0], entries_list[1], entries_list[2])
def test_get_schedule_of(self):
schedule = self.db.get_schedule_of("saturday")
self.assertTrue(isinstance(schedule, list))
self.assertEqual(len(schedule), 3)
self.assertTrue(isinstance(schedule[0], tuple))
self.assertTrue(isinstance(schedule[1], tuple))
self.assertTrue(isinstance(schedule[2], tuple))
print("=++Schedule++= ", schedule)
def test_add_announcement(self):
# add announcement
ann = Announcement(
"08:30", "DSP Assignment 10 should be delivered tomorrow", "once"
)
ann1 = Announcement("10:10", "Another test announcement", "twice")
self.assertTrue(self.db.add_announcement(ann))
self.assertTrue(self.db.add_announcement(ann1))
# get announcement to test
sql = "SELECT * FROM Announcement"
result = self.db.cur.execute(sql)
got_ann = result.fetchone()
got_ann1 = result.fetchone()
self.assertEqual(1, got_ann[0])
self.assertEqual(ann.time, got_ann[1])
self.assertEqual(ann.description, got_ann[2])
self.assertEqual(ann.done, got_ann[3])
self.assertEqual(2, got_ann1[0])
self.assertEqual(ann1.time, got_ann1[1])
self.assertEqual(ann1.description, got_ann1[2])
self.assertEqual(ann1.done, got_ann1[3])
def test_get_announcements(self):
# add some announcements
ann1 = Announcement(
"21:30", "DSP Assignment 10 should be delivered tomorrow", ""
)
ann2 = Announcement("10:30", "Communication Lecture is cancelled", "once")
ann3 = Announcement("09:30", "Dr Tamer is not coming again", "twice")
self.db.add_announcement(ann1)
self.db.add_announcement(ann2)
self.db.add_announcement(ann3)
# get what've been added and test it
anns = self.db.get_announcements()
self.assertTrue(isinstance(anns, list))
self.assertTrue(isinstance(anns[0], Announcement))
self.assertTrue(isinstance(anns[1], Announcement))
self.assertTrue(isinstance(anns[2], Announcement))
def test_update_announcement(self):
# add an announcment
self.db.add_announcement(
Announcement("21:30", "DSP Assignment 10 should be delivered tomorrow", "")
)
ann = self.db.get_announcements()[
0
] # get announcment before update to use its id
self.db.update_announcement(ann.id, "once") # update
ann_updated = self.db.get_announcements()[0] # get announcment after update
self.assertEqual(ann_updated.done, "once") # test updated value
# class CommandsTest(unittest.TestCase):
# def test_calculate_command(self):
# self.assertEqual(calculate("5*5"), "Result: 25")
# def test_translate_command(self):
# self.assertEqual(translate("Ahmed"), "أحمد")
if __name__ == "__main__":
unittest.main()