odoo18/addons_extensions/hr_payroll/tests/test_rule_parameter.py

83 lines
3.4 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from unittest.mock import patch
from datetime import date
from odoo import tests
from odoo.fields import Date
from odoo.exceptions import UserError
from odoo.tests.common import TransactionCase, new_test_user
@tests.tagged('post_install', '-at_install')
class TestRuleParameter(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.rule_parameter = cls.env['hr.rule.parameter'].create({
'name': 'Test Parameter',
'code': 'test_param',
})
values = []
for year in [2016, 2017, 2018, 2020]:
values.append({
'rule_parameter_id': cls.rule_parameter.id,
'parameter_value': str(year),
'date_from': date(year, 1, 1)
})
cls.env['hr.rule.parameter.value'].create(values)
@patch.object(Date, 'today', lambda: date(2019, 10, 10))
def test_get_last_version(self):
value = self.env['hr.rule.parameter']._get_parameter_from_code('test_param')
self.assertEqual(value, 2018, "It should get last valid value")
def test_get_middle_version(self):
value = self.env['hr.rule.parameter']._get_parameter_from_code('test_param', date=date(2017, 5, 5))
self.assertEqual(value, 2017, "It should get the 2017 version")
def test_get_unexisting_version(self):
with self.assertRaises(UserError):
value = self.env['hr.rule.parameter']._get_parameter_from_code('test_param', date=date(2014, 5, 5))
def test_wrong_code(self):
with self.assertRaises(UserError):
value = self.env['hr.rule.parameter']._get_parameter_from_code('wrong_code')
def test_multicompany(self):
""" Test value is not reused from cache when allowed_company_ids changes """
be = self.env.ref('base.be')
fr = self.env.ref('base.fr')
company_1 = self.env['res.company'].create({'name': 'Table', 'country_id': be.id})
company_2 = self.env['res.company'].create({'name': 'Tableau', 'country_id': fr.id})
user = new_test_user(self.env, login='bub', groups='hr.group_hr_user',
company_id=company_2.id,
company_ids=[(6, 0, (company_1 + company_2).ids)])
rule_parameter = self.env['hr.rule.parameter'].create({
'name': 'Test Parameter',
'code': 'test_parameter',
'country_id': be.id,
})
self.env['hr.rule.parameter.value'].create({
'rule_parameter_id': rule_parameter.id,
'date_from': date(2015, 10, 10),
'parameter_value': 100,
})
with self.assertRaises(UserError):
# Read a BE parameter from FR company
self.env['hr.rule.parameter'].with_user(user).with_company(company_2)._get_parameter_from_code('test_parameter')
# Read a BE parameter from BE company, value is set in cache
be_value = self.env['hr.rule.parameter'].with_user(user).with_company(company_1)._get_parameter_from_code('test_parameter')
self.assertEqual(be_value, 100)
with self.assertRaises(UserError):
# Read a BE parameter from FR company
# Value should not come from cache, access rights should be checked
self.env['hr.rule.parameter'].with_user(user).with_company(company_2)._get_parameter_from_code('test_parameter')