204 lines
7.2 KiB
Python
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()
|