+"""Test Todos module."""
+from tests.utils import TestCaseWithDB, TestCaseWithServer
+from plomtask.todos import Todo
+from plomtask.days import Day
+from plomtask.processes import Process
+from plomtask.exceptions import NotFoundException
+
+
+class TestsWithDB(TestCaseWithDB):
+ """Tests not requiring DB setup."""
+
+ def test_Todo_by_date(self) -> None:
+ """Test creation and findability of Todos."""
+ day1 = Day('2024-01-01')
+ day2 = Day('2024-01-02')
+ process1 = Process(None)
+ todo1 = Todo(None, process1, False, day1)
+ with self.assertRaises(NotFoundException):
+ todo1.save(self.db_conn)
+ process1.save_without_steps(self.db_conn)
+ todo1.save(self.db_conn)
+ todo2 = Todo(None, process1, False, day1)
+ todo2.save(self.db_conn)
+ with self.assertRaises(NotFoundException):
+ Todo.by_date(self.db_conn, day1.date),
+ day1.save(self.db_conn)
+ day2.save(self.db_conn)
+ self.assertEqual(Todo.by_date(self.db_conn, day1.date), [todo1, todo2])
+ self.assertEqual(Todo.by_date(self.db_conn, day2.date), [])
+ self.assertEqual(Todo.by_date(self.db_conn, 'foo'), [])
+
+
+class TestsWithServer(TestCaseWithServer):
+ """Tests against our HTTP server/handler (and database)."""
+
+ def test_do_POST_todo(self) -> None:
+ """Test Todo posting of POST /day."""
+ form_data = {'title': '', 'description': '', 'effort': 1}
+ self.check_post(form_data, '/process?id=', 302, '/')
+ self.check_post(form_data, '/process?id=', 302, '/')
+ process1 = Process.by_id(self.db_conn, 1)
+ process2 = Process.by_id(self.db_conn, 2)
+ form_data = {'comment': ''}
+ self.check_post(form_data, '/day?date=2024-01-01', 302, '/')
+ self.assertEqual(Todo.by_date(self.db_conn, '2024-01-01'), [])
+ form_data['new_todo'] = str(process1.id_)
+ self.check_post(form_data, '/day?date=2024-01-01', 302, '/')
+ todos = Todo.by_date(self.db_conn, '2024-01-01')
+ self.assertEqual(1, len(todos))
+ todo1 = todos[0]
+ self.assertEqual(todo1.id_, 1)
+ self.assertEqual(todo1.process.id_, process1.id_)
+ self.assertEqual(todo1.is_done, False)
+ form_data['new_todo'] = str(process2.id_)
+ self.check_post(form_data, '/day?date=2024-01-01', 302, '/')
+ todos = Todo.by_date(self.db_conn, '2024-01-01')
+ todo1 = todos[1]
+ self.assertEqual(todo1.id_, 2)
+ self.assertEqual(todo1.process.id_, process2.id_)
+ self.assertEqual(todo1.is_done, False)