[IMP] hr_*: Improve tests execution speed by using setUpClass
closes odoo/odoo#79063 Taskid: 2669222 Related: odoo/enterprise#21920 Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
committed by
Yannick Tivisse
parent
30c53a4370
commit
ecddd5f729
@@ -7,7 +7,8 @@ from odoo.tests import common
|
||||
|
||||
class TestHrCommon(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrCommon, self).setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestHrCommon, cls).setUpClass()
|
||||
|
||||
self.res_users_hr_officer = mail_new_test_user(self.env, login='hro', groups='base.group_user,hr.group_hr_user', name='HR Officer', email='hro@example.com')
|
||||
cls.res_users_hr_officer = mail_new_test_user(cls.env, login='hro', groups='base.group_user,hr.group_hr_user', name='HR Officer', email='hro@example.com')
|
||||
|
||||
@@ -6,15 +6,16 @@ from odoo.addons.hr.tests.common import TestHrCommon
|
||||
|
||||
class TestChannel(TestHrCommon):
|
||||
|
||||
def setUp(self):
|
||||
super(TestChannel, self).setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestChannel, cls).setUpClass()
|
||||
|
||||
self.channel = self.env['mail.channel'].create({'name': 'Test'})
|
||||
cls.channel = cls.env['mail.channel'].create({'name': 'Test'})
|
||||
|
||||
emp0 = self.env['hr.employee'].create({
|
||||
'user_id': self.res_users_hr_officer.id,
|
||||
emp0 = cls.env['hr.employee'].create({
|
||||
'user_id': cls.res_users_hr_officer.id,
|
||||
})
|
||||
self.department = self.env['hr.department'].create({
|
||||
cls.department = cls.env['hr.department'].create({
|
||||
'name': 'Test Department',
|
||||
'member_ids': [(4, emp0.id)],
|
||||
})
|
||||
|
||||
@@ -6,21 +6,22 @@ from odoo.addons.hr.tests.common import TestHrCommon
|
||||
|
||||
class TestHrFlow(TestHrCommon):
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrFlow, self).setUp()
|
||||
self.dep_rd = self.env['hr.department'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestHrFlow, cls).setUpClass()
|
||||
cls.dep_rd = cls.env['hr.department'].create({
|
||||
'name': 'Research & Development',
|
||||
})
|
||||
self.job_developer = self.env['hr.job'].create({
|
||||
cls.job_developer = cls.env['hr.job'].create({
|
||||
'name': 'Experienced Developer',
|
||||
'department_id': self.dep_rd.id,
|
||||
'department_id': cls.dep_rd.id,
|
||||
'no_of_recruitment': 5,
|
||||
})
|
||||
self.employee_niv = self.env['hr.employee'].create({
|
||||
cls.employee_niv = cls.env['hr.employee'].create({
|
||||
'name': 'Sharlene Rhodes',
|
||||
})
|
||||
self.job_developer = self.job_developer.with_user(self.res_users_hr_officer.id)
|
||||
self.employee_niv = self.employee_niv.with_user(self.res_users_hr_officer.id)
|
||||
cls.job_developer = cls.job_developer.with_user(cls.res_users_hr_officer.id)
|
||||
cls.employee_niv = cls.employee_niv.with_user(cls.res_users_hr_officer.id)
|
||||
|
||||
def test_open2recruit2close_job(self):
|
||||
|
||||
|
||||
@@ -8,23 +8,24 @@ from odoo.addons.base.models.qweb import QWebException
|
||||
|
||||
class TestMultiCompany(TestHrCommon):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.company_1 = self.env['res.company'].create({'name': 'Opoo'})
|
||||
self.company_2 = self.env['res.company'].create({'name': 'Otoo'})
|
||||
self.employees = self.env['hr.employee'].create([
|
||||
{'name': 'Bidule', 'company_id': self.company_1.id},
|
||||
{'name': 'Machin', 'company_id': self.company_2.id},
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.company_1 = cls.env['res.company'].create({'name': 'Opoo'})
|
||||
cls.company_2 = cls.env['res.company'].create({'name': 'Otoo'})
|
||||
cls.employees = cls.env['hr.employee'].create([
|
||||
{'name': 'Bidule', 'company_id': cls.company_1.id},
|
||||
{'name': 'Machin', 'company_id': cls.company_2.id},
|
||||
])
|
||||
self.res_users_hr_officer.company_ids = [
|
||||
(4, self.company_1.id),
|
||||
(4, self.company_2.id),
|
||||
cls.res_users_hr_officer.company_ids = [
|
||||
(4, cls.company_1.id),
|
||||
(4, cls.company_2.id),
|
||||
]
|
||||
self.res_users_hr_officer.company_id = self.company_1.id
|
||||
cls.res_users_hr_officer.company_id = cls.company_1.id
|
||||
# flush and invalidate the cache, otherwise a full cache may prevent
|
||||
# access rights to be checked
|
||||
self.employees.flush()
|
||||
self.employees.invalidate_cache()
|
||||
cls.employees.flush()
|
||||
cls.employees.invalidate_cache()
|
||||
|
||||
def test_multi_company_report(self):
|
||||
content, content_type = self.env.ref('hr.hr_employee_print_badge').with_user(self.res_users_hr_officer).with_context(
|
||||
|
||||
@@ -78,28 +78,29 @@ class TestSelfAccessProfile(TestHrCommon):
|
||||
|
||||
class TestSelfAccessRights(TestHrCommon):
|
||||
|
||||
def setUp(self):
|
||||
super(TestSelfAccessRights, self).setUp()
|
||||
self.richard = new_test_user(self.env, login='ric', groups='base.group_user', name='Simple employee', email='ric@example.com')
|
||||
self.richard_emp = self.env['hr.employee'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestSelfAccessRights, cls).setUpClass()
|
||||
cls.richard = new_test_user(cls.env, login='ric', groups='base.group_user', name='Simple employee', email='ric@example.com')
|
||||
cls.richard_emp = cls.env['hr.employee'].create({
|
||||
'name': 'Richard',
|
||||
'user_id': self.richard.id,
|
||||
'address_home_id': self.env['res.partner'].create({'name': 'Richard', 'phone': '21454', 'type': 'private'}).id,
|
||||
'user_id': cls.richard.id,
|
||||
'address_home_id': cls.env['res.partner'].create({'name': 'Richard', 'phone': '21454', 'type': 'private'}).id,
|
||||
})
|
||||
self.hubert = new_test_user(self.env, login='hub', groups='base.group_user', name='Simple employee', email='hub@example.com')
|
||||
self.hubert_emp = self.env['hr.employee'].create({
|
||||
cls.hubert = new_test_user(cls.env, login='hub', groups='base.group_user', name='Simple employee', email='hub@example.com')
|
||||
cls.hubert_emp = cls.env['hr.employee'].create({
|
||||
'name': 'Hubert',
|
||||
'user_id': self.hubert.id,
|
||||
'address_home_id': self.env['res.partner'].create({'name': 'Hubert', 'type': 'private'}).id,
|
||||
'user_id': cls.hubert.id,
|
||||
'address_home_id': cls.env['res.partner'].create({'name': 'Hubert', 'type': 'private'}).id,
|
||||
})
|
||||
|
||||
self.protected_fields_emp = OrderedDict([(k, v) for k, v in self.env['hr.employee']._fields.items() if v.groups == 'hr.group_hr_user'])
|
||||
cls.protected_fields_emp = OrderedDict([(k, v) for k, v in cls.env['hr.employee']._fields.items() if v.groups == 'hr.group_hr_user'])
|
||||
# Compute fields and id field are always readable by everyone
|
||||
self.read_protected_fields_emp = OrderedDict([(k, v) for k, v in self.env['hr.employee']._fields.items() if not v.compute and k != 'id'])
|
||||
self.self_protected_fields_user = OrderedDict([
|
||||
cls.read_protected_fields_emp = OrderedDict([(k, v) for k, v in cls.env['hr.employee']._fields.items() if not v.compute and k != 'id'])
|
||||
cls.self_protected_fields_user = OrderedDict([
|
||||
(k, v)
|
||||
for k, v in self.env['res.users']._fields.items()
|
||||
if v.groups == 'hr.group_hr_user' and k in self.env['res.users'].SELF_READABLE_FIELDS
|
||||
for k, v in cls.env['res.users']._fields.items()
|
||||
if v.groups == 'hr.group_hr_user' and k in cls.env['res.users'].SELF_READABLE_FIELDS
|
||||
])
|
||||
|
||||
# Read hr.employee #
|
||||
|
||||
@@ -2,19 +2,21 @@
|
||||
|
||||
import time
|
||||
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.tests.common import tagged, TransactionCase
|
||||
|
||||
|
||||
@tagged('jesaispas')
|
||||
class TestHrAttendance(TransactionCase):
|
||||
"""Tests for attendance date ranges validity"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrAttendance, self).setUp()
|
||||
self.attendance = self.env['hr.attendance']
|
||||
self.test_employee = self.env['hr.employee'].create({'name': "Jacky"})
|
||||
# demo data contains set up for self.test_employee
|
||||
self.open_attendance = self.attendance.create({
|
||||
'employee_id': self.test_employee.id,
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestHrAttendance, cls).setUpClass()
|
||||
cls.attendance = cls.env['hr.attendance']
|
||||
cls.test_employee = cls.env['hr.employee'].create({'name': "Jacky"})
|
||||
# demo data contains set up for cls.test_employee
|
||||
cls.open_attendance = cls.attendance.create({
|
||||
'employee_id': cls.test_employee.id,
|
||||
'check_in': time.strftime('%Y-%m-10 10:00'),
|
||||
})
|
||||
|
||||
|
||||
@@ -6,26 +6,33 @@ from unittest.mock import patch
|
||||
|
||||
from odoo import fields
|
||||
from odoo.tests import new_test_user
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.tests.common import tagged, TransactionCase
|
||||
|
||||
|
||||
@tagged('attendance_process')
|
||||
class TestHrAttendance(TransactionCase):
|
||||
"""Test for presence validity"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrAttendance, self).setUp()
|
||||
self.user = new_test_user(self.env, login='fru', groups='base.group_user,hr_attendance.group_hr_attendance_use_pin')
|
||||
self.user_no_pin = new_test_user(self.env, login='gru', groups='base.group_user')
|
||||
self.test_employee = self.env['hr.employee'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestHrAttendance, cls).setUpClass()
|
||||
cls.user = new_test_user(cls.env, login='fru', groups='base.group_user,hr_attendance.group_hr_attendance_use_pin')
|
||||
cls.user_no_pin = new_test_user(cls.env, login='gru', groups='base.group_user')
|
||||
cls.test_employee = cls.env['hr.employee'].create({
|
||||
'name': "François Russie",
|
||||
'user_id': self.user.id,
|
||||
'user_id': cls.user.id,
|
||||
'pin': '1234',
|
||||
})
|
||||
self.employee_kiosk = self.env['hr.employee'].create({
|
||||
cls.employee_kiosk = cls.env['hr.employee'].create({
|
||||
'name': "Machiavel",
|
||||
'pin': '5678',
|
||||
})
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
# Cache error if not done during setup
|
||||
(self.test_employee | self.employee_kiosk).last_attendance_id.unlink()
|
||||
|
||||
def test_employee_state(self):
|
||||
# Make sure the attendance of the employee will display correctly
|
||||
assert self.test_employee.attendance_state == 'checked_out'
|
||||
|
||||
@@ -7,50 +7,51 @@ from odoo.tests import common
|
||||
|
||||
class TestHrHolidaysCommon(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrHolidaysCommon, self).setUp()
|
||||
self.env.user.tz = 'Europe/Brussels'
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestHrHolidaysCommon, cls).setUpClass()
|
||||
cls.env.user.tz = 'Europe/Brussels'
|
||||
|
||||
# Test users to use through the various tests
|
||||
self.user_hruser = mail_new_test_user(self.env, login='armande', groups='base.group_user,hr_holidays.group_hr_holidays_user')
|
||||
self.user_hruser_id = self.user_hruser.id
|
||||
cls.user_hruser = mail_new_test_user(cls.env, login='armande', groups='base.group_user,hr_holidays.group_hr_holidays_user')
|
||||
cls.user_hruser_id = cls.user_hruser.id
|
||||
|
||||
self.user_hrmanager = mail_new_test_user(self.env, login='bastien', groups='base.group_user,hr_holidays.group_hr_holidays_manager')
|
||||
self.user_hrmanager_id = self.user_hrmanager.id
|
||||
cls.user_hrmanager = mail_new_test_user(cls.env, login='bastien', groups='base.group_user,hr_holidays.group_hr_holidays_manager')
|
||||
cls.user_hrmanager_id = cls.user_hrmanager.id
|
||||
|
||||
self.user_employee = mail_new_test_user(self.env, login='david', groups='base.group_user')
|
||||
self.user_employee_id = self.user_employee.id
|
||||
cls.user_employee = mail_new_test_user(cls.env, login='david', groups='base.group_user')
|
||||
cls.user_employee_id = cls.user_employee.id
|
||||
|
||||
# Hr Data
|
||||
Department = self.env['hr.department'].with_context(tracking_disable=True)
|
||||
Department = cls.env['hr.department'].with_context(tracking_disable=True)
|
||||
|
||||
self.hr_dept = Department.create({
|
||||
cls.hr_dept = Department.create({
|
||||
'name': 'Human Resources',
|
||||
})
|
||||
self.rd_dept = Department.create({
|
||||
cls.rd_dept = Department.create({
|
||||
'name': 'Research and devlopment',
|
||||
})
|
||||
|
||||
self.employee_emp = self.env['hr.employee'].create({
|
||||
cls.employee_emp = cls.env['hr.employee'].create({
|
||||
'name': 'David Employee',
|
||||
'user_id': self.user_employee_id,
|
||||
'department_id': self.rd_dept.id,
|
||||
'user_id': cls.user_employee_id,
|
||||
'department_id': cls.rd_dept.id,
|
||||
})
|
||||
self.employee_emp_id = self.employee_emp.id
|
||||
cls.employee_emp_id = cls.employee_emp.id
|
||||
|
||||
self.employee_hruser = self.env['hr.employee'].create({
|
||||
cls.employee_hruser = cls.env['hr.employee'].create({
|
||||
'name': 'Armande HrUser',
|
||||
'user_id': self.user_hruser_id,
|
||||
'department_id': self.rd_dept.id,
|
||||
'user_id': cls.user_hruser_id,
|
||||
'department_id': cls.rd_dept.id,
|
||||
})
|
||||
self.employee_hruser_id = self.employee_hruser.id
|
||||
cls.employee_hruser_id = cls.employee_hruser.id
|
||||
|
||||
self.employee_hrmanager = self.env['hr.employee'].create({
|
||||
cls.employee_hrmanager = cls.env['hr.employee'].create({
|
||||
'name': 'Bastien HrManager',
|
||||
'user_id': self.user_hrmanager_id,
|
||||
'department_id': self.hr_dept.id,
|
||||
'parent_id': self.employee_hruser_id,
|
||||
'user_id': cls.user_hrmanager_id,
|
||||
'department_id': cls.hr_dept.id,
|
||||
'parent_id': cls.employee_hruser_id,
|
||||
})
|
||||
self.employee_hrmanager_id = self.employee_hrmanager.id
|
||||
cls.employee_hrmanager_id = cls.employee_hrmanager.id
|
||||
|
||||
self.rd_dept.write({'manager_id': self.employee_hruser_id})
|
||||
cls.rd_dept.write({'manager_id': cls.employee_hruser_id})
|
||||
|
||||
@@ -12,61 +12,62 @@ from odoo.tools import mute_logger
|
||||
|
||||
@tests.tagged('access_rights', 'post_install', '-at_install')
|
||||
class TestHrHolidaysAccessRightsCommon(TestHrHolidaysCommon):
|
||||
def setUp(self):
|
||||
super(TestHrHolidaysAccessRightsCommon, self).setUp()
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestHrHolidaysAccessRightsCommon, cls).setUpClass()
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Unlimited',
|
||||
'leave_validation_type': 'hr',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
self.rd_dept.manager_id = False
|
||||
self.hr_dept.manager_id = False
|
||||
self.employee_emp.parent_id = False
|
||||
self.employee_leave = self.env['hr.leave'].with_user(self.user_employee_id).create({
|
||||
cls.rd_dept.manager_id = False
|
||||
cls.hr_dept.manager_id = False
|
||||
cls.employee_emp.parent_id = False
|
||||
cls.employee_leave = cls.env['hr.leave'].with_user(cls.user_employee_id).create({
|
||||
'name': 'Test',
|
||||
'holiday_status_id': self.leave_type.id,
|
||||
'department_id': self.employee_emp.department_id.id,
|
||||
'employee_id': self.employee_emp.id,
|
||||
'holiday_status_id': cls.leave_type.id,
|
||||
'department_id': cls.employee_emp.department_id.id,
|
||||
'employee_id': cls.employee_emp.id,
|
||||
'date_from': datetime.now(),
|
||||
'date_to': datetime.now() + relativedelta(days=1),
|
||||
'number_of_days': 1,
|
||||
})
|
||||
|
||||
self.lt_no_validation = self.env['hr.leave.type'].create({
|
||||
cls.lt_no_validation = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = no_validation',
|
||||
'leave_validation_type': 'hr',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
|
||||
self.lt_validation_hr = self.env['hr.leave.type'].create({
|
||||
cls.lt_validation_hr = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = HR',
|
||||
'leave_validation_type': 'hr',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
|
||||
self.lt_validation_manager = self.env['hr.leave.type'].create({
|
||||
cls.lt_validation_manager = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = manager',
|
||||
'leave_validation_type': 'hr',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
|
||||
self.lt_validation_both = self.env['hr.leave.type'].create({
|
||||
cls.lt_validation_both = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = both',
|
||||
'leave_validation_type': 'hr',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
|
||||
self.draft_status = [
|
||||
self.lt_validation_hr,
|
||||
self.lt_validation_manager,
|
||||
self.lt_validation_both
|
||||
cls.draft_status = [
|
||||
cls.lt_validation_hr,
|
||||
cls.lt_validation_manager,
|
||||
cls.lt_validation_both
|
||||
]
|
||||
|
||||
self.confirm_status = [
|
||||
self.lt_no_validation,
|
||||
self.lt_validation_hr,
|
||||
self.lt_validation_manager,
|
||||
self.lt_validation_both
|
||||
cls.confirm_status = [
|
||||
cls.lt_no_validation,
|
||||
cls.lt_validation_hr,
|
||||
cls.lt_validation_manager,
|
||||
cls.lt_validation_both
|
||||
]
|
||||
|
||||
def request_leave(self, user_id, date_from, number_of_days, values=None):
|
||||
@@ -765,25 +766,26 @@ class TestAccessRightsUnlink(TestHrHolidaysAccessRightsCommon):
|
||||
|
||||
class TestMultiCompany(TestHrHolidaysCommon):
|
||||
|
||||
def setUp(self):
|
||||
super(TestMultiCompany, self).setUp()
|
||||
self.new_company = self.env['res.company'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestMultiCompany, cls).setUpClass()
|
||||
cls.new_company = cls.env['res.company'].create({
|
||||
'name': 'Crocodile Dundee Company',
|
||||
})
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Unlimited - Company New',
|
||||
'company_id': self.new_company.id,
|
||||
'company_id': cls.new_company.id,
|
||||
'leave_validation_type': 'hr',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
self.rd_dept.manager_id = False
|
||||
self.hr_dept.manager_id = False
|
||||
cls.rd_dept.manager_id = False
|
||||
cls.hr_dept.manager_id = False
|
||||
|
||||
self.employee_leave = self.env['hr.leave'].create({
|
||||
cls.employee_leave = cls.env['hr.leave'].create({
|
||||
'name': 'Test',
|
||||
'holiday_status_id': self.leave_type.id,
|
||||
'department_id': self.employee_emp.department_id.id,
|
||||
'employee_id': self.employee_emp.id,
|
||||
'holiday_status_id': cls.leave_type.id,
|
||||
'department_id': cls.employee_emp.department_id.id,
|
||||
'employee_id': cls.employee_emp.id,
|
||||
'date_from': datetime.now(),
|
||||
'date_to': datetime.now() + relativedelta(days=1),
|
||||
'number_of_days': 1,
|
||||
|
||||
@@ -12,9 +12,10 @@ from odoo.addons.hr_holidays.tests.common import TestHrHolidaysCommon
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestAccrualAllocations(TestHrHolidaysCommon):
|
||||
def setUp(self):
|
||||
super(TestAccrualAllocations, self).setUp()
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestAccrualAllocations, cls).setUpClass()
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Paid Time Off',
|
||||
'time_type': 'leave',
|
||||
'requires_allocation': 'yes',
|
||||
|
||||
@@ -10,28 +10,29 @@ import time
|
||||
@tests.tagged('access_rights', 'post_install', '-at_install')
|
||||
class TestAllocationRights(TestHrHolidaysCommon):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.rd_dept.manager_id = False
|
||||
self.hr_dept.manager_id = False
|
||||
self.employee_emp.parent_id = False
|
||||
self.employee_emp.leave_manager_id = False
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.rd_dept.manager_id = False
|
||||
cls.hr_dept.manager_id = False
|
||||
cls.employee_emp.parent_id = False
|
||||
cls.employee_emp.leave_manager_id = False
|
||||
|
||||
self.lt_no_validation = self.env['hr.leave.type'].create({
|
||||
cls.lt_no_validation = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = HR',
|
||||
'allocation_validation_type': 'officer',
|
||||
'requires_allocation': 'no',
|
||||
'employee_requests': 'yes',
|
||||
})
|
||||
|
||||
self.lt_validation_manager = self.env['hr.leave.type'].create({
|
||||
cls.lt_validation_manager = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = manager',
|
||||
'allocation_validation_type': 'officer',
|
||||
'requires_allocation': 'yes',
|
||||
'employee_requests': 'yes',
|
||||
})
|
||||
|
||||
self.lt_allocation_manager = self.env['hr.leave.type'].create({
|
||||
cls.lt_allocation_manager = cls.env['hr.leave.type'].create({
|
||||
'name': 'Validation = manager',
|
||||
'allocation_validation_type': 'set',
|
||||
'requires_allocation': 'yes',
|
||||
@@ -85,11 +86,12 @@ class TestAccessRightsSimpleUser(TestAllocationRights):
|
||||
|
||||
class TestAccessRightsEmployeeManager(TestAllocationRights):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.managed_employee = self.env['hr.employee'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.managed_employee = cls.env['hr.employee'].create({
|
||||
'name': 'Jolly Jumper',
|
||||
'leave_manager_id': self.user_employee.id,
|
||||
'leave_manager_id': cls.user_employee.id,
|
||||
})
|
||||
|
||||
def test_manager_request_allocation_other(self):
|
||||
|
||||
@@ -8,10 +8,11 @@ from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class TestAutomaticLeaveDates(TestHrHolidaysCommon):
|
||||
def setUp(self):
|
||||
super(TestAutomaticLeaveDates, self).setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestAutomaticLeaveDates, cls).setUpClass()
|
||||
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Automatic Test',
|
||||
'time_type': 'leave',
|
||||
'requires_allocation': 'no',
|
||||
|
||||
@@ -27,43 +27,45 @@ class TestLeaveRequests(TestHrHolidaysCommon):
|
||||
self.assertEqual(holiday_status.virtual_remaining_leaves, vrl,
|
||||
'hr_holidays: wrong type days computation')
|
||||
|
||||
def setUp(self):
|
||||
super(TestLeaveRequests, self).setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestLeaveRequests, cls).setUpClass()
|
||||
|
||||
# Make sure we have the rights to create, validate and delete the leaves, leave types and allocations
|
||||
LeaveType = self.env['hr.leave.type'].with_user(self.user_hrmanager_id).with_context(tracking_disable=True)
|
||||
LeaveType = cls.env['hr.leave.type'].with_user(cls.user_hrmanager_id).with_context(tracking_disable=True)
|
||||
|
||||
self.holidays_type_1 = LeaveType.create({
|
||||
cls.holidays_type_1 = LeaveType.create({
|
||||
'name': 'NotLimitedHR',
|
||||
'requires_allocation': 'no',
|
||||
'leave_validation_type': 'hr',
|
||||
})
|
||||
self.holidays_type_2 = LeaveType.create({
|
||||
cls.holidays_type_2 = LeaveType.create({
|
||||
'name': 'Limited',
|
||||
'requires_allocation': 'yes',
|
||||
'employee_requests': 'yes',
|
||||
'leave_validation_type': 'hr',
|
||||
})
|
||||
self.holidays_type_3 = LeaveType.create({
|
||||
cls.holidays_type_3 = LeaveType.create({
|
||||
'name': 'TimeNotLimited',
|
||||
'requires_allocation': 'no',
|
||||
'leave_validation_type': 'manager',
|
||||
})
|
||||
|
||||
self.set_employee_create_date(self.employee_emp_id, '2010-02-03 00:00:00')
|
||||
self.set_employee_create_date(self.employee_hruser_id, '2010-02-03 00:00:00')
|
||||
cls.set_employee_create_date(cls.employee_emp_id, '2010-02-03 00:00:00')
|
||||
cls.set_employee_create_date(cls.employee_hruser_id, '2010-02-03 00:00:00')
|
||||
|
||||
def set_employee_create_date(self, id, newdate):
|
||||
@classmethod
|
||||
def set_employee_create_date(cls, _id, newdate):
|
||||
""" This method is a hack in order to be able to define/redefine the create_date
|
||||
of the employees.
|
||||
This is done in SQL because ORM does not allow to write onto the create_date field.
|
||||
"""
|
||||
self.env.cr.execute("""
|
||||
cls.env.cr.execute("""
|
||||
UPDATE
|
||||
hr_employee
|
||||
SET create_date = '%s'
|
||||
WHERE id = %s
|
||||
""" % (newdate, id))
|
||||
""" % (newdate, _id))
|
||||
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
|
||||
def test_overlapping_requests(self):
|
||||
|
||||
@@ -13,9 +13,10 @@ 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({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Legal Leaves',
|
||||
'time_type': 'leave',
|
||||
'requires_allocation': 'no',
|
||||
@@ -60,26 +61,27 @@ class TestOutOfOffice(TestHrHolidaysCommon):
|
||||
@tagged('out_of_office')
|
||||
class TestOutOfOfficePerformance(TestHrHolidaysCommon, TransactionCaseWithUserDemo):
|
||||
|
||||
def setUp(self):
|
||||
super(TestOutOfOfficePerformance, self).setUp()
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestOutOfOfficePerformance, cls).setUpClass()
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Legal Leaves',
|
||||
'time_type': 'leave',
|
||||
'requires_allocation': 'no',
|
||||
})
|
||||
self.leave_date_end = (datetime.today() + relativedelta(days=3))
|
||||
self.leave = self.env['hr.leave'].create({
|
||||
cls.leave_date_end = (datetime.today() + relativedelta(days=3))
|
||||
cls.leave = cls.env['hr.leave'].create({
|
||||
'name': 'Christmas',
|
||||
'employee_id': self.employee_hruser_id,
|
||||
'holiday_status_id': self.leave_type.id,
|
||||
'employee_id': cls.employee_hruser_id,
|
||||
'holiday_status_id': cls.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
|
||||
cls.hr_user = cls.employee_hruser.user_id
|
||||
cls.hr_partner = cls.employee_hruser.user_id.partner_id
|
||||
cls.employer_partner = cls.user_employee.partner_id
|
||||
|
||||
@users('__system__', 'demo')
|
||||
@warmup
|
||||
|
||||
@@ -12,43 +12,44 @@ from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestPartner(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
# use a single value for today throughout the tests to avoid weird scenarios around midnight
|
||||
self.today = date.today()
|
||||
baseUser = self.env['res.users'].create({
|
||||
cls.today = date.today()
|
||||
baseUser = cls.env['res.users'].create({
|
||||
'email': 'e.e@example.com',
|
||||
'groups_id': [Command.link(self.env.ref('base.group_user').id)],
|
||||
'groups_id': [Command.link(cls.env.ref('base.group_user').id)],
|
||||
'login': 'emp',
|
||||
'name': 'Ernest Employee',
|
||||
'notification_type': 'inbox',
|
||||
'signature': '--\nErnest',
|
||||
})
|
||||
self.partner = baseUser.partner_id
|
||||
self.users = baseUser + self.env['res.users'].create({
|
||||
cls.partner = baseUser.partner_id
|
||||
cls.users = baseUser + cls.env['res.users'].create({
|
||||
'name': 'test1',
|
||||
'login': 'test1',
|
||||
'email': 'test1@example.com',
|
||||
'partner_id': self.partner.id,
|
||||
'partner_id': cls.partner.id,
|
||||
})
|
||||
self.employees = self.env['hr.employee'].create([{
|
||||
cls.employees = cls.env['hr.employee'].create([{
|
||||
'user_id': user.id,
|
||||
} for user in self.users])
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
} for user in cls.users])
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'requires_allocation': 'no',
|
||||
'name': 'Legal Leaves',
|
||||
'time_type': 'leave',
|
||||
})
|
||||
self.leaves = self.env['hr.leave'].create([{
|
||||
'date_from': self.today + relativedelta(days=-2),
|
||||
'date_to': self.today + relativedelta(days=2),
|
||||
'employee_id': self.employees[0].id,
|
||||
'holiday_status_id': self.leave_type.id,
|
||||
cls.leaves = cls.env['hr.leave'].create([{
|
||||
'date_from': cls.today + relativedelta(days=-2),
|
||||
'date_to': cls.today + relativedelta(days=2),
|
||||
'employee_id': cls.employees[0].id,
|
||||
'holiday_status_id': cls.leave_type.id,
|
||||
}, {
|
||||
'date_from': self.today + relativedelta(days=-2),
|
||||
'date_to': self.today + relativedelta(days=3),
|
||||
'employee_id': self.employees[1].id,
|
||||
'holiday_status_id': self.leave_type.id,
|
||||
'date_from': cls.today + relativedelta(days=-2),
|
||||
'date_to': cls.today + relativedelta(days=3),
|
||||
'employee_id': cls.employees[1].id,
|
||||
'holiday_status_id': cls.leave_type.id,
|
||||
}])
|
||||
|
||||
def test_res_partner_mail_partner_format(self):
|
||||
|
||||
@@ -7,80 +7,81 @@ from odoo.exceptions import AccessError, UserError
|
||||
|
||||
class TestCommonTimesheet(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestCommonTimesheet, self).setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestCommonTimesheet, cls).setUpClass()
|
||||
|
||||
# Crappy hack to disable the rule from timesheet grid, if it exists
|
||||
# The registry doesn't contain the field timesheet_manager_id.
|
||||
# but there is an ir.rule about it, crashing during its evaluation
|
||||
rule = self.env.ref('timesheet_grid.hr_timesheet_rule_approver_update', raise_if_not_found=False)
|
||||
rule = cls.env.ref('timesheet_grid.hr_timesheet_rule_approver_update', raise_if_not_found=False)
|
||||
if rule:
|
||||
rule.active = False
|
||||
|
||||
# customer partner
|
||||
self.partner = self.env['res.partner'].create({
|
||||
cls.partner = cls.env['res.partner'].create({
|
||||
'name': 'Customer Task',
|
||||
'email': 'customer@task.com',
|
||||
'phone': '42',
|
||||
})
|
||||
|
||||
self.analytic_account = self.env['account.analytic.account'].create({
|
||||
cls.analytic_account = cls.env['account.analytic.account'].create({
|
||||
'name': 'Analytic Account for Test Customer',
|
||||
'partner_id': self.partner.id,
|
||||
'partner_id': cls.partner.id,
|
||||
'code': 'TEST'
|
||||
})
|
||||
|
||||
# project and tasks
|
||||
self.project_customer = self.env['project.project'].create({
|
||||
cls.project_customer = cls.env['project.project'].create({
|
||||
'name': 'Project X',
|
||||
'allow_timesheets': True,
|
||||
'partner_id': self.partner.id,
|
||||
'analytic_account_id': self.analytic_account.id,
|
||||
'partner_id': cls.partner.id,
|
||||
'analytic_account_id': cls.analytic_account.id,
|
||||
})
|
||||
self.task1 = self.env['project.task'].create({
|
||||
cls.task1 = cls.env['project.task'].create({
|
||||
'name': 'Task One',
|
||||
'priority': '0',
|
||||
'kanban_state': 'normal',
|
||||
'project_id': self.project_customer.id,
|
||||
'partner_id': self.partner.id,
|
||||
'project_id': cls.project_customer.id,
|
||||
'partner_id': cls.partner.id,
|
||||
})
|
||||
self.task2 = self.env['project.task'].create({
|
||||
cls.task2 = cls.env['project.task'].create({
|
||||
'name': 'Task Two',
|
||||
'priority': '1',
|
||||
'kanban_state': 'done',
|
||||
'project_id': self.project_customer.id,
|
||||
'project_id': cls.project_customer.id,
|
||||
})
|
||||
# users
|
||||
self.user_employee = self.env['res.users'].create({
|
||||
cls.user_employee = cls.env['res.users'].create({
|
||||
'name': 'User Employee',
|
||||
'login': 'user_employee',
|
||||
'email': 'useremployee@test.com',
|
||||
'groups_id': [(6, 0, [self.ref('hr_timesheet.group_hr_timesheet_user')])],
|
||||
'groups_id': [(6, 0, [cls.env.ref('hr_timesheet.group_hr_timesheet_user').id])],
|
||||
})
|
||||
self.user_employee2 = self.env['res.users'].create({
|
||||
cls.user_employee2 = cls.env['res.users'].create({
|
||||
'name': 'User Employee 2',
|
||||
'login': 'user_employee2',
|
||||
'email': 'useremployee2@test.com',
|
||||
'groups_id': [(6, 0, [self.ref('hr_timesheet.group_hr_timesheet_user')])],
|
||||
'groups_id': [(6, 0, [cls.env.ref('hr_timesheet.group_hr_timesheet_user').id])],
|
||||
})
|
||||
self.user_manager = self.env['res.users'].create({
|
||||
cls.user_manager = cls.env['res.users'].create({
|
||||
'name': 'User Officer',
|
||||
'login': 'user_manager',
|
||||
'email': 'usermanager@test.com',
|
||||
'groups_id': [(6, 0, [self.ref('hr_timesheet.group_timesheet_manager')])],
|
||||
'groups_id': [(6, 0, [cls.env.ref('hr_timesheet.group_timesheet_manager').id])],
|
||||
})
|
||||
# employees
|
||||
self.empl_employee = self.env['hr.employee'].create({
|
||||
cls.empl_employee = cls.env['hr.employee'].create({
|
||||
'name': 'User Empl Employee',
|
||||
'user_id': self.user_employee.id,
|
||||
'user_id': cls.user_employee.id,
|
||||
})
|
||||
self.empl_employee2 = self.env['hr.employee'].create({
|
||||
cls.empl_employee2 = cls.env['hr.employee'].create({
|
||||
'name': 'User Empl Employee 2',
|
||||
'user_id': self.user_employee2.id,
|
||||
'user_id': cls.user_employee2.id,
|
||||
})
|
||||
self.empl_manager = self.env['hr.employee'].create({
|
||||
cls.empl_manager = cls.env['hr.employee'].create({
|
||||
'name': 'User Empl Officer',
|
||||
'user_id': self.user_manager.id,
|
||||
'user_id': cls.user_manager.id,
|
||||
})
|
||||
|
||||
class TestTimesheet(TestCommonTimesheet):
|
||||
|
||||
@@ -57,11 +57,22 @@ class TestWorkEntryBase(TransactionCase):
|
||||
|
||||
def create_work_entry(self, start, stop, work_entry_type=None):
|
||||
work_entry_type = work_entry_type or self.work_entry_type
|
||||
return self.env['hr.work.entry'].create({
|
||||
'contract_id': self.richard_emp.contract_ids[0].id,
|
||||
'name': "Work entry %s-%s" % (start, stop),
|
||||
'date_start': start,
|
||||
'date_stop': stop,
|
||||
'employee_id': self.richard_emp.id,
|
||||
'work_entry_type_id': work_entry_type.id,
|
||||
})
|
||||
return self.create_work_entries([(start, stop, work_entry_type)])
|
||||
|
||||
def create_work_entries(self, intervals):
|
||||
default_work_entry_type = self.work_entry_type
|
||||
create_vals = []
|
||||
for interval in intervals:
|
||||
start = interval[0]
|
||||
stop = interval[1]
|
||||
work_entry_type = interval[2] if len(interval) == 3\
|
||||
else default_work_entry_type
|
||||
create_vals.append({
|
||||
'contract_id': self.richard_emp.contract_ids[0].id,
|
||||
'name': 'Work entry %s-%s' % (start, stop),
|
||||
'date_start': start,
|
||||
'date_stop': stop,
|
||||
'employee_id': self.richard_emp.id,
|
||||
'work_entry_type_id': work_entry_type.id,
|
||||
})
|
||||
return self.env['hr.work.entry'].create(create_vals)
|
||||
|
||||
@@ -13,23 +13,25 @@ from odoo.addons.hr_work_entry_contract.tests.common import TestWorkEntryBase
|
||||
|
||||
@tagged('work_entry')
|
||||
class TestWorkEntry(TestWorkEntryBase):
|
||||
def setUp(self):
|
||||
super(TestWorkEntry, self).setUp()
|
||||
self.tz = pytz.timezone(self.richard_emp.tz)
|
||||
self.start = datetime(2015, 11, 1, 1, 0, 0)
|
||||
self.end = datetime(2015, 11, 30, 23, 59, 59)
|
||||
self.resource_calendar_id = self.env['resource.calendar'].create({'name': 'My Calendar'})
|
||||
contract = self.env['hr.contract'].create({
|
||||
'date_start': self.start.date() - relativedelta(days=5),
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestWorkEntry, cls).setUpClass()
|
||||
cls.tz = pytz.timezone(cls.richard_emp.tz)
|
||||
cls.start = datetime(2015, 11, 1, 1, 0, 0)
|
||||
cls.end = datetime(2015, 11, 30, 23, 59, 59)
|
||||
cls.resource_calendar_id = cls.env['resource.calendar'].create({'name': 'My Calendar'})
|
||||
contract = cls.env['hr.contract'].create({
|
||||
'date_start': cls.start.date() - relativedelta(days=5),
|
||||
'name': 'dodo',
|
||||
'resource_calendar_id': self.resource_calendar_id.id,
|
||||
'resource_calendar_id': cls.resource_calendar_id.id,
|
||||
'wage': 1000,
|
||||
'employee_id': self.richard_emp.id,
|
||||
'employee_id': cls.richard_emp.id,
|
||||
'state': 'open',
|
||||
'date_generated_from': self.end.date() + relativedelta(days=5),
|
||||
'date_generated_from': cls.end.date() + relativedelta(days=5),
|
||||
})
|
||||
self.richard_emp.resource_calendar_id = self.resource_calendar_id
|
||||
self.richard_emp.contract_id = contract
|
||||
cls.richard_emp.resource_calendar_id = cls.resource_calendar_id
|
||||
cls.richard_emp.contract_id = contract
|
||||
|
||||
def test_no_duplicate(self):
|
||||
self.richard_emp.generate_work_entries(self.start, self.end)
|
||||
@@ -102,13 +104,23 @@ class TestWorkEntry(TestWorkEntryBase):
|
||||
def test_outside_calendar(self):
|
||||
""" Test leave work entries outside schedule are conflicting """
|
||||
# Outside but not a leave
|
||||
work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 3, 0), datetime(2018, 10, 10, 4, 0))
|
||||
# Outside and a leave
|
||||
work_entry_2 = self.create_work_entry(datetime(2018, 10, 10, 1, 0), datetime(2018, 10, 10, 2, 0), work_entry_type=self.work_entry_type_leave)
|
||||
# Overlapping and a leave
|
||||
work_entry_3 = self.create_work_entry(datetime(2018, 10, 10, 7, 0), datetime(2018, 10, 10, 10, 0), work_entry_type=self.work_entry_type_leave)
|
||||
# Overlapping and not a leave
|
||||
work_entry_4 = self.create_work_entry(datetime(2018, 10, 10, 11, 0), datetime(2018, 10, 10, 13, 0))
|
||||
# work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 3, 0), datetime(2018, 10, 10, 4, 0))
|
||||
# # Outside and a leave
|
||||
# work_entry_2 = self.create_work_entry(datetime(2018, 10, 10, 1, 0), datetime(2018, 10, 10, 2, 0), work_entry_type=self.work_entry_type_leave)
|
||||
# # Overlapping and a leave
|
||||
# work_entry_3 = self.create_work_entry(datetime(2018, 10, 10, 7, 0), datetime(2018, 10, 10, 10, 0), work_entry_type=self.work_entry_type_leave)
|
||||
# # Overlapping and not a leave
|
||||
# work_entry_4 = self.create_work_entry(datetime(2018, 10, 10, 11, 0), datetime(2018, 10, 10, 13, 0))
|
||||
work_entry_1, work_entry_2, work_entry_3, work_entry_4 = self.create_work_entries([
|
||||
# Outside but not a leave
|
||||
(datetime(2018, 10, 10, 3, 0), datetime(2018, 10, 10, 4, 0)),
|
||||
# Outside and a leave
|
||||
(datetime(2018, 10, 10, 1, 0), datetime(2018, 10, 10, 2, 0), self.work_entry_type_leave),
|
||||
# Overlapping and a leave
|
||||
(datetime(2018, 10, 10, 7, 0), datetime(2018, 10, 10, 10, 0), self.work_entry_type_leave),
|
||||
# Overlapping and not a leave
|
||||
(datetime(2018, 10, 10, 11, 0), datetime(2018, 10, 10, 13, 0)),
|
||||
])
|
||||
(work_entry_1 | work_entry_2 | work_entry_3 | work_entry_4)._mark_leaves_outside_schedule()
|
||||
self.assertEqual(work_entry_2.state, 'conflict', "It should conflict")
|
||||
self.assertNotEqual(work_entry_1.state, 'conflict', "It should not conflict")
|
||||
@@ -117,8 +129,12 @@ class TestWorkEntry(TestWorkEntryBase):
|
||||
|
||||
def test_write_conflict(self):
|
||||
""" Test updating work entries dates recomputes conflicts """
|
||||
work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0))
|
||||
work_entry_2 = self.create_work_entry(datetime(2018, 10, 10, 12, 0), datetime(2018, 10, 10, 18, 0))
|
||||
# work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0))
|
||||
# work_entry_2 = self.create_work_entry(datetime(2018, 10, 10, 12, 0), datetime(2018, 10, 10, 18, 0))
|
||||
work_entry_1, work_entry_2 = self.create_work_entries([
|
||||
(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0)),
|
||||
(datetime(2018, 10, 10, 12, 0), datetime(2018, 10, 10, 18, 0)),
|
||||
])
|
||||
self.assertNotEqual(work_entry_1.state, 'conflict', "It should not conflict")
|
||||
self.assertNotEqual(work_entry_2.state, 'conflict', "It should not conflict")
|
||||
work_entry_1.date_stop = datetime(2018, 10, 10, 14, 0)
|
||||
@@ -131,9 +147,14 @@ class TestWorkEntry(TestWorkEntryBase):
|
||||
|
||||
def test_write_move(self):
|
||||
""" Test completely moving a work entry recomputes conflicts """
|
||||
work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0))
|
||||
work_entry_2 = self.create_work_entry(datetime(2018, 10, 18, 9, 0), datetime(2018, 10, 18, 12, 0))
|
||||
work_entry_3 = self.create_work_entry(datetime(2018, 10, 18, 10, 0), datetime(2018, 10, 18, 12, 0))
|
||||
# work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0))
|
||||
# work_entry_2 = self.create_work_entry(datetime(2018, 10, 18, 9, 0), datetime(2018, 10, 18, 12, 0))
|
||||
# work_entry_3 = self.create_work_entry(datetime(2018, 10, 18, 10, 0), datetime(2018, 10, 18, 12, 0))
|
||||
work_entry_1, work_entry_2, work_entry_3 = self.create_work_entries([
|
||||
(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0)),
|
||||
(datetime(2018, 10, 18, 9, 0), datetime(2018, 10, 18, 12, 0)),
|
||||
(datetime(2018, 10, 18, 10, 0), datetime(2018, 10, 18, 12, 0)),
|
||||
])
|
||||
work_entry_2.write({
|
||||
'date_start': datetime(2018, 10, 10, 9, 0),
|
||||
'date_stop': datetime(2018, 10, 10, 10, 0),
|
||||
@@ -152,8 +173,12 @@ class TestWorkEntry(TestWorkEntryBase):
|
||||
|
||||
def test_unarchive_conflict(self):
|
||||
""" Test archive/unarchive a work entry recomputes conflicts """
|
||||
work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0))
|
||||
work_entry_2 = self.create_work_entry(datetime(2018, 10, 10, 10, 0), datetime(2018, 10, 10, 18, 0))
|
||||
# work_entry_1 = self.create_work_entry(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0))
|
||||
# work_entry_2 = self.create_work_entry(datetime(2018, 10, 10, 10, 0), datetime(2018, 10, 10, 18, 0))
|
||||
work_entry_1, work_entry_2 = self.create_work_entries([
|
||||
(datetime(2018, 10, 10, 9, 0), datetime(2018, 10, 10, 12, 0)),
|
||||
(datetime(2018, 10, 10, 10, 0), datetime(2018, 10, 10, 18, 0)),
|
||||
])
|
||||
work_entry_2.active = False
|
||||
self.assertNotEqual(work_entry_1.state, 'conflict', "It should not conflict")
|
||||
self.assertEqual(work_entry_2.state, 'cancelled', "It should be cancelled")
|
||||
|
||||
@@ -8,13 +8,14 @@ from odoo.addons.hr_work_entry_holidays.tests.common import TestWorkEntryHoliday
|
||||
|
||||
class TestWorkEntryHolidaysMultiContract(TestWorkEntryHolidaysBase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Legal Leaves',
|
||||
'time_type': 'leave',
|
||||
'requires_allocation': 'no',
|
||||
'work_entry_type_id': self.work_entry_type_leave.id
|
||||
'work_entry_type_id': cls.work_entry_type_leave.id
|
||||
})
|
||||
|
||||
def create_leave(self, start, end):
|
||||
|
||||
@@ -8,14 +8,15 @@ from odoo.addons.hr_work_entry_holidays.tests.common import TestWorkEntryHoliday
|
||||
|
||||
class TestPayslipHolidaysComputation(TestWorkEntryHolidaysBase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
|
||||
self.leave_type = self.env['hr.leave.type'].create({
|
||||
cls.leave_type = cls.env['hr.leave.type'].create({
|
||||
'name': 'Legal Leaves',
|
||||
'time_type': 'leave',
|
||||
'requires_allocation': 'no',
|
||||
'work_entry_type_id': self.work_entry_type_leave.id
|
||||
'work_entry_type_id': cls.work_entry_type_leave.id
|
||||
})
|
||||
|
||||
def test_work_data(self):
|
||||
|
||||
@@ -12,23 +12,24 @@ from odoo.addons.hr_work_entry_holidays.tests.common import TestWorkEntryHoliday
|
||||
|
||||
@tagged('work_entry')
|
||||
class TestWorkeEntryHolidaysWorkEntry(TestWorkEntryHolidaysBase):
|
||||
def setUp(self):
|
||||
super(TestWorkeEntryHolidaysWorkEntry, self).setUp()
|
||||
self.tz = pytz.timezone(self.richard_emp.tz)
|
||||
self.start = datetime(2015, 11, 1, 1, 0, 0)
|
||||
self.end = datetime(2015, 11, 30, 23, 59, 59)
|
||||
self.resource_calendar_id = self.env['resource.calendar'].create({'name': 'Zboub'})
|
||||
contract = self.env['hr.contract'].create({
|
||||
'date_start': self.start.date() - relativedelta(days=5),
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestWorkeEntryHolidaysWorkEntry, cls).setUpClass()
|
||||
cls.tz = pytz.timezone(cls.richard_emp.tz)
|
||||
cls.start = datetime(2015, 11, 1, 1, 0, 0)
|
||||
cls.end = datetime(2015, 11, 30, 23, 59, 59)
|
||||
cls.resource_calendar_id = cls.env['resource.calendar'].create({'name': 'Zboub'})
|
||||
contract = cls.env['hr.contract'].create({
|
||||
'date_start': cls.start.date() - relativedelta(days=5),
|
||||
'name': 'dodo',
|
||||
'resource_calendar_id': self.resource_calendar_id.id,
|
||||
'resource_calendar_id': cls.resource_calendar_id.id,
|
||||
'wage': 1000,
|
||||
'employee_id': self.richard_emp.id,
|
||||
'employee_id': cls.richard_emp.id,
|
||||
'state': 'open',
|
||||
'date_generated_from': self.end.date() + relativedelta(days=5),
|
||||
'date_generated_from': cls.end.date() + relativedelta(days=5),
|
||||
})
|
||||
self.richard_emp.resource_calendar_id = self.resource_calendar_id
|
||||
self.richard_emp.contract_id = contract
|
||||
cls.richard_emp.resource_calendar_id = cls.resource_calendar_id
|
||||
cls.richard_emp.contract_id = contract
|
||||
|
||||
def test_validate_non_approved_leave_work_entry(self):
|
||||
work_entry1 = self.env['hr.work.entry'].create({
|
||||
|
||||
Reference in New Issue
Block a user