odoo/ext/custom-addons/hr_holidays_public/tests/test_holidays_calculation.py

124 lines
4.6 KiB
Python

# Copyright 2015 iDT LABS (http://www.@idtlabs.sl)
# Copyright 2017-2018 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests import common
class TestHolidaysComputeDaysBase(common.SavepointCase):
at_install = False
post_install = True
@classmethod
def setUpClass(cls):
super(TestHolidaysComputeDaysBase, cls).setUpClass()
cls.HrHolidays = cls.env['hr.holidays']
cls.HrHolidaysPublic = cls.env["hr.holidays.public"]
# Remove timezone for controlling data better
cls.env.user.tz = False
cls.calendar = cls.env['resource.calendar'].create({
'name': 'Calendar',
'attendance_ids': [],
})
for day in range(5): # From monday to friday
cls.calendar.attendance_ids = [
(0, 0, {
'name': 'Attendance',
'dayofweek': str(day),
'hour_from': '08',
'hour_to': '12',
}),
(0, 0, {
'name': 'Attendance',
'dayofweek': str(day),
'hour_from': '14',
'hour_to': '18',
}),
]
cls.address_1 = cls.env['res.partner'].create({
'name': 'Address 1',
'country_id': cls.env.ref('base.uk').id,
})
cls.address_2 = cls.env['res.partner'].create({
'name': 'Address 1',
'country_id': cls.env.ref('base.es').id,
'state_id': cls.env.ref('base.state_es_cr').id,
})
cls.employee_1 = cls.env['hr.employee'].create({
'name': 'Employee 1',
'resource_calendar_id': cls.calendar.id,
'address_id': cls.address_1.id,
})
cls.employee_2 = cls.env['hr.employee'].create({
'name': 'Employee 2',
'resource_calendar_id': cls.calendar.id,
'address_id': cls.address_2.id,
})
# Use a very old year for avoiding to collapse with current data
cls.public_holiday_global = cls.HrHolidaysPublic.create({
'year': 1946,
'line_ids': [
(0, 0, {
'name': 'Christmas',
'date': '1946-12-25',
}),
],
})
cls.public_holiday_country = cls.HrHolidaysPublic.create({
'year': 1946,
'country_id': cls.address_2.country_id.id,
'line_ids': [
(0, 0, {
'name': 'Before Christmas',
'date': '1946-12-24',
}),
(0, 0, {
'name': 'Even More Before Christmas',
'date': '1946-12-23',
'state_ids': [
(6, 0, cls.address_2.state_id.ids),
]
}),
],
})
cls.holiday_type = cls.env['hr.holidays.status'].create({
'name': 'Leave Type Test',
'exclude_public_holidays': True,
})
cls.holiday_type_no_excludes = cls.env['hr.holidays.status'].create({
'name': 'Leave Type Test Without excludes',
'exclude_public_holidays': False,
})
class TestHolidaysComputeDays(TestHolidaysComputeDaysBase):
def test_number_days_excluding_employee_1(self):
holidays = self.HrHolidays.new({
'date_from': '1946-12-23 00:00:00', # Monday
'date_to': '1946-12-29 23:59:59', # Sunday
'holiday_status_id': self.holiday_type.id,
'employee_id': self.employee_1.id,
})
holidays._onchange_data_hr_holidays_public()
self.assertEqual(holidays.number_of_days_temp, 4)
def _test_number_days_excluding_employee_2(self):
holidays = self.HrHolidays.new({
'date_from': '1946-12-23 00:00:00', # Monday
'date_to': '1946-12-29 23:59:59', # Sunday
'holiday_status_id': self.holiday_type.id,
'employee_id': self.employee_2.id,
})
holidays._onchange_data_hr_holidays_public()
self.assertEqual(holidays.number_of_days_temp, 2)
def test_number_days_not_excluding(self):
holidays = self.HrHolidays.new({
'date_from': '1946-12-23 00:00:00', # Monday
'date_to': '1946-12-29 23:59:59', # Sunday
'holiday_status_id': self.holiday_type_no_excludes.id,
'employee_id': self.employee_1.id,
})
holidays._onchange_data_hr_holidays_public()
self.assertEqual(holidays.number_of_days_temp, 5)