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

1# Part of Odoo. See LICENSE file for full copyright and licensing details. 

2from datetime import datetime, timedelta 

3 

4from odoo.addons.mail.tests.common import mail_new_test_user 

5from odoo.tests import users 

6 

7from .test_provider_upgrade_base import TestProviderUpgradeCommon 

8 

9 

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)) 

23 

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 ) 

48 

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) 

66 

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 ) 

76 

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 ) 

88 

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) 

100 

101 # Cancelar actualización de producción 

102 request.sudo().write({"state": "cancel"}) 

103 self.assertEqual(request.state, "cancel") 

104 

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) 

111 

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)