83 lines
3.4 KiB
Python
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')
|