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).
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
# 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_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)
|