# Copyright 2026 Quentin Mondot # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from datetime import timedelta from odoo import fields from odoo.tests.common import TransactionCase class TestHelpdeskTicketDeadline(TransactionCase): """Tests for the helpdesk_ticket_deadline module.""" @classmethod def setUpClass(cls): super().setUpClass() cls.HelpdeskTicket = cls.env["helpdesk.ticket"] def _create_ticket(self, **kwargs): """Create a ticket named "Deadline test ticket" with given values. :param kwargs: extra values passed to ``helpdesk.ticket.create`` :return: the created ``helpdesk.ticket`` record """ vals = {"name": "Deadline test ticket", "description": "test"} vals.update(kwargs) return self.HelpdeskTicket.create(vals) def test_field_exists(self): """date_deadline is a stored Date field on helpdesk.ticket.""" field = self.HelpdeskTicket._fields["date_deadline"] self.assertEqual(field.type, "date") self.assertTrue(field.store) def test_date_is_stored(self): """A deadline set on a ticket is read back unchanged.""" deadline = fields.Date.today() + timedelta(days=3) ticket = self._create_ticket(date_deadline=deadline) self.assertEqual(ticket.date_deadline, deadline) def test_deadline_overdue_past(self): """A deadline strictly before today flags the ticket overdue.""" ticket = self._create_ticket( date_deadline=fields.Date.today() - timedelta(days=1) ) self.assertTrue(ticket.deadline_overdue) def test_deadline_overdue_today(self): """A deadline set to today is not overdue yet.""" ticket = self._create_ticket(date_deadline=fields.Date.today()) self.assertFalse(ticket.deadline_overdue) def test_deadline_overdue_future(self): """A future deadline is not overdue.""" ticket = self._create_ticket( date_deadline=fields.Date.today() + timedelta(days=5) ) self.assertFalse(ticket.deadline_overdue) def test_deadline_overdue_without_deadline(self): """A ticket without a deadline is never overdue.""" ticket = self._create_ticket() self.assertFalse(ticket.deadline_overdue) def test_overdue_search_domain(self): """Searching date_deadline < today returns only overdue tickets.""" overdue = self._create_ticket( date_deadline=fields.Date.today() - timedelta(days=2) ) future = self._create_ticket( date_deadline=fields.Date.today() + timedelta(days=2) ) results = self.HelpdeskTicket.search( [("date_deadline", "<", fields.Date.today())] ) self.assertIn(overdue, results) self.assertNotIn(future, results) def test_deadline_is_tracked(self): """date_deadline is flagged as tracked so changes are logged.""" self.assertTrue(self.HelpdeskTicket._fields["date_deadline"].tracking)