205 lines
9.4 KiB
Python
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()
|