Coverage for ingadhoc-odoo-saas-adhoc / saas_provider_upgrade / tests / test_appointment_upgrade.py: 100%
41 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 18:15 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 18:15 +0000
1# Part of Odoo. See LICENSE file for full copyright and licensing details.
2from datetime import datetime, timedelta
4from odoo.addons.mail.tests.common import mail_new_test_user
5from odoo.tests import users
7from .test_provider_upgrade_base import TestProviderUpgradeCommon
10class AppointmentUpgradeTest(TestProviderUpgradeCommon):
11 @classmethod
12 def _create_appointment_type(cls, **kwargs):
13 default = {
14 "name": "Test Appointment Upgrade",
15 "appointment_duration": 1,
16 "appointment_tz": "Europe/Brussels",
17 "max_schedule_days": 15,
18 "min_cancellation_hours": 1,
19 "min_schedule_hours": 1,
20 # "create_upgrade": True,
21 }
22 return cls.env["appointment.type"].create(dict(default, **kwargs))
24 @classmethod
25 def setUpClass(cls):
26 super(AppointmentUpgradeTest, cls).setUpClass()
27 cls.user_portal = mail_new_test_user(
28 cls.env,
29 login="user_portal",
30 name="Eglantine Portal",
31 email="eglantine.portal@test.example.com",
32 tz="Europe/Brussels",
33 notification_type="inbox",
34 company_id=cls.env.ref("base.main_company").id,
35 groups="base.group_user",
36 )
37 cls.appointment_type_nocreate = cls._create_appointment_type(name="No Create")
38 cls.appointment_type_create = cls._create_appointment_type(name="Create", upgrade_create=True)
39 cls.categ_id = cls.env.ref("calendar.categ_meet1")
40 cls.saas_portal_access_portal_user = cls.env["saas.portal.access"].create(
41 {
42 "analytic_account_id": cls.upgrade_analytic_account.id,
43 "user_id": cls.user_portal.id,
44 "manage_databases": True,
45 "manage_tickets_and_tasks": False,
46 }
47 )
49 def _prepare_event_value(self, appointment_type, user, contact, **kwargs):
50 partner_ids = (user.partner_id | contact).ids
51 default = {
52 "name": "%s with %s" % (appointment_type.name, contact.name),
53 "start": datetime.now(),
54 "start_date": datetime.now(),
55 "stop": datetime.now() + timedelta(hours=1),
56 "allday": False,
57 "duration": appointment_type.appointment_duration,
58 "description": "<p>Test</p>",
59 "location": appointment_type.location,
60 "partner_ids": [(4, pid, False) for pid in partner_ids],
61 "categ_ids": [(4, self.categ_id.id, False)],
62 "appointment_type_id": appointment_type.id,
63 "user_id": user.id,
64 }
65 return dict(default, **kwargs)
67 def _create_meetings_from_appointment_type(
68 self, appointment_type, user, contact, upgrade_ticket_id=False, **kwargs
69 ):
70 return (
71 self.env["calendar.event"]
72 .with_context(upgrade_ticket_id=upgrade_ticket_id)
73 .sudo()
74 .create(self._prepare_event_value(appointment_type, user, contact, **kwargs))
75 )
77 @users("user_portal")
78 def test_create_upgrade(self):
79 """Test the creation of a request based on the creation of an event
80 with appointment type configured to create request
81 """
82 event = self._create_meetings_from_appointment_type(
83 self.appointment_type_create,
84 self.user_portal,
85 self.partner_upgrade_portal,
86 upgrade_ticket_id=self.upgrade_ticket.id,
87 )
89 self.assertEqual(
90 event.res_model_id,
91 self.env["ir.model"]._get("helpdesk.ticket.upgrade.request"),
92 "Event should be linked with the model helpdesk.ticket.upgrade.request",
93 )
94 self.assertTrue(event.res_id)
95 self.assertTrue(event.request_id)
96 request = event.request_id
97 self.assertEqual(self.upgrade_ticket.user_id, event.user_id)
98 self.assertEqual(request.state, "draft")
99 self.assertEqual(request.ticket_id.id, self.upgrade_ticket.id)
101 # Cancelar actualización de producción
102 request.sudo().write({"state": "cancel"})
103 self.assertEqual(request.state, "cancel")
105 def test_no_create_upgrade(self):
106 """Make sure no lead is created for appointment type with create_lead=False"""
107 event = self._create_meetings_from_appointment_type(
108 self.appointment_type_nocreate, self.user_portal, self.partner_upgrade_portal
109 )
110 self.assertFalse(event.request_id)
112 def test_no_type(self):
113 """Make sure no upgrade is created, if the appointment type is empty"""
114 event = self._create_meetings_from_appointment_type(
115 self.env["appointment.type"], self.user_portal, self.partner_upgrade_portal
116 )
117 self.assertFalse(event.request_id)