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
8 class TestsWithDB(TestCaseWithDB):
9 """Tests requiring DB, but not server setup."""
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)
21 def test_Condition_all(self) -> None:
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,
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)
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)
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), [])
57 class TestsWithServer(TestCaseWithServer):
58 """Module tests against our HTTP server/handler (and database)."""
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)))
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)