home · contact · privacy
40d7c486fe7b05f2ed7f447e2cf58cd435546ebb
[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         form_data['delete'] = ''
66         self.check_post(form_data, '/condition?id=', 404)
67         self.check_post(form_data, '/condition?id=2', 404)
68         self.check_post(form_data, '/condition?id=1', 302, '/conditions')
69         self.assertEqual(0, len(Condition.all(self.db_conn)))
70
71     def test_do_GET(self) -> None:
72         """Test /condition and /conditions response codes."""
73         form_data = {'title': 'foo', 'description': 'foo'}
74         self.check_post(form_data, '/condition', 302, '/condition?id=1')
75         self.check_get_defaults('/condition')
76         self.check_get('/conditions', 200)