From ce37ee8bca0c0a1d2c652f3f2301b9c056313435 Mon Sep 17 00:00:00 2001 From: Ravi Gohil Date: Tue, 17 May 2016 14:34:01 +0530 Subject: [PATCH] [MIG] hr_payroll: Converted yml test cases to python unittest. --- addons/hr_payroll/__openerp__.py | 3 - addons/hr_payroll/test/payslip.yml | 135 ------------------- addons/hr_payroll/tests/__init__.py | 4 + addons/hr_payroll/tests/common.py | 50 +++++++ addons/hr_payroll/tests/test_payslip_flow.py | 86 ++++++++++++ 5 files changed, 140 insertions(+), 138 deletions(-) delete mode 100644 addons/hr_payroll/test/payslip.yml create mode 100644 addons/hr_payroll/tests/__init__.py create mode 100644 addons/hr_payroll/tests/common.py create mode 100644 addons/hr_payroll/tests/test_payslip_flow.py diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py index 91747d49aa9..8d0f39c9dc8 100644 --- a/addons/hr_payroll/__openerp__.py +++ b/addons/hr_payroll/__openerp__.py @@ -40,8 +40,5 @@ Generic Payroll system. 'views/report_payslip_templates.xml', 'views/report_payslipdetails_templates.xml', ], - 'test': [ - 'test/payslip.yml', - ], 'demo': ['data/hr_payroll_demo.xml'], } diff --git a/addons/hr_payroll/test/payslip.yml b/addons/hr_payroll/test/payslip.yml deleted file mode 100644 index b4029146b6d..00000000000 --- a/addons/hr_payroll/test/payslip.yml +++ /dev/null @@ -1,135 +0,0 @@ -- - I test "Payslip" in order to check the hr_payroll module in OpenERP -- - I create a new employee "Richard" -- - !record {model: hr.employee, id: hr_employee_richard0}: - birthday: '1984-05-01' - country_id: base.be - department_id: hr.dep_rd - gender: male - name: Richard -- - I create a salary structure for "Software Developer" -- - !record {model: hr.payroll.structure, id: hr_payroll_structure_softwaredeveloper}: - name: Salary Structure for Software Developer - code: SD - company_id: base.main_company - rule_ids: - - hr_salary_rule_houserentallowance1 - - hr_salary_rule_convanceallowance1 - - hr_salary_rule_professionaltax1 - - hr_salary_rule_providentfund1 - - hr_salary_rule_meal_voucher - - hr_salary_rule_sales_commission -- - I create a contract for "Richard" -- - !record {model: hr.contract, id: hr_contract_richard}: - date_end: !eval "(datetime.now() + timedelta(days=365)).strftime('%Y-%m-%d')" - date_start: !eval time.strftime('%Y-%m-%d') - name: Contract for Richard - wage: 5000.0 - type_id: hr_contract.hr_contract_type_emp - employee_id: hr_employee_richard0 - struct_id: hr_payroll_structure_softwaredeveloper - working_hours: resource.timesheet_group1 -- - I create a Employee Payslip -- - !record {model: hr.payslip, id: hr_payslip_0}: - employee_id: hr_payroll.hr_employee_richard0 -- - I assign the amount to Input data -- - !python {model: hr.payslip.input}: | - ids = self.search(cr, uid, [('payslip_id', '=', ref("hr_payslip_0"))]) - self.write(cr, uid, ids, {'amount': 5.0}) -- - I verify the payslip is in draft state -- - !python {model: hr.payslip}: | - payslip_brw=self.browse(cr, uid, ref("hr_payslip_0")) - assert (payslip_brw.state == 'draft'), 'State not changed!' -- - I click on 'Compute Sheet' button on payslip -- - !python {model: hr.payslip}: | - self.compute_sheet(cr, uid, [ref("hr_payslip_0")], {"lang": "en_US", "tz": False, - "active_model": "ir.ui.menu", "department_id": False, "active_ids": [ref("hr_payroll.menu_department_tree")], - "section_id": False, "active_id": ref("hr_payroll.menu_department_tree"), - }) -- - Then I click on the 'Confirm' button on payslip -- - !workflow {model: hr.payslip, action: hr_verify_sheet, ref: hr_payslip_0} -- - I verify that the payslip is in done state -- - !python {model: hr.payslip}: | - payslip_brw=self.browse(cr, uid, ref("hr_payslip_0")) - assert(payslip_brw.state == 'done'), 'State not changed!' -- - I want to check refund payslip so I click on refund button. -- - !python {model: hr.payslip}: | - self.refund_sheet(cr, uid, [ref("hr_payslip_0")], None) -- - I check on new payslip Credit Note is checked or not. -- - !python {model: hr.payslip}: | - payslip_obj = self.browse(cr, uid, ref("hr_payslip_0"), None) - payslip_ids = self.search(cr, uid, [('name','like','Refund: '+payslip_obj.name),('credit_note','=',True)], None) - assert payslip_ids, "Payslip not refunded!" -- - I want to generate a payslip from Payslip run. -- - !record {model: hr.payslip.run, id: hr_payslip_run_PayslipforEmployee0}: - date_end: '2011-09-30' - date_start: '2011-09-01' - name: Payslip for Employee -- - I create record for generating the payslip for this Payslip run. -- - !record {model: hr.payslip.employees, id: hr_payslip_employees0}: - employee_ids: - - hr_employee_richard0 -- - I generate the payslip by clicking on Generat button wizard. -- - !python {model: hr.payslip.employees}: | - self.compute_sheet(cr, uid, [ref('hr_payslip_employees0')], context={'active_id': ref('hr_payslip_run_PayslipforEmployee0')}) -- - I open Contribution Register and from there I print the Payslip Lines report. -- - !record {model: payslip.lines.contribution.register, id: payslip_lines_contribution_register0}: - date_from: '2011-09-30' - date_to: '2011-09-01' -- - I print the payslip report -- - !python {model: hr.payslip}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('hr_payslip_0')], 'hr_payroll.report_payslip', {}, {}) - if tools.config['test_report_directory']: - file(os.path.join(tools.config['test_report_directory'], 'hr_payroll-payslip.'+format), 'wb+').write(data) -- - I print the payslip details report -- - !python {model: hr.payslip}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('hr_payslip_0')], 'hr_payroll.report_payslipdetails', {}, {}) - if tools.config['test_report_directory']: - file(os.path.join(tools.config['test_report_directory'], 'hr_payroll-payslipdetails.'+format), 'wb+').write(data) -- - I print the contribution register report -- - !python {model: hr.contribution.register}: | - ctx={'model': 'hr.contribution.register', 'active_ids': [ref('hr_houserent_register')]} - from openerp.tools import test_reports - test_reports.try_report_action(cr, uid, 'action_payslip_lines_contribution_register', context=ctx, our_module='hr_payroll') diff --git a/addons/hr_payroll/tests/__init__.py b/addons/hr_payroll/tests/__init__.py new file mode 100644 index 00000000000..530540f8158 --- /dev/null +++ b/addons/hr_payroll/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_payslip_flow diff --git a/addons/hr_payroll/tests/common.py b/addons/hr_payroll/tests/common.py new file mode 100644 index 00000000000..c01128d11e4 --- /dev/null +++ b/addons/hr_payroll/tests/common.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from datetime import datetime, timedelta + +from odoo.fields import Date +from odoo.tests.common import TransactionCase + + +class TestPayslipBase(TransactionCase): + + def setUp(self): + super(TestPayslipBase, self).setUp() + + # Some salary rules references + self.hra_rule_id = self.ref('hr_payroll.hr_salary_rule_houserentallowance1') + self.conv_rule_id = self.ref('hr_payroll.hr_salary_rule_convanceallowance1') + self.prof_tax_rule_id = self.ref('hr_payroll.hr_salary_rule_professionaltax1') + self.pf_rule_id = self.ref('hr_payroll.hr_salary_rule_providentfund1') + self.mv_rule_id = self.ref('hr_payroll.hr_salary_rule_meal_voucher') + self.comm_rule_id = self.ref('hr_payroll.hr_salary_rule_sales_commission') + + # I create a new employee "Richard" + self.richard_emp = self.env['hr.employee'].create({ + 'name': 'Richard', + 'gender': 'male', + 'birthday': '1984-05-01', + 'country_id': self.ref('base.be'), + 'department_id': self.ref('hr.dep_rd') + }) + + # I create a salary structure for "Software Developer" + self.developer_pay_structure = self.env['hr.payroll.structure'].create({ + 'name': 'Salary Structure for Software Developer', + 'code': 'SD', + 'company_id': self.ref('base.main_company'), + 'rule_ids': [(4, [self.hra_rule_id, self.conv_rule_id, self.prof_tax_rule_id, self.pf_rule_id, self.mv_rule_id, self.comm_rule_id])] + }) + + # I create a contract for "Richard" + self.env['hr.contract'].create({ + 'date_end': Date.to_string((datetime.now() + timedelta(days=365))), + 'date_start': Date.today(), + 'name': 'Contract for Richard', + 'wage': 5000.0, + 'type_id': self.ref('hr_contract.hr_contract_type_emp'), + 'employee_id': self.richard_emp.id, + 'struct_id': self.developer_pay_structure.id, + 'working_hours': self.ref('resource.timesheet_group1') + }) diff --git a/addons/hr_payroll/tests/test_payslip_flow.py b/addons/hr_payroll/tests/test_payslip_flow.py new file mode 100644 index 00000000000..a10c29dfca9 --- /dev/null +++ b/addons/hr_payroll/tests/test_payslip_flow.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import os +from datetime import datetime +from dateutil.relativedelta import relativedelta + +from odoo.report import render_report +from odoo.tools import config, test_reports +from odoo.addons.hr_payroll.tests.common import TestPayslipBase + + +class TestPayslipFlow(TestPayslipBase): + + def test_00_payslip_flow(self): + """ Testing payslip flow and report printing """ + # I create an employee Payslip + richard_payslip = self.env['hr.payslip'].create({ + 'name': 'Payslip of Richard', + 'employee_id': self.richard_emp.id + }) + + payslip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', richard_payslip.id)]) + # I assign the amount to Input data + payslip_input.write({'amount': 5.0}) + + # I verify the payslip is in draft state + self.assertEqual(richard_payslip.state, 'draft', 'State not changed!') + + context = { + "lang": "en_US", "tz": False, "active_model": "ir.ui.menu", + "department_id": False, "section_id": False, + "active_ids": [self.ref("hr_payroll.menu_department_tree")], + "active_id": self.ref("hr_payroll.menu_department_tree") + } + # I click on 'Compute Sheet' button on payslip + richard_payslip.with_context(context).compute_sheet() + + # Then I click on the 'Confirm' button on payslip + richard_payslip.signal_workflow('hr_verify_sheet') + + # I verify that the payslip is in done state + self.assertEqual(richard_payslip.state, 'done', 'State not changed!') + + # I want to check refund payslip so I click on refund button. + richard_payslip.refund_sheet() + + # I check on new payslip Credit Note is checked or not. + payslip_refund = self.env['hr.payslip'].search([('name', 'like', 'Refund: '+ richard_payslip.name), ('credit_note', '=', True)]) + self.assertTrue(bool(payslip_refund), "Payslip not refunded!") + + # I want to generate a payslip from Payslip run. + payslip_run = self.env['hr.payslip.run'].create({ + 'date_end': '2011-09-30', + 'date_start': '2011-09-01', + 'name': 'Payslip for Employee' + }) + + # I create record for generating the payslip for this Payslip run. + + payslip_employee = self.env['hr.payslip.employees'].create({ + 'employee_ids': [(4, self.richard_emp.ids)] + }) + + # I generate the payslip by clicking on Generat button wizard. + payslip_employee.with_context(active_id=payslip_run.id).compute_sheet() + + # I open Contribution Register and from there I print the Payslip Lines report. + self.env['payslip.lines.contribution.register'].create({ + 'date_from': '2011-09-30', + 'date_to': '2011-09-01' + }) + + # I print the payslip report + data, format = render_report(self.env.cr, self.env.uid, richard_payslip.ids, 'hr_payroll.report_payslip', {}, {}) + if config.get('test_report_directory'): + file(os.path.join(config['test_report_directory'], 'hr_payroll-payslip.'+ format), 'wb+').write(data) + + # I print the payslip details report + data, format = render_report(self.env.cr, self.env.uid, richard_payslip.ids, 'hr_payroll.report_payslipdetails', {}, {}) + if config.get('test_report_directory'): + file(os.path.join(config['test_report_directory'], 'hr_payroll-payslipdetails.'+ format), 'wb+').write(data) + + # I print the contribution register report + context = {'model': 'hr.contribution.register', 'active_ids': [self.ref('hr_payroll.hr_houserent_register')]} + test_reports.try_report_action(self.env.cr, self.env.uid, 'action_payslip_lines_contribution_register', context=context, our_module='hr_payroll')