diff --git a/auditlog/models/http_request.py b/auditlog/models/http_request.py index c4c6512aae5..6a9bd54fded 100644 --- a/auditlog/models/http_request.py +++ b/auditlog/models/http_request.py @@ -25,7 +25,10 @@ class AuditlogHTTPRequest(models.Model): @api.depends("create_date", "name") def _compute_display_name(self): for httprequest in self: - create_date = fields.Datetime.from_string(httprequest.create_date) + create_date = ( + fields.Datetime.from_string(httprequest.create_date) + or fields.Datetime.now() + ) tz_create_date = fields.Datetime.context_timestamp(httprequest, create_date) httprequest.display_name = "{} ({})".format( httprequest.name or "?", fields.Datetime.to_string(tz_create_date) diff --git a/auditlog/models/http_session.py b/auditlog/models/http_session.py index e64d29171be..2ea5c48e66b 100644 --- a/auditlog/models/http_session.py +++ b/auditlog/models/http_session.py @@ -20,7 +20,10 @@ class AuditlogtHTTPSession(models.Model): @api.depends("create_date", "user_id") def _compute_display_name(self): for httpsession in self: - create_date = fields.Datetime.from_string(httpsession.create_date) + create_date = ( + fields.Datetime.from_string(httpsession.create_date) + or fields.Datetime.now() + ) tz_create_date = fields.Datetime.context_timestamp(httpsession, create_date) httpsession.display_name = "{} ({})".format( httpsession.user_id and httpsession.user_id.name or "?", diff --git a/auditlog/tests/__init__.py b/auditlog/tests/__init__.py index 6542d081590..162e3f5b2c7 100644 --- a/auditlog/tests/__init__.py +++ b/auditlog/tests/__init__.py @@ -2,3 +2,4 @@ from . import common from . import test_auditlog from . import test_autovacuum +from . import test_http diff --git a/auditlog/tests/test_http.py b/auditlog/tests/test_http.py new file mode 100644 index 00000000000..2439457b844 --- /dev/null +++ b/auditlog/tests/test_http.py @@ -0,0 +1,44 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests.common import HttpCase, tagged + + +@tagged("post_install", "-at_install") +class TestAuditlogHttp(HttpCase): + def test_compute_display_name(self): + self.authenticate("admin", "admin") + rule = self.env["auditlog.rule"].create( + { + "name": "res.partner", + "model_id": self.env.ref("base.model_res_partner").id, + "log_type": "full", + "state": "subscribed", + } + ) + self.addCleanup(rule.unsubscribe) + partner = self.env.ref("base.partner_demo") + self.make_jsonrpc_request( + "/web/dataset/call_kw", + params={ + "model": "res.partner", + "method": "write", + "args": [partner.id, {"name": "test"}], + "kwargs": {}, + }, + headers={ + "Cookie": f"session_id={self.session.sid};", + }, + ) + logs = self.env["auditlog.log"].search( + [("model_id", "=", rule.model_id.id), ("res_id", "=", partner.id)] + ) + self.assertEqual(len(logs), 1) + http_request_id = logs[0]["http_request_id"] + self.assertRegex( + http_request_id.display_name, + r"/web/dataset/call_kw \(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\)", + ) + http_session_id = logs[0]["http_session_id"] + self.assertRegex( + http_session_id.display_name, + r"Mitchell Admin \(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\)", + )