odoo18/addons_extensions/hr_payroll/tests/test_performance.py

88 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import date, datetime
from odoo.addons.hr_payroll.tests.common import TestPayslipBase
from odoo.tests.common import users, warmup, tagged
@tagged('payslip_perf')
class TestPayrollPerformance(TestPayslipBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.jack = cls.env['hr.employee'].create({'name': 'Jack'})
cls.employees = cls.richard_emp | cls.jack
cls.env['hr.contract'].create([{
'date_start': date(2018, 1, 1),
'date_end': date(2018, 2, 1),
'name': 'Contract for %s' % employee.name,
'wage': 5000.0,
'state': 'open',
'employee_id': employee.id,
'structure_type_id': cls.structure_type.id,
'date_generated_from': datetime(2018, 1, 1, 0, 0),
'date_generated_to': datetime(2018, 1, 1, 0, 0),
} for employee in cls.employees])
def reset_work_entries(self):
self.employees.contract_id.write({
'date_generated_from': datetime(2018, 1, 1, 0, 0),
'date_generated_to': datetime(2018, 1, 1, 0, 0),
})
@users('__system__', 'admin')
@warmup
def test_performance_work_entry_generation(self):
""" Work entry generation """
with self.assertQueryCount(__system__=18, admin=20):
self.employees.generate_work_entries(date(2018, 1, 1), date(2018, 1, 2))
self.reset_work_entries()
@users('__system__', 'admin')
@warmup
def test_performance_work_entry_unlink(self):
""" Work entry unlink """
work_entry = self.create_work_entry(datetime(2018, 1, 1, 7, 0), datetime(2018, 1, 1, 12, 0))
self.create_work_entry(datetime(2018, 1, 1, 11, 0), datetime(2018, 1, 1, 17, 0))
with self.assertQueryCount(__system__=14, admin=15):
work_entry.unlink()
@users('__system__', 'admin')
@warmup
def test_performance_work_entry_write_date(self):
work_entry = self.create_work_entry(datetime(2018, 1, 1, 3, 0), datetime(2018, 1, 1, 4, 0))
self.create_work_entry(datetime(2018, 1, 1, 11, 0), datetime(2018, 1, 1, 17, 0))
with self.assertQueryCount(__system__=7, admin=8):
work_entry.write({'date_stop': datetime(2018, 1, 1, 13, 0)})
@users('__system__', 'admin')
@warmup
def test_performance_work_entry_write_date_batch(self):
work_entry_1 = self.create_work_entry(datetime(2018, 1, 1, 3, 0), datetime(2018, 1, 1, 4, 0))
work_entry_2 = self.create_work_entry(datetime(2018, 1, 1, 7, 0), datetime(2018, 1, 1, 11, 0))
self.create_work_entry(datetime(2018, 1, 1, 11, 0), datetime(2018, 1, 1, 17, 0))
with self.assertQueryCount(__system__=8, admin=9):
(work_entry_1 | work_entry_2).write({'date_stop': datetime(2018, 1, 1, 13, 0)})
@users('__system__', 'admin')
@warmup
def test_rule_parameter_cache(self):
parameter = self.env['hr.rule.parameter'].create({
'name': 'Test parameter',
'code': 'test_parameter_cache',
})
self.env['hr.rule.parameter.value'].create({
'rule_parameter_id': parameter.id,
'date_from': date(2015, 10, 10),
'parameter_value': 3
})
with self.assertQueryCount(__system__=1, admin=3):
self.env['hr.rule.parameter']._get_parameter_from_code('test_parameter_cache')
parameter.unlink()