Files
enterprise-addons/l10n_au_hr_payroll_api/tests/test_audit_logging.py
T

205 lines
9.4 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import date
from odoo.tests import tagged, Form, new_test_user
from .common import TestL10nAUPayrollAPICommon
@tagged("post_install_l10n", "post_install", "-at_install", "l10n_au_hr_payroll")
class TestAuditLogging(TestL10nAUPayrollAPICommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env["res.company"].create({
"name": "Australian Company ( test )",
"country_id": cls.env.ref("base.au").id,
"currency_id": cls.env.ref("base.AUD").id,
"l10n_au_registered_for_whm": True,
"l10n_au_registered_for_palm": True,
"vat": "85658499097",
})
cls.resource_calendar = cls.company.resource_calendar_id
cls.env.user.company_ids |= cls.company
cls.env = cls.env(context=dict(cls.env.context, allowed_company_ids=cls.company.ids))
cls.proxy_user = cls.env['account_edi_proxy_client.user']._register_proxy_user(cls.company, 'l10n_au_payroll', 'demo')
cls.proxy_user.edi_mode = 'test'
cls.env.user.tz = 'Australia/Sydney'
cls.resource_calendar_40_hours_per_week = cls.env['resource.calendar'].create([{
'name': "Test Calendar : 38 Hours/Week",
'company_id': cls.env.company.id,
'hours_per_day': 7.6,
'tz': "Australia/Sydney",
'two_weeks_calendar': False,
'hours_per_week': 38.0,
'full_time_required_hours': 38.0,
'attendance_ids': [(5, 0, 0)] + [(0, 0, {
'name': "Attendance",
'dayofweek': dayofweek,
'hour_from': hour_from,
'hour_to': hour_to,
'day_period': day_period,
'work_entry_type_id': cls.env.ref('hr_work_entry.work_entry_type_attendance').id
}) for dayofweek, hour_from, hour_to, day_period in [
("0", 8.0, 12.0, "morning"),
("0", 12.0, 13.0, "lunch"),
("0", 13.0, 16.6, "afternoon"),
("1", 8.0, 12.0, "morning"),
("1", 12.0, 13.0, "lunch"),
("1", 13.0, 16.6, "afternoon"),
("2", 8.0, 12.0, "morning"),
("2", 12.0, 13.0, "lunch"),
("2", 13.0, 16.6, "afternoon"),
("3", 8.0, 12.0, "morning"),
("3", 12.0, 13.0, "lunch"),
("3", 13.0, 16.6, "afternoon"),
("4", 8.0, 12.0, "morning"),
("4", 12.0, 13.0, "lunch"),
("4", 13.0, 16.6, "afternoon"),
]],
}])
cls.Logs = cls.env["l10n_au.audit.log"].sudo()
cls.employee_user_1 = new_test_user(cls.env, login='mel')
cls.employee_1 = cls.env["hr.employee"].create({
"name": "Mel Gibson",
"resource_calendar_id": cls.resource_calendar.id,
"company_id": cls.company.id,
"user_id": cls.employee_user_1.id,
"work_phone": "123456789",
"work_email": "mel@gmail.com",
"private_phone": "123456789",
"private_email": "mel@odoo.com",
"private_street": "1 Test Street",
"private_city": "Sydney",
"private_state_id": cls.env.ref("base.state_au_2").id,
"private_zip": "2000",
"private_country_id": cls.env.ref("base.au").id,
"birthday": date(2000, 1, 1),
"l10n_au_tfn_declaration": "provided",
"l10n_au_tfn": "999999661",
"l10n_au_tax_free_threshold": True,
"sex": "male",
})
cls.bank_cba = cls.env["res.bank"].create({
"name": "Commonwealth Bank of Australia",
"bic": "CTBAAU2S",
"country": cls.env.ref("base.au").id,
})
bank_account = cls.env['res.partner.bank'].create({
"bank_id": cls.bank_cba.id,
"acc_number": '12344321',
"acc_type": 'aba',
"aba_bsb": '123456',
"company_id": cls.company.id,
"partner_id": cls.company.partner_id.id,
})
cls.bank_journal = cls.env["account.journal"].create({
"name": "Payslip Bank",
"type": "bank",
"aba_fic": "CBA",
"aba_user_spec": "Test Ltd",
"aba_user_number": "111111",
"company_id": cls.company.id,
"bank_account_id": bank_account.id,
})
cls.hr_group = cls.env["res.groups"].create({
"name": "Test HR Group",
"privilege_id": cls.env.ref("hr_payroll.res_groups_privilege_payroll").id,
"implied_ids": cls.env.ref('base.group_user')
})
@classmethod
def setup_independent_company(cls, **kwargs):
return super().setup_independent_company(
vat='85658499097',
**kwargs,
)
def setUp(self):
super().setUp()
self.Logs.search([]).unlink()
def _get_logs(self, record):
logs = self.Logs.search([('log_description', 'ilike', f"(model: {record._name}, id:{record.id})")])
return logs.mapped('log_description')
def test_update_audit_logging(self):
self.company.vat = "83914571673"
company_logs = self._get_logs(self.company)
self.assertIn(
"%s - %s - %s was changed for %s by %s" % (self.company.l10n_au_bms_id,
self.company.name,
self.company._fields["vat"].string,
self.company._get_display_name(),
self.env.user.display_name),
company_logs[0],
)
def test_create_user_audit_logging(self):
test_group_user = self.env['res.users'].create({
'name': 'Test Group User',
'login': 'TestGroupUser',
'group_ids': self.hr_group,
'company_ids': self.company,
})
user_logs = self._get_logs(test_group_user)
log_message = "%s - %s - %s was changed for %s by %s" % (self.company.l10n_au_bms_id,
self.company.name,
test_group_user._fields["company_ids"].string,
test_group_user._get_display_name(),
self.env.user.display_name)
self.assertTrue(any(log_message in log for log in user_logs), "There should be a log for setting the company")
log_message = "%s - %s - %s was changed for %s by %s" % (self.company.l10n_au_bms_id,
self.company.name,
test_group_user._fields["password"].string,
test_group_user._get_display_name(),
self.env.user.display_name)
self.assertTrue(any(log_message in log for log in user_logs), "There should be a log for setting the company")
log_message = f"User Test Group User (model: res.users, id:{test_group_user.id}) was granted access to group Payroll / Test HR Group by OdooBot"
self.assertTrue(any(log_message in log for log in user_logs), "There should be a log for adding Payroll / Administrator group")
def test_user_groups_audit_logging(self):
user = self.employee_user_1
# Write on res.group user_ids
with self.with_user("admin"):
self.hr_group.user_ids += user
user_logs = self._get_logs(user)
log_message = f"User mel (base.group_user) (model: res.users, id:{user.id}) was granted access to group {self.hr_group.display_name} by {self.env.user.display_name}"
self.assertIn(log_message, user_logs[0], "There should be a log for adding Test HR Group group")
self.Logs.search([]).unlink()
# Write on res.users group_ids
with self.with_user("admin"):
user.group_ids -= self.hr_group
user_logs = self._get_logs(user)
log_message = f"User mel (base.group_user) (model: res.users, id:{user.id}) was removed from group {self.hr_group.display_name} by {self.env.user.display_name}"
self.assertIn(log_message, user_logs[0], "There should be a log for removing Test HR Group group")
def test_reified_groups_audit_logs(self):
"""Test that a change on a reified fields trigger the onchange of groups_id."""
group_payroll_manager = self.env.ref('hr_payroll.group_hr_payroll_manager')
user = self.employee_user_1
with self.debug_mode():
user_form = Form(user, view='base.view_users_form')
user_form["group_ids"] = group_payroll_manager
user_form.save()
user_logs = self._get_logs(user)
log_message = f"User mel (base.group_user) (model: res.users, id:{user.id}) was granted access to group Payroll / Administrator by {self.env.user.display_name}"
self.assertTrue(any(log_message in log for log in user_logs), "There should be a log for adding Payroll / Administrator group")
def test_sync_audit_logs(self):
self.company.vat = "83914571673"
with self.mock_register_request():
self._register_company()
with self.mock_audit_log_requests():
self.Logs._sync_audit_logs()