forked from Mapan/odoo17e
68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.tests.common import TransactionCase
|
|
|
|
from freezegun import freeze_time
|
|
|
|
|
|
class HelpdeskSLA(TransactionCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
cls.test_team = cls.env['helpdesk.team'].create(
|
|
{
|
|
'name': 'Test Team SLA',
|
|
'use_sla': True,
|
|
})
|
|
|
|
cls.stage_new, cls.stage_progress = cls.env['helpdesk.stage'].create([{
|
|
'name': 'New',
|
|
'sequence': 10,
|
|
'team_ids': [cls.test_team.id],
|
|
}, {
|
|
'name': 'In Progress',
|
|
'sequence': 20,
|
|
'team_ids': [cls.test_team.id],
|
|
}])
|
|
|
|
cls.sla = cls.env['helpdesk.sla'].create({
|
|
'name': 'SLA',
|
|
'team_id': cls.test_team.id,
|
|
'time': 32,
|
|
'stage_id': cls.stage_progress.id,
|
|
'priority': '1',
|
|
})
|
|
|
|
def create_ticket(self, team, *arg, **kwargs):
|
|
default_values = {
|
|
'name': "Help me",
|
|
'team_id': team.id,
|
|
'stage_id': self.stage_new.id,
|
|
'priority': '1',
|
|
}
|
|
values = dict(default_values, **kwargs)
|
|
return self.env['helpdesk.ticket'].create(values)
|
|
|
|
def test_merge_ticket_sla(self):
|
|
follower_1, follower_2 = self.env['res.partner'].create([
|
|
{'name': 'Follower 1'},
|
|
{'name': 'Follower 2'},
|
|
])
|
|
|
|
with freeze_time('2024-09-03 15:00:00'):
|
|
source_ticket = self.create_ticket(team=self.test_team, sla_ids=self.sla)
|
|
source_ticket.message_subscribe([follower_1.id])
|
|
with freeze_time('2024-09-02 15:00:00'):
|
|
dest_ticket = self.create_ticket(team=self.test_team, sla_ids=self.sla)
|
|
dest_ticket.message_subscribe([follower_1.id, follower_2.id])
|
|
|
|
nearest_deadline = min(source_ticket.sla_status_ids.deadline, dest_ticket.sla_status_ids.deadline)
|
|
self.env['helpdesk.ticket']._merge_method(dest_ticket, source_ticket)
|
|
|
|
self.assertEqual(len(dest_ticket.message_follower_ids), 2, 'Follower 2 should be added')
|
|
self.assertEqual(len(dest_ticket.sla_ids), 1, 'Same SLA policy should not be duplicated')
|
|
self.assertEqual(len(dest_ticket.sla_status_ids), 1, 'Only one SLA should be kept')
|
|
self.assertEqual(dest_ticket.sla_status_ids.deadline, nearest_deadline, 'Only the SLA with the nearest deadline should be kept')
|