From bba5eca2511b9ecb1f5008165b8e1fc7bd2dc595 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Tue, 11 Jan 2022 11:29:39 -0800 Subject: [PATCH] [REF] l10n_us_hr_payroll_401k: extract tests, module parameters updated remotely --- l10n_us_hr_payroll_401k/models/__init__.py | 1 + l10n_us_hr_payroll_401k/models/update.py | 13 ++ l10n_us_hr_payroll_401k/tests/__init__.py | 2 +- l10n_us_hr_payroll_401k/tests/test_payroll.py | 132 ------------------ 4 files changed, 15 insertions(+), 133 deletions(-) create mode 100644 l10n_us_hr_payroll_401k/models/update.py delete mode 100644 l10n_us_hr_payroll_401k/tests/test_payroll.py diff --git a/l10n_us_hr_payroll_401k/models/__init__.py b/l10n_us_hr_payroll_401k/models/__init__.py index 9b8578e7..33d3566a 100644 --- a/l10n_us_hr_payroll_401k/models/__init__.py +++ b/l10n_us_hr_payroll_401k/models/__init__.py @@ -2,3 +2,4 @@ from . import contract from . import payslip +from . import update diff --git a/l10n_us_hr_payroll_401k/models/update.py b/l10n_us_hr_payroll_401k/models/update.py new file mode 100644 index 00000000..a83ca8ff --- /dev/null +++ b/l10n_us_hr_payroll_401k/models/update.py @@ -0,0 +1,13 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + +from odoo import api, models + + +class PublisherWarrantyContract(models.AbstractModel): + _inherit = 'publisher_warranty.contract' + + @api.model + def hibou_payroll_modules_to_update(self): + res = super().hibou_payroll_modules_to_update() + res.append('l10n_us_hr_payroll_401k') + return res diff --git a/l10n_us_hr_payroll_401k/tests/__init__.py b/l10n_us_hr_payroll_401k/tests/__init__.py index cf880a90..61e587fa 100644 --- a/l10n_us_hr_payroll_401k/tests/__init__.py +++ b/l10n_us_hr_payroll_401k/tests/__init__.py @@ -1,3 +1,3 @@ # Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. -from . import test_payroll +# Moved to l10n_us_hr_payroll_401k_params diff --git a/l10n_us_hr_payroll_401k/tests/test_payroll.py b/l10n_us_hr_payroll_401k/tests/test_payroll.py deleted file mode 100644 index cb310262..00000000 --- a/l10n_us_hr_payroll_401k/tests/test_payroll.py +++ /dev/null @@ -1,132 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import fields -from odoo.addons.l10n_us_hr_payroll.tests import common -from datetime import timedelta - - -class TestUsPayslip(common.TestUsPayslip): - EE_LIMIT = 19500.0 - EE_LIMIT_CATCHUP = 6500.0 - ER_LIMIT = 37500.0 - - def setUp(self): - super().setUp() - self.schedule_pay_salary = 'bi-weekly' - self.payslip_date_start = fields.Date.from_string('2020-01-01') - self.payslip_date_end = self.payslip_date_start + timedelta(days=14) - self.er_match_parameter = self.env.ref('l10n_us_hr_payroll_401k.rule_parameter_er_401k_match_percent_2020') - self.er_match_parameter.parameter_value = '4.0' # 4% match up to salary - - def test_01_payslip_traditional(self): - wage = 2000.0 - employee = self._createEmployee() - contract = self._createContract(employee, - wage=wage, - ira_rate=5.0, - schedule_pay=self.schedule_pay_salary) - payslip = self._createPayslip(employee, self.payslip_date_start, self.payslip_date_end) - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -100.0) - - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, -80.0) # 4% of wage up to their contribution - - contract.ira_rate = 0.0 - contract.ira_amount = 25.0 - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -25.0) - - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, -25.0) # 4% of wage up to their contribution - - def test_02_payslip_roth(self): - wage = 2000.0 - employee = self._createEmployee() - contract = self._createContract(employee, - wage=wage, - ira_roth_rate=5.0, - schedule_pay=self.schedule_pay_salary) - payslip = self._createPayslip(employee, self.payslip_date_start, self.payslip_date_end) - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA_ROTH') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -100.0) - - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, -80.0) # 4% of wage up to their contribution - - contract.ira_roth_rate = 0.0 - contract.ira_roth_amount = 25.0 - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA_ROTH') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -25.0) - - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, -25.0) # 4% of wage up to their contribution - - def test_10_payslip_limits(self): - self.er_match_parameter.parameter_value = '20.0' # 20% match up to salary - wage = 80000.0 - rate = 20.0 - employee = self._createEmployee() - contract = self._createContract(employee, - wage=wage, - ira_rate=rate, - schedule_pay=self.schedule_pay_salary) - - # Payslip 1 - 16k - payslip = self._createPayslip(employee, self.payslip_date_start, self.payslip_date_end) - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -(wage * rate / 100.0)) - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, ira_line.amount) - common.process_payslip(payslip) - - # Payslip 2 - 3.5k - payslip = self._createPayslip(employee, self.payslip_date_start + timedelta(days=14), - self.payslip_date_end + timedelta(days=14)) - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -(self.EE_LIMIT-(wage * rate / 100.0))) - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, ira_line.amount) - common.process_payslip(payslip) - - # Payslip 3 - 0 (over limit) - payslip = self._createPayslip(employee, self.payslip_date_start + timedelta(days=28), - self.payslip_date_end + timedelta(days=28)) - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA') - self.assertFalse(ira_line) - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertFalse(er_ira_line) - - # Payslip 3 - Catch-up - employee.birthday = '1960-01-01' - payslip.compute_sheet() - ira_line = payslip.line_ids.filtered(lambda l: l.code == 'EE_IRA') - self.assertTrue(ira_line) - self.assertPayrollEqual(ira_line.amount, -self.EE_LIMIT_CATCHUP) - er_ira_line = payslip.line_ids.filtered(lambda l: l.code == 'ER_IRA_MATCH') - self.assertTrue(er_ira_line) - self.assertPayrollEqual(er_ira_line.amount, ira_line.amount) - common.process_payslip(payslip) - - # Note that the company limit is higher than what is possible by 'match' - # because even with 100% (or more) you would never be able to out-pace - # the employee's own contributions.