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

204 lines
7.2 KiB
Python

# © 2015 Salton Massally <smassally@idtlabs.sl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.exceptions import ValidationError
from odoo.exceptions import UserError
from odoo.tests.common import TransactionCase
class TestHolidaysPublic(TransactionCase):
at_install = False
post_install = True
def setUp(self):
super(TestHolidaysPublic, self).setUp()
self.holiday_model = self.env["hr.holidays.public"]
self.holiday_model_line = self.env["hr.holidays.public.line"]
self.employee_model = self.env['hr.employee']
self.wizard_next_year = self.env['public.holidays.next.year.wizard']
# Remove possibly existing public holidays that would interfer.
self.holiday_model_line.search([]).unlink()
self.holiday_model.search([]).unlink()
# Create holidays
holiday2 = self.holiday_model.create({
'year': 1994,
'country_id': self.env.ref('base.sl').id
})
self.holiday_model_line.create({
'name': 'holiday 5',
'date': '1994-10-14',
'year_id': holiday2.id
})
holiday3 = self.holiday_model.create({
'year': 1994,
'country_id': self.env.ref('base.sk').id
})
self.holiday_model_line.create({
'name': 'holiday 6',
'date': '1994-11-14',
'year_id': holiday3.id
})
holiday1 = self.holiday_model.create({
'year': 1995,
})
for dt in ['1995-10-14', '1995-12-31', '1995-01-01']:
self.holiday_model_line.create({
'name': 'holiday x',
'date': dt,
'year_id': holiday1.id
})
self.employee = self.employee_model.create(
{
'name': 'Employee 1',
'address_id': self.env['res.partner'].create(
{
'name': 'Employee 1',
'country_id': self.env.ref('base.sl').id
}
).id
}
)
def test_name_get(self):
hol = self.holiday_model.create({
'year': 1999,
})
hol_name = hol.name_get()[0]
self.assertEqual(hol_name, (hol.id, str(hol.year)))
def test_duplicate_year_country_fail(self):
# ensures that duplicate year cannot be created for the same country
with self.assertRaises(ValidationError):
self.holiday_model.create({
'year': 1995,
})
with self.assertRaises(ValidationError):
self.holiday_model.create({
'year': 1994,
'country_id': self.env.ref('base.sl').id
})
def test_duplicate_date_state_fail(self):
# ensures that duplicate date cannot be created for the same country
# state or with state null
holiday4 = self.holiday_model.create({
'year': 1994,
'country_id': self.env.ref('base.us').id
})
hline = self.holiday_model_line.create({
'name': 'holiday x',
'date': '1994-11-14',
'year_id': holiday4.id
})
with self.assertRaises(ValidationError):
self.holiday_model_line.create({
'name': 'holiday x',
'date': '1994-11-14',
'year_id': holiday4.id
})
hline.state_ids = [(6, 0, [self.env.ref('base.state_us_35').id])]
with self.assertRaises(ValidationError):
self.holiday_model_line.create({
'name': 'holiday x',
'date': '1994-11-14',
'year_id': holiday4.id,
'state_ids': [(6, 0, [self.env.ref('base.state_us_35').id])]
})
def test_isnot_holiday(self):
# ensures that if given a date that is not an holiday it returns none
self.assertFalse(self.holiday_model.is_public_holiday('1995-12-10'))
def test_is_holiday(self):
# ensures that correct holidays are identified
self.assertTrue(self.holiday_model.is_public_holiday('1995-10-14'))
def test_isnot_holiday_in_country(self):
# ensures that correct holidays are identified for a country
self.assertFalse(self.holiday_model.is_public_holiday(
'1994-11-14', employee_id=self.employee.id))
def test_is_holiday_in_country(self):
# ensures that correct holidays are identified for a country
self.assertTrue(self.holiday_model.is_public_holiday(
'1994-10-14', employee_id=self.employee.id))
def test_holiday_line_year(self):
# ensures that line year and holiday year are the same
holiday4 = self.holiday_model.create({
'year': 1994,
})
with self.assertRaises(ValidationError):
self.holiday_model_line.create({
'name': 'holiday x',
'date': '1995-11-14',
'year_id': holiday4.id
})
def test_list_holidays_in_list_country_specific(self):
# ensures that correct holidays are identified for a country
lines = self.holiday_model.get_holidays_list(
1994, employee_id=self.employee.id)
res = lines.filtered(lambda r: r.date == '1994-10-14')
self.assertEqual(len(res), 1)
self.assertEqual(len(lines), 1)
def test_list_holidays_in_list(self):
# ensures that correct holidays are identified for a country
lines = self.holiday_model.get_holidays_list(1995)
res = lines.filtered(lambda r: r.date == '1995-10-14')
self.assertEqual(len(res), 1)
self.assertEqual(len(lines), 3)
def test_create_next_year_public_holidays(self):
self.wizard_next_year.new().create_public_holidays()
lines = self.holiday_model.get_holidays_list(1996)
res = lines.filtered(lambda r: r.date == '1996-10-14')
self.assertEqual(len(res), 1)
self.assertEqual(len(lines), 3)
def test_create_year_2000_public_holidays(self):
ph_start_ids = self.holiday_model.search([('year', '=', 1994)])
val = {
'template_ids': ph_start_ids,
'year': 2000
}
wz_create_ph = self.wizard_next_year.new(values=val)
wz_create_ph.create_public_holidays()
lines = self.holiday_model.get_holidays_list(2000)
self.assertEqual(len(lines), 2)
res = lines.filtered(
lambda r: r.year_id.country_id.id == self.env.ref('base.sl').id)
self.assertEqual(len(res), 1)
def test_february_29th(self):
# Ensures that users get a UserError (not a nasty Exception) when
# trying to create public holidays from year including 29th of
# February
holiday_tw_2016 = self.holiday_model.create({
'year': 2016,
'country_id': self.env.ref('base.tw').id
})
self.holiday_model_line.create({
'name': 'Peace Memorial Holiday',
'date': '2016-02-29',
'year_id': holiday_tw_2016.id,
})
val = {
'template_ids': holiday_tw_2016
}
wz_create_ph = self.wizard_next_year.new(values=val)
with self.assertRaises(UserError):
wz_create_ph.create_public_holidays()