"""Test Processes module."""
from unittest import TestCase
-from urllib.parse import urlencode
from tests.utils import TestCaseWithDB, TestCaseWithServer
from plomtask.processes import Process
from plomtask.exceptions import NotFoundException, BadFormatException
def test_do_POST_process(self) -> None:
"""Test POST /process and its effect on the database."""
- def post_data_to_expect(form_data: dict[str, object],
- to_: str, expect: int) -> None:
- encoded_form_data = urlencode(form_data).encode('utf-8')
- headers = {'Content-Type': 'application/x-www-form-urlencoded',
- 'Content-Length': str(len(encoded_form_data))}
- self.conn.request('POST', to_,
- body=encoded_form_data, headers=headers)
- self.assertEqual(self.conn.getresponse().status, expect)
form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.0}
- post_data_to_expect(form_data, '/process?id=FOO', 400)
+ self.post_to(form_data, '/process?id=FOO')
+ self.assertEqual(self.conn.getresponse().status, 400)
form_data['effort'] = 'foo'
- post_data_to_expect(form_data, '/process?id=', 400)
+ self.post_to(form_data, '/process?id=')
+ self.assertEqual(self.conn.getresponse().status, 400)
form_data['effort'] = None
- post_data_to_expect(form_data, '/process?id=', 400)
+ self.post_to(form_data, '/process?id=')
+ self.assertEqual(self.conn.getresponse().status, 400)
+ form_data = {}
+ self.post_to(form_data, '/process?id=')
+ self.assertEqual(self.conn.getresponse().status, 400)
+ form_data = {'title': '', 'description': ''}
+ self.post_to(form_data, '/process?id=')
+ self.assertEqual(self.conn.getresponse().status, 400)
+ form_data = {'title': '', 'effort': 1}
+ self.post_to(form_data, '/process?id=')
+ self.assertEqual(self.conn.getresponse().status, 400)
+ form_data = {'description': '', 'effort': 1}
+ self.post_to(form_data, '/process?id=')
+ self.assertEqual(self.conn.getresponse().status, 400)
form_data = {'title': None, 'description': 1, 'effort': 1.0}
- post_data_to_expect(form_data, '/process?id=', 302)
+ self.post_to(form_data, '/process?id=')
+ self.check_redirect('/')
retrieved = Process.by_id(self.db_conn, 1)
self.assertEqual(retrieved.title.newest, 'None')
self.assertEqual([p.id_ for p in Process.all(self.db_conn)],
[retrieved.id_])
+ self.post_to(form_data, '/process?id=1')
+ self.check_redirect('/')
+ self.post_to(form_data, '/process')
+ self.check_redirect('/')
def test_do_GET(self) -> None:
"""Test /process and /processes response codes."""