[ADD] helpdesk_ticket_deadline: add a manual deadline on tickets
This module adds a simple, manually filled ``date_deadline`` Date field, tracked in the chatter, with an overdue flag, a red kanban decoration and search filters (overdue, due today, group by deadline).
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user