Improve mock server: - add support for mocked `fetch` - add support for `active_test` - add support for x2m `in` in domains - add support for default values computed from a function - implement a more natural "next id" compute - allow initial data without ids - ensure write and x2m commands integrity - improve bad data/bad commands error messages - always warn for failing RPC, not only in debug mode - fix all existing tests that had inconsistency data Other changes done in mail (or dependents) that are not just related to tests: - remove `direct_partner` from formatter result ->`correspondent` can be computed from other keys, especially `members` - fix `livechat_visitor` convertData -> only process if there is value - add `current_partner` and `current_user_id` as `init_messaging` result -> easier to mock than session - remove usage of `need_moderation` -> that was just a search indirection to `moderation_status` - adapt `partner_id` -> `res_partner_id` key in `_notification_format` -> to be consistent with field name - add name in result of `mail_partner_format` -> sometimes display_name is not the same - remove usage of `is_moderator` -> that was just an indirection to `moderation_channel_ids` Enterprise counterpart: https://github.com/odoo/enterprise/pull/11523 task-2287171 closes odoo/odoo#55854 X-original-commit: 7ba3fecb3377a720d1eb70e7515a0c45da73836d Related: odoo/enterprise#12391 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
101 lines
4.2 KiB
Python
101 lines
4.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from odoo.addons.base.tests.common import TransactionCaseWithUserDemo
|
|
from odoo.tests.common import tagged, users, warmup
|
|
from odoo.addons.hr_holidays.tests.common import TestHrHolidaysCommon
|
|
|
|
|
|
@tagged('out_of_office')
|
|
class TestOutOfOffice(TestHrHolidaysCommon):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.leave_type = self.env['hr.leave.type'].create({
|
|
'name': 'Legal Leaves',
|
|
'time_type': 'leave',
|
|
'allocation_type': 'no',
|
|
'validity_start': False,
|
|
})
|
|
|
|
def test_leave_ooo(self):
|
|
self.assertNotEqual(self.employee_hruser.user_id.im_status, 'leave_offline', 'user should not be on leave')
|
|
self.assertNotEqual(self.employee_hruser.user_id.partner_id.im_status, 'leave_offline', 'user should not be on leave')
|
|
leave_date_end = (datetime.today() + relativedelta(days=3))
|
|
leave = self.env['hr.leave'].create({
|
|
'name': 'Christmas',
|
|
'employee_id': self.employee_hruser.id,
|
|
'holiday_status_id': self.leave_type.id,
|
|
'date_from': (datetime.today() - relativedelta(days=1)),
|
|
'date_to': leave_date_end,
|
|
'number_of_days': 4,
|
|
})
|
|
leave.action_approve()
|
|
self.assertEqual(self.employee_hruser.user_id.im_status, 'leave_offline', 'user should be out (leave_offline)')
|
|
self.assertEqual(self.employee_hruser.user_id.partner_id.im_status, 'leave_offline', 'user should be out (leave_offline)')
|
|
|
|
partner = self.employee_hruser.user_id.partner_id
|
|
partner2 = self.user_employee.partner_id
|
|
|
|
channel = self.env['mail.channel'].with_user(self.user_employee).with_context({
|
|
'mail_create_nolog': True,
|
|
'mail_create_nosubscribe': True,
|
|
'mail_channel_noautofollow': True,
|
|
}).create({
|
|
'channel_partner_ids': [(4, partner.id), (4, partner2.id)],
|
|
'public': 'private',
|
|
'channel_type': 'chat',
|
|
'email_send': False,
|
|
'name': 'test'
|
|
})
|
|
channel_info = channel.channel_info()[0]
|
|
self.assertFalse(channel_info['members'][0]['out_of_office_date_end'], "current user should not be out of office")
|
|
self.assertEqual(channel_info['members'][1]['out_of_office_date_end'], leave_date_end, "correspondent should be out of office")
|
|
|
|
|
|
@tagged('out_of_office')
|
|
class TestOutOfOfficePerformance(TestHrHolidaysCommon, TransactionCaseWithUserDemo):
|
|
|
|
def setUp(self):
|
|
super(TestOutOfOfficePerformance, self).setUp()
|
|
self.leave_type = self.env['hr.leave.type'].create({
|
|
'name': 'Legal Leaves',
|
|
'time_type': 'leave',
|
|
'allocation_type': 'no',
|
|
'validity_start': False,
|
|
})
|
|
self.leave_date_end = (datetime.today() + relativedelta(days=3))
|
|
self.leave = self.env['hr.leave'].create({
|
|
'name': 'Christmas',
|
|
'employee_id': self.employee_hruser_id,
|
|
'holiday_status_id': self.leave_type.id,
|
|
'date_from': (datetime.today() - relativedelta(days=1)),
|
|
'date_to': (datetime.today() + relativedelta(days=3)),
|
|
'number_of_days': 4,
|
|
})
|
|
|
|
self.hr_user = self.employee_hruser.user_id
|
|
self.hr_partner = self.employee_hruser.user_id.partner_id
|
|
self.employer_partner = self.user_employee.partner_id
|
|
|
|
@users('__system__', 'demo')
|
|
@warmup
|
|
def test_leave_im_status_performance_partner_offline(self):
|
|
with self.assertQueryCount(__system__=2, demo=2):
|
|
self.assertEqual(self.employer_partner.im_status, 'offline')
|
|
|
|
@users('__system__', 'demo')
|
|
@warmup
|
|
def test_leave_im_status_performance_user_leave_offline(self):
|
|
with self.assertQueryCount(__system__=2, demo=2):
|
|
self.assertEqual(self.hr_user.im_status, 'leave_offline')
|
|
|
|
@users('__system__', 'demo')
|
|
@warmup
|
|
def test_leave_im_status_performance_partner_leave_offline(self):
|
|
with self.assertQueryCount(__system__=2, demo=2):
|
|
self.assertEqual(self.hr_partner.im_status, 'leave_offline')
|