Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMP] hr_holidays: Improve business tests #28323

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions addons/hr_holidays/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
from . import test_holidays_flow
from . import test_hr_leave_type
from . import test_accrual_allocations
from . import test_leave_requests
64 changes: 60 additions & 4 deletions addons/hr_holidays/tests/test_access_rights.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from odoo import tests
from odoo.addons.hr_holidays.tests.common import TestHrHolidaysBase
from odoo.exceptions import AccessError, UserError
from odoo.exceptions import AccessError, ValidationError, UserError
from odoo.tools import mute_logger


Expand Down Expand Up @@ -117,6 +117,24 @@ def test_leave_update_hr_by_user_other(self):
with self.assertRaises(AccessError):
other_leave.sudo(self.user_employee_id).write({'name': 'Crocodile Dundee is my man'})

# ----------------------------------------
# Creation
# ----------------------------------------

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_creation_for_other_user(self):
""" Employee cannot creates a leave request for another employee """
HolidaysEmployeeGroup = self.env['hr.leave'].sudo(self.user_employee_id)
with self.assertRaises(AccessError):
HolidaysEmployeeGroup.create({
'name': 'Hol10',
'employee_id': self.employee_hruser_id,
'holiday_status_id': self.leave_type.id,
'date_from': (datetime.today() - relativedelta(days=1)),
'date_to': datetime.today(),
'number_of_days': 1,
})

# ----------------------------------------
# Reset
# ----------------------------------------
Expand All @@ -137,7 +155,7 @@ def test_leave_reset_by_manager(self):

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_reset_by_manager_other(self):
""" Manager may not reset other leaves """
""" Manager may reset other leaves """
self.employee_leave.sudo(self.user_hrmanager).action_draft()

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
Expand Down Expand Up @@ -187,41 +205,49 @@ def test_leave_reset_by_user_other(self):
@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_manager(self):
""" Manager validates hr-only leaves """
self.assertEqual(self.employee_leave.state, 'confirm')
self.employee_leave.sudo(self.user_hrmanager_id).action_approve()
self.assertEqual(self.employee_leave.state, 'validate')

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_officer_department(self):
""" Officer validates hr-only leaves for co-workers """
self.assertEqual(self.employee_leave.state, 'confirm')
self.employee_leave.sudo(self.user_hruser).action_approve()
self.assertEqual(self.employee_leave.state, 'validate')

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_officer_no_department(self):
""" Officer validates hr-only leaves for workers from no department and with no manager """
self.employee_hruser.write({'department_id': False})
# TDE FIXME: not sure for this one
# self.employee_leave.sudo(self.user_hruser).action_approve()
with self.assertRaises(AccessError):
self.employee_leave.sudo(self.user_hruser).action_approve()

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_officer_other_department_with_manager(self):
""" Officer may not validate hr-only leaves for workers from another department that has a manager """
self.employee_hruser.write({'department_id': self.hr_dept.id})
with self.assertRaises(AccessError):
self.employee_leave.sudo(self.user_hruser).action_approve()
self.assertEqual(self.employee_leave.state, 'confirm')

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_officer_other_department_wo_manager(self):
""" Officer may not validate hr-only leaves for workers from another department that has no manager """
self.employee_hruser.write({'department_id': self.hr_dept.id})
with self.assertRaises(AccessError):
self.employee_leave.sudo(self.user_hruser).action_approve()
self.assertEqual(self.employee_leave.state, 'confirm')

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_officer_other_department_manager(self):
""" Officer validates hr-only leaves for workers from another department that he manages """
self.employee_hruser.write({'department_id': self.hr_dept.id})
self.employee_leave.sudo().department_id.write({'manager_id': self.employee_hruser.id})

self.assertEqual(self.employee_leave.state, 'confirm')
self.employee_leave.sudo(self.user_hruser).action_approve()
self.assertEqual(self.employee_leave.state, 'validate')

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validation_hr_by_user(self):
Expand All @@ -232,6 +258,36 @@ def test_leave_validation_hr_by_user(self):
with self.assertRaises(UserError):
self.employee_leave.sudo(self.user_employee_id).write({'state': 'validate'})

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validate_by_manager(self):
""" Manager (who has no manager) validate its own leaves """
manager_leave = self.env['hr.leave'].sudo(self.user_hrmanager_id).create({
'name': 'Hol manager',
'holiday_status_id': self.leave_type.id,
'employee_id': self.employee_hrmanager_id,
'date_from': (datetime.today() + relativedelta(days=15)),
'date_to': (datetime.today() + relativedelta(days=16)),
'number_of_days': 1,
})
self.assertEqual(manager_leave.state, 'confirm')
manager_leave.action_approve()
self.assertEqual(manager_leave.state, 'validate')

@mute_logger('odoo.models.unlink', 'odoo.addons.mail.models.mail_mail')
def test_leave_validate_by_manager_2(self):
""" Manager (who has also a manager) validate its own leaves """
manager_leave2 = self.env['hr.leave'].sudo(self.user_hrmanager_2_id).create({
'name': 'Hol manager2',
'holiday_status_id': self.leave_type.id,
'employee_id': self.employee_hrmanager_2_id,
'date_from': (datetime.today() + relativedelta(days=15)),
'date_to': (datetime.today() + relativedelta(days=16)),
'number_of_days': 1,
})
self.assertEqual(manager_leave2.state, 'confirm')
manager_leave2.action_approve()
self.assertEqual(manager_leave2.state, 'validate')

# ----------------------------------------
# Validation: one validation, manager
# ----------------------------------------
Expand Down