home · contact · privacy
6538e87019bfa7bffa0d8fccb22f8981500943d1
[plomtask] / tests / conditions.py
1 """Test Conditions module."""
2 from tests.utils import TestCaseWithDB, TestCaseWithServer
3 from plomtask.conditions import Condition
4 from plomtask.processes import Process
5 from plomtask.exceptions import NotFoundException, HandledException
6
7
8 class TestsWithDB(TestCaseWithDB):
9     """Tests requiring DB, but not server setup."""
10
11     def test_Condition_by_id(self) -> None:
12         """Test creation and findability."""
13         condition = Condition(None, False)
14         condition.save(self.db_conn)
15         self.assertEqual(Condition.by_id(self.db_conn, 1), condition)
16         with self.assertRaises(NotFoundException):
17             self.assertEqual(Condition.by_id(self.db_conn, 0), condition)
18         with self.assertRaises(NotFoundException):
19             self.assertEqual(Condition.by_id(self.db_conn, 2), condition)
20
21     def test_Condition_all(self) -> None:
22         """Test .all()."""
23         self.assertEqual(Condition.all(self.db_conn), [])
24         condition_1 = Condition(None, False)
25         condition_1.save(self.db_conn)
26         self.assertEqual(Condition.all(self.db_conn), [condition_1])
27         condition_2 = Condition(None, False)
28         condition_2.save(self.db_conn)
29         self.assertEqual(Condition.all(self.db_conn), [condition_1,
30                                                        condition_2])
31
32     def test_Condition_singularity(self) -> None:
33         """Test pointers made for single object keep pointing to it."""
34         condition_1 = Condition(None, False)
35         condition_1.save(self.db_conn)
36         condition_1.is_active = True
37         condition_retrieved = Condition.by_id(self.db_conn, 1)
38         self.assertEqual(True, condition_retrieved.is_active)
39
40     def test_Condition_removal(self) -> None:
41         """Test removal of Condition."""
42         cond = Condition(None, False)
43         cond.save(self.db_conn)
44         assert isinstance(cond.id_, int)
45         proc = Process(None)
46         proc.save(self.db_conn)
47         proc.set_conditions(self.db_conn, [cond.id_], 'conditions')
48         proc.save(self.db_conn)
49         with self.assertRaises(HandledException):
50             cond.remove(self.db_conn)
51         proc.set_conditions(self.db_conn, [], 'conditions')
52         proc.save(self.db_conn)
53         cond.remove(self.db_conn)
54         self.assertEqual(Condition.all(self.db_conn), [])
55
56
57 class TestsWithServer(TestCaseWithServer):
58     """Module tests against our HTTP server/handler (and database)."""
59
60     def test_do_POST_condition(self) -> None:
61         """Test POST /condition and its effect on the database."""
62         form_data = {'title': 'foo', 'description': 'foo'}
63         self.check_post(form_data, '/condition', 302, '/condition?id=1')
64         self.assertEqual(1, len(Condition.all(self.db_conn)))
65
66     def test_do_GET(self) -> None:
67         """Test /condition and /conditions response codes."""
68         self.check_get('/condition', 200)
69         self.check_get('/condition?id=', 200)
70         self.check_get('/condition?id=0', 500)
71         self.check_get('/condition?id=FOO', 400)
72         self.check_get('/conditions', 200)