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()
 |