summaryrefslogtreecommitdiff
path: root/addons/hr_contract/tests
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/hr_contract/tests
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr_contract/tests')
-rw-r--r--addons/hr_contract/tests/__init__.py6
-rw-r--r--addons/hr_contract/tests/common.py17
-rw-r--r--addons/hr_contract/tests/test_auto_status.py69
-rw-r--r--addons/hr_contract/tests/test_calendar_sync.py69
-rw-r--r--addons/hr_contract/tests/test_contract.py91
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)