1 """Test Processes module."""
2 from unittest import TestCase
3 from tests.utils import TestCaseWithDB, TestCaseWithServer
4 from plomtask.processes import Process
5 from plomtask.exceptions import NotFoundException, BadFormatException
8 class TestsSansDB(TestCase):
9 """Module tests not requiring DB setup."""
11 def test_Process_versioned_defaults(self) -> None:
12 """Test defaults of Process' VersionedAttributes."""
13 self.assertEqual(Process(None).title.newest, 'UNNAMED')
14 self.assertEqual(Process(None).description.newest, '')
15 self.assertEqual(Process(None).effort.newest, 1.0)
18 class TestsWithDB(TestCaseWithDB):
19 """Mdule tests not requiring DB setup."""
21 def test_Process_save(self) -> None:
22 """Test Process.save()."""
23 p_saved = Process(None)
24 p_saved.save(self.db_conn)
25 self.assertEqual(p_saved.id_,
26 Process.by_id(self.db_conn, 1, create=False).id_)
27 with self.assertRaises(BadFormatException):
30 p_saved.save(self.db_conn)
31 self.assertEqual(p_saved.id_,
32 Process.by_id(self.db_conn, 5, create=False).id_)
33 p_saved.title.set('named')
34 p_loaded = Process.by_id(self.db_conn, p_saved.id_)
35 self.assertNotEqual(p_saved.title.history, p_loaded.title.history)
36 p_saved.save(self.db_conn)
37 p_loaded = Process.by_id(self.db_conn, p_saved.id_)
38 self.assertEqual(p_saved.title.history, p_loaded.title.history)
40 def test_Process_by_id(self) -> None:
41 """Test Process.by_id()."""
42 with self.assertRaises(NotFoundException):
43 Process.by_id(self.db_conn, None, create=False)
44 with self.assertRaises(NotFoundException):
45 Process.by_id(self.db_conn, 0, create=False)
46 with self.assertRaises(NotFoundException):
47 Process.by_id(self.db_conn, 1, create=False)
48 self.assertNotEqual(Process(1).id_,
49 Process.by_id(self.db_conn, None, create=True).id_)
50 self.assertEqual(Process(1).id_,
51 Process.by_id(self.db_conn, 1, create=True).id_)
52 self.assertEqual(Process(2).id_,
53 Process.by_id(self.db_conn, 2, create=True).id_)
55 def test_Process_all(self) -> None:
56 """Test Process.all()."""
58 p_1.save(self.db_conn)
60 p_2.save(self.db_conn)
61 self.assertEqual({p_1.id_, p_2.id_},
62 set(p.id_ for p in Process.all(self.db_conn)))
65 class TestsWithServer(TestCaseWithServer):
66 """Module tests against our HTTP server/handler (and database)."""
68 def test_do_POST_process(self) -> None:
69 """Test POST /process and its effect on the database."""
70 form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.0}
71 self.post_to(form_data, '/process?id=FOO')
72 self.assertEqual(self.conn.getresponse().status, 400)
73 form_data['effort'] = 'foo'
74 self.post_to(form_data, '/process?id=')
75 self.assertEqual(self.conn.getresponse().status, 400)
76 form_data['effort'] = None
77 self.post_to(form_data, '/process?id=')
78 self.assertEqual(self.conn.getresponse().status, 400)
80 self.post_to(form_data, '/process?id=')
81 self.assertEqual(self.conn.getresponse().status, 400)
82 form_data = {'title': '', 'description': ''}
83 self.post_to(form_data, '/process?id=')
84 self.assertEqual(self.conn.getresponse().status, 400)
85 form_data = {'title': '', 'effort': 1}
86 self.post_to(form_data, '/process?id=')
87 self.assertEqual(self.conn.getresponse().status, 400)
88 form_data = {'description': '', 'effort': 1}
89 self.post_to(form_data, '/process?id=')
90 self.assertEqual(self.conn.getresponse().status, 400)
91 form_data = {'title': None, 'description': 1, 'effort': 1.0}
92 self.post_to(form_data, '/process?id=')
93 self.check_redirect('/')
94 retrieved = Process.by_id(self.db_conn, 1)
95 self.assertEqual(retrieved.title.newest, 'None')
96 self.assertEqual([p.id_ for p in Process.all(self.db_conn)],
98 self.post_to(form_data, '/process?id=1')
99 self.check_redirect('/')
100 self.post_to(form_data, '/process')
101 self.check_redirect('/')
103 def test_do_GET(self) -> None:
104 """Test /process and /processes response codes."""
105 self.conn.request('GET', '/process')
106 self.assertEqual(self.conn.getresponse().status, 200)
107 self.conn.request('GET', '/process?id=')
108 self.assertEqual(self.conn.getresponse().status, 200)
109 self.conn.request('GET', '/process?id=0')
110 self.assertEqual(self.conn.getresponse().status, 400)
111 self.conn.request('GET', '/process?id=FOO')
112 self.assertEqual(self.conn.getresponse().status, 400)
113 self.conn.request('GET', '/processes')
114 self.assertEqual(self.conn.getresponse().status, 200)