From 689bdc0d2340a4cd37b6d9bf31b91328491b40fa Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Thu, 23 Feb 2017 10:09:38 +0100 Subject: [PATCH] [FIX] report_py3o: fix exception when report must be saved as attachement The mehtod must be called with a list of ids not with a list of browse records --- report_py3o/models/py3o_report.py | 2 +- report_py3o/tests/test_report_py3o.py | 29 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/report_py3o/models/py3o_report.py b/report_py3o/models/py3o_report.py index ccebbcb8..c0734ecd 100644 --- a/report_py3o/models/py3o_report.py +++ b/report_py3o/models/py3o_report.py @@ -321,7 +321,7 @@ class Py3oReport(models.TransientModel): model_instances = self.env[self.ir_actions_report_xml_id.model].browse( res_ids) save_in_attachment = self._check_attachment_use( - model_instances, self.ir_actions_report_xml_id) or {} + res_ids, self.ir_actions_report_xml_id) or {} reports_path = [] for model_instance in model_instances: reports_path.append( diff --git a/report_py3o/tests/test_report_py3o.py b/report_py3o/tests/test_report_py3o.py index 70e4a513..131cb563 100644 --- a/report_py3o/tests/test_report_py3o.py +++ b/report_py3o/tests/test_report_py3o.py @@ -2,6 +2,7 @@ # Copyright 2016 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).). +from base64 import b64decode import mock import os import pkg_resources @@ -88,6 +89,34 @@ class TestReportPy3o(TransactionCase): self.env.user.ids, report.report_name, {}) self.assertEqual(('test result', 'pdf'), res) + def test_report_post_process(self): + """ + By default the post_process method is in charge to save the + generated report into an ir.attachment if requested. + """ + report = self.env.ref("report_py3o.res_users_report_py3o") + report.attachment = "object.name + '.txt'" + py3o_server = self.env['py3o.server'].create({"url": "http://dummy"}) + # check the call to the fusion server + report.write({"py3o_filetype": "pdf", + "py3o_server_id": py3o_server.id}) + ir_attachment = self.env['ir.attachment'] + attachements = ir_attachment.search([(1, '=', 1)]) + with mock.patch('requests.post') as patched_post: + magick_response = mock.MagicMock() + magick_response.status_code = 200 + patched_post.return_value = magick_response + magick_response.iter_content.return_value = "test result" + res = report.render_report( + self.env.user.ids, report.report_name, {}) + self.assertEqual(('test result', 'pdf'), res) + attachements = ir_attachment.search([(1, '=', 1)]) - attachements + self.assertEqual(1, len(attachements.ids)) + self.assertEqual(self.env.user.name + '.txt', attachements.name) + self.assertEqual(self.env.user._name, attachements.res_model) + self.assertEqual(self.env.user.id, attachements.res_id) + self.assertEqual('test result', b64decode(attachements.datas)) + def test_report_template_configs(self): report = self.env.ref("report_py3o.res_users_report_py3o") # the demo template is specified with a relative path in in the module