diff --git a/addons/hr/tests/common.py b/addons/hr/tests/common.py index 4aacc2650e5..3211d758fea 100644 --- a/addons/hr/tests/common.py +++ b/addons/hr/tests/common.py @@ -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') diff --git a/addons/hr/tests/test_channel.py b/addons/hr/tests/test_channel.py index 1b671ccd509..8caba47505f 100644 --- a/addons/hr/tests/test_channel.py +++ b/addons/hr/tests/test_channel.py @@ -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)], }) diff --git a/addons/hr/tests/test_hr_flow.py b/addons/hr/tests/test_hr_flow.py index 7442be48cc4..22edd44f11a 100644 --- a/addons/hr/tests/test_hr_flow.py +++ b/addons/hr/tests/test_hr_flow.py @@ -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): diff --git a/addons/hr/tests/test_multi_company.py b/addons/hr/tests/test_multi_company.py index 9fe6e99183f..2cbbf33482c 100644 --- a/addons/hr/tests/test_multi_company.py +++ b/addons/hr/tests/test_multi_company.py @@ -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( diff --git a/addons/hr/tests/test_self_user_access.py b/addons/hr/tests/test_self_user_access.py index 37aa30e00b1..6458deac69e 100644 --- a/addons/hr/tests/test_self_user_access.py +++ b/addons/hr/tests/test_self_user_access.py @@ -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 # diff --git a/addons/hr_attendance/tests/test_hr_attendance_constraints.py b/addons/hr_attendance/tests/test_hr_attendance_constraints.py index 15f585f6732..8184f9c5d39 100644 --- a/addons/hr_attendance/tests/test_hr_attendance_constraints.py +++ b/addons/hr_attendance/tests/test_hr_attendance_constraints.py @@ -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'), }) diff --git a/addons/hr_attendance/tests/test_hr_attendance_process.py b/addons/hr_attendance/tests/test_hr_attendance_process.py index 0a7a2db6155..098cf07737b 100644 --- a/addons/hr_attendance/tests/test_hr_attendance_process.py +++ b/addons/hr_attendance/tests/test_hr_attendance_process.py @@ -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' diff --git a/addons/hr_holidays/tests/common.py b/addons/hr_holidays/tests/common.py index 83e0df4d673..72497b1b6a4 100644 --- a/addons/hr_holidays/tests/common.py +++ b/addons/hr_holidays/tests/common.py @@ -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}) diff --git a/addons/hr_holidays/tests/test_access_rights.py b/addons/hr_holidays/tests/test_access_rights.py index 2d97aaf9377..8f36f6e7a98 100644 --- a/addons/hr_holidays/tests/test_access_rights.py +++ b/addons/hr_holidays/tests/test_access_rights.py @@ -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, diff --git a/addons/hr_holidays/tests/test_accrual_allocations.py b/addons/hr_holidays/tests/test_accrual_allocations.py index 3bad3559396..70cd0c47c65 100644 --- a/addons/hr_holidays/tests/test_accrual_allocations.py +++ b/addons/hr_holidays/tests/test_accrual_allocations.py @@ -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', diff --git a/addons/hr_holidays/tests/test_allocation_access_rights.py b/addons/hr_holidays/tests/test_allocation_access_rights.py index b68ffc200dc..863f2dd6161 100644 --- a/addons/hr_holidays/tests/test_allocation_access_rights.py +++ b/addons/hr_holidays/tests/test_allocation_access_rights.py @@ -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): diff --git a/addons/hr_holidays/tests/test_automatic_leave_dates.py b/addons/hr_holidays/tests/test_automatic_leave_dates.py index 17089dfe5e9..87f554b7b3a 100644 --- a/addons/hr_holidays/tests/test_automatic_leave_dates.py +++ b/addons/hr_holidays/tests/test_automatic_leave_dates.py @@ -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', diff --git a/addons/hr_holidays/tests/test_leave_requests.py b/addons/hr_holidays/tests/test_leave_requests.py index bcf0e3af4cb..00c6687e2fa 100644 --- a/addons/hr_holidays/tests/test_leave_requests.py +++ b/addons/hr_holidays/tests/test_leave_requests.py @@ -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): diff --git a/addons/hr_holidays/tests/test_out_of_office.py b/addons/hr_holidays/tests/test_out_of_office.py index a71fd55b3fc..485ff1523f8 100644 --- a/addons/hr_holidays/tests/test_out_of_office.py +++ b/addons/hr_holidays/tests/test_out_of_office.py @@ -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 diff --git a/addons/hr_holidays/tests/test_res_partner.py b/addons/hr_holidays/tests/test_res_partner.py index 806a93a5908..1e27e879526 100644 --- a/addons/hr_holidays/tests/test_res_partner.py +++ b/addons/hr_holidays/tests/test_res_partner.py @@ -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): diff --git a/addons/hr_timesheet/tests/test_timesheet.py b/addons/hr_timesheet/tests/test_timesheet.py index 63da1637bb5..c70d40cc54c 100644 --- a/addons/hr_timesheet/tests/test_timesheet.py +++ b/addons/hr_timesheet/tests/test_timesheet.py @@ -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): diff --git a/addons/hr_work_entry_contract/tests/common.py b/addons/hr_work_entry_contract/tests/common.py index 3e9e38a22d3..3c19cc14006 100644 --- a/addons/hr_work_entry_contract/tests/common.py +++ b/addons/hr_work_entry_contract/tests/common.py @@ -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) diff --git a/addons/hr_work_entry_contract/tests/test_work_entry.py b/addons/hr_work_entry_contract/tests/test_work_entry.py index 7e5932f3fc8..14bec1f00c2 100644 --- a/addons/hr_work_entry_contract/tests/test_work_entry.py +++ b/addons/hr_work_entry_contract/tests/test_work_entry.py @@ -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") diff --git a/addons/hr_work_entry_holidays/tests/test_multi_contract.py b/addons/hr_work_entry_holidays/tests/test_multi_contract.py index 23ac048dfe1..58f736e6470 100644 --- a/addons/hr_work_entry_holidays/tests/test_multi_contract.py +++ b/addons/hr_work_entry_holidays/tests/test_multi_contract.py @@ -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): diff --git a/addons/hr_work_entry_holidays/tests/test_payslip_holidays_computation.py b/addons/hr_work_entry_holidays/tests/test_payslip_holidays_computation.py index 4a8ffa0d808..7064e839dca 100644 --- a/addons/hr_work_entry_holidays/tests/test_payslip_holidays_computation.py +++ b/addons/hr_work_entry_holidays/tests/test_payslip_holidays_computation.py @@ -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): diff --git a/addons/hr_work_entry_holidays/tests/test_work_entry.py b/addons/hr_work_entry_holidays/tests/test_work_entry.py index c229a8a3d4f..4dc056e7bc6 100644 --- a/addons/hr_work_entry_holidays/tests/test_work_entry.py +++ b/addons/hr_work_entry_holidays/tests/test_work_entry.py @@ -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({