diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_contract/tests | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/hr_contract/tests')
| -rw-r--r-- | addons/hr_contract/tests/__init__.py | 6 | ||||
| -rw-r--r-- | addons/hr_contract/tests/common.py | 17 | ||||
| -rw-r--r-- | addons/hr_contract/tests/test_auto_status.py | 69 | ||||
| -rw-r--r-- | addons/hr_contract/tests/test_calendar_sync.py | 69 | ||||
| -rw-r--r-- | addons/hr_contract/tests/test_contract.py | 91 |
5 files changed, 252 insertions, 0 deletions
diff --git a/addons/hr_contract/tests/__init__.py b/addons/hr_contract/tests/__init__.py new file mode 100644 index 00000000..d798e533 --- /dev/null +++ b/addons/hr_contract/tests/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_auto_status +from . import test_contract +from . import test_calendar_sync diff --git a/addons/hr_contract/tests/common.py b/addons/hr_contract/tests/common.py new file mode 100644 index 00000000..a50534ab --- /dev/null +++ b/addons/hr_contract/tests/common.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests.common import SavepointCase + + +class TestContractCommon(SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestContractCommon, cls).setUpClass() + + cls.employee = cls.env['hr.employee'].create({ + 'name': 'Richard', + 'gender': 'male', + 'country_id': cls.env.ref('base.be').id, + }) diff --git a/addons/hr_contract/tests/test_auto_status.py b/addons/hr_contract/tests/test_auto_status.py new file mode 100644 index 00000000..54b5654d --- /dev/null +++ b/addons/hr_contract/tests/test_auto_status.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from datetime import date, datetime +from dateutil.relativedelta import relativedelta +from odoo.addons.hr_contract.tests.common import TestContractCommon + + +class TestHrContracts(TestContractCommon): + + @classmethod + def setUpClass(cls): + super(TestHrContracts, cls).setUpClass() + cls.contracts = cls.env['hr.contract'].with_context(tracking_disable=True) + cls.test_contract = dict(name='Test', wage=1, employee_id=cls.employee.id, state='open') + + def test_employee_contractwarning(self): + self.assertEqual(self.employee.contract_warning, True) + + def apply_cron(self): + self.env.ref('hr_contract.ir_cron_data_contract_update_state').method_direct_trigger() + + def test_contract_enddate(self): + self.test_contract.update(dict(date_end=datetime.now() + relativedelta(days=100))) + self.contract = self.contracts.create(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'open') + self.assertEqual(self.contract.kanban_state, 'normal') + self.assertEqual(self.employee.contract_warning, False) + + self.test_contract.update(dict(date_end=datetime.now() + relativedelta(days=5))) + self.contract.write(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'open') + self.assertEqual(self.contract.kanban_state, 'blocked') + + self.test_contract.update({ + 'date_start': datetime.now() + relativedelta(days=-50), + 'date_end': datetime.now() + relativedelta(days=-1), + 'state': 'open', + 'kanban_state': 'blocked', + }) + self.contract.write(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'close') + + def test_contract_pending_visa_expire(self): + self.employee.visa_expire = date.today() + relativedelta(days=30) + self.test_contract.update(dict(date_end=False)) + self.contract = self.contracts.create(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'open') + self.assertEqual(self.contract.kanban_state, 'blocked') + + self.employee.visa_expire = date.today() + relativedelta(days=-5) + self.test_contract.update({ + 'date_start': datetime.now() + relativedelta(days=-50), + 'state': 'open', + 'kanban_state': 'blocked', + }) + self.contract.write(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'close') + + def test_contract_start_date(self): + self.test_contract.update(dict(date_start=datetime.now(), state='draft', kanban_state='done')) + self.contract = self.contracts.create(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'open') diff --git a/addons/hr_contract/tests/test_calendar_sync.py b/addons/hr_contract/tests/test_calendar_sync.py new file mode 100644 index 00000000..cecbe399 --- /dev/null +++ b/addons/hr_contract/tests/test_calendar_sync.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.fields import Datetime, Date +from odoo.addons.hr_contract.tests.common import TestContractCommon + + +class TestContractCalendars(TestContractCommon): + + @classmethod + def setUpClass(cls): + super(TestContractCalendars, cls).setUpClass() + cls.calendar_richard = cls.env['resource.calendar'].create({'name': 'Calendar of Richard'}) + cls.employee.resource_calendar_id = cls.calendar_richard + + cls.calendar_35h = cls.env['resource.calendar'].create({'name': '35h calendar'}) + cls.calendar_35h._onchange_hours_per_day() # update hours/day + + cls.contract_cdd = cls.env['hr.contract'].create({ + 'date_end': Date.to_date('2015-11-15'), + 'date_start': Date.to_date('2015-01-01'), + 'name': 'First CDD Contract for Richard', + 'resource_calendar_id': cls.calendar_35h.id, + 'wage': 5000.0, + 'employee_id': cls.employee.id, + 'state': 'close', + }) + + def test_contract_state_incoming_to_open(self): + # Employee's calendar should change + self.assertEqual(self.employee.resource_calendar_id, self.calendar_richard) + self.contract_cdd.state = 'open' + self.assertEqual(self.employee.resource_calendar_id, self.contract_cdd.resource_calendar_id, "The employee should have the calendar of its contract.") + + def test_contract_transfer_leaves(self): + + def create_calendar_leave(start, end, resource=None): + return self.env['resource.calendar.leaves'].create({ + 'name': 'leave name', + 'date_from': start, + 'date_to': end, + 'resource_id': resource.id if resource else None, + 'calendar_id': self.employee.resource_calendar_id.id, + 'time_type': 'leave', + }) + + start = Datetime.to_datetime('2015-11-17 07:00:00') + end = Datetime.to_datetime('2015-11-20 18:00:00') + leave1 = create_calendar_leave(start, end, resource=self.employee.resource_id) + + start = Datetime.to_datetime('2015-11-25 07:00:00') + end = Datetime.to_datetime('2015-11-28 18:00:00') + leave2 = create_calendar_leave(start, end, resource=self.employee.resource_id) + + # global leave + start = Datetime.to_datetime('2015-11-25 07:00:00') + end = Datetime.to_datetime('2015-11-28 18:00:00') + leave3 = create_calendar_leave(start, end) + + self.calendar_richard.transfer_leaves_to(self.calendar_35h, resources=self.employee.resource_id, from_date=Date.to_date('2015-11-21')) + + self.assertEqual(leave1.calendar_id, self.calendar_richard, "It should stay in Richard's calendar") + self.assertEqual(leave3.calendar_id, self.calendar_richard, "Global leave should stay in original calendar") + self.assertEqual(leave2.calendar_id, self.calendar_35h, "It should be transfered to the other calendar") + + # Transfer global leaves + self.calendar_richard.transfer_leaves_to(self.calendar_35h, resources=None, from_date=Date.to_date('2015-11-21')) + + self.assertEqual(leave3.calendar_id, self.calendar_35h, "Global leave should be transfered")
\ No newline at end of file diff --git a/addons/hr_contract/tests/test_contract.py b/addons/hr_contract/tests/test_contract.py new file mode 100644 index 00000000..7f4b9ed8 --- /dev/null +++ b/addons/hr_contract/tests/test_contract.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from datetime import datetime, date +from odoo.exceptions import ValidationError +from odoo.addons.hr_contract.tests.common import TestContractCommon + + +class TestHrContracts(TestContractCommon): + + @classmethod + def setUpClass(cls): + super(TestHrContracts, cls).setUpClass() + cls.contracts = cls.env['hr.contract'].with_context(tracking_disable=True) + + def create_contract(self, state, kanban_state, start, end=None): + return self.env['hr.contract'].create({ + 'name': 'Contract', + 'employee_id': self.employee.id, + 'state': state, + 'kanban_state': kanban_state, + 'wage': 1, + 'date_start': start, + 'date_end': end, + }) + + def test_incoming_overlapping_contract(self): + start = datetime.strptime('2015-11-01', '%Y-%m-%d').date() + end = datetime.strptime('2015-11-30', '%Y-%m-%d').date() + self.create_contract('open', 'normal', start, end) + + # Incoming contract + with self.assertRaises(ValidationError, msg="It should not create two contract in state open or incoming"): + start = datetime.strptime('2015-11-15', '%Y-%m-%d').date() + end = datetime.strptime('2015-12-30', '%Y-%m-%d').date() + self.create_contract('draft', 'done', start, end) + + def test_pending_overlapping_contract(self): + start = datetime.strptime('2015-11-01', '%Y-%m-%d').date() + end = datetime.strptime('2015-11-30', '%Y-%m-%d').date() + self.create_contract('open', 'normal', start, end) + + # Pending contract + with self.assertRaises(ValidationError, msg="It should not create two contract in state open or pending"): + start = datetime.strptime('2015-11-15', '%Y-%m-%d').date() + end = datetime.strptime('2015-12-30', '%Y-%m-%d').date() + self.create_contract('open', 'blocked', start, end) + + # Draft contract -> should not raise + start = datetime.strptime('2015-11-15', '%Y-%m-%d').date() + end = datetime.strptime('2015-12-30', '%Y-%m-%d').date() + self.create_contract('draft', 'normal', start, end) + + def test_draft_overlapping_contract(self): + start = datetime.strptime('2015-11-01', '%Y-%m-%d').date() + end = datetime.strptime('2015-11-30', '%Y-%m-%d').date() + self.create_contract('open', 'normal', start, end) + + # Draft contract -> should not raise even if overlapping + start = datetime.strptime('2015-11-15', '%Y-%m-%d').date() + end = datetime.strptime('2015-12-30', '%Y-%m-%d').date() + self.create_contract('draft', 'normal', start, end) + + def test_overlapping_contract_no_end(self): + + # No end date + self.create_contract('open', 'normal', datetime.strptime('2015-11-01', '%Y-%m-%d').date()) + + with self.assertRaises(ValidationError): + start = datetime.strptime('2015-11-15', '%Y-%m-%d').date() + end = datetime.strptime('2015-12-30', '%Y-%m-%d').date() + self.create_contract('draft', 'done', start, end) + + def test_overlapping_contract_no_end2(self): + + start = datetime.strptime('2015-11-01', '%Y-%m-%d').date() + end = datetime.strptime('2015-12-30', '%Y-%m-%d').date() + self.create_contract('open', 'normal', start, end) + + with self.assertRaises(ValidationError): + # No end + self.create_contract('draft', 'done', datetime.strptime('2015-01-01', '%Y-%m-%d').date()) + + def test_set_employee_contract_create(self): + contract = self.create_contract('open', 'normal', date(2018, 1, 1), date(2018, 1, 2)) + self.assertEqual(self.employee.contract_id, contract) + + def test_set_employee_contract_write(self): + contract = self.create_contract('draft', 'normal', date(2018, 1, 1), date(2018, 1, 2)) + contract.state = 'open' + self.assertEqual(self.employee.contract_id, contract) |
