home · contact · privacy
Put mypy into strict mode, adapt code to still pass.
[plomtask] / tests / utils.py
1 """Shared test utilities."""
2 from unittest import TestCase
3 from threading import Thread
4 from http.client import HTTPConnection
5 from datetime import datetime
6 from os import remove as remove_file
7 from plomtask.db import DatabaseFile, DatabaseConnection
8 from plomtask.http import TaskHandler, TaskServer
9
10
11 class TestCaseWithDB(TestCase):
12     """Module tests not requiring DB setup."""
13
14     def setUp(self) -> None:
15         timestamp = datetime.now().timestamp()
16         self.db_file = DatabaseFile(f'test_db:{timestamp}')
17         self.db_file.remake()
18         self.db_conn = DatabaseConnection(self.db_file)
19
20     def tearDown(self) -> None:
21         self.db_conn.close()
22         remove_file(self.db_file.path)
23
24
25 class TestCaseWithServer(TestCaseWithDB):
26     """Module tests against our HTTP server/handler (and database)."""
27
28     def setUp(self) -> None:
29         super().setUp()
30         self.httpd = TaskServer(self.db_file, ('localhost', 0), TaskHandler)
31         self.server_thread = Thread(target=self.httpd.serve_forever)
32         self.server_thread.daemon = True
33         self.server_thread.start()
34         self.conn = HTTPConnection(str(self.httpd.server_address[0]),
35                                    self.httpd.server_address[1])
36
37     def tearDown(self) -> None:
38         self.httpd.shutdown()
39         self.httpd.server_close()
40         self.server_thread.join()
41         super().tearDown()