Browse Source

[FIX] report_py3o: must return the path to the report

refs #119
pull/258/head
Laurent Mignon (ACSONE) 7 years ago
parent
commit
860439b743
  1. 6
      report_py3o/models/py3o_report.py
  2. 47
      report_py3o/tests/test_report_py3o.py

6
report_py3o/models/py3o_report.py

@ -295,7 +295,11 @@ class Py3oReport(models.TransientModel):
'loaded_documents'].get(model_instance.id):
d = save_in_attachment[
'loaded_documents'].get(model_instance.id)
return d, self.ir_actions_report_xml_id.py3o_filetype
report_file = tempfile.mktemp(
"." + self.ir_actions_report_xml_id.py3o_filetype)
with open(report_file, "wb") as f:
f.write(d)
return report_file
return self._create_single_report(
model_instance, data, save_in_attachment)

47
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).).
import base64
from base64 import b64decode
import mock
import os
@ -106,6 +107,52 @@ class TestReportPy3o(TransactionCase):
self.env.user.ids, self.report.report_name, {})
self.assertEqual(('test result', 'pdf'), res)
def test_report_load_from_attachment(self):
py3o_report = self.env['py3o.report']
with mock.patch.object(
py3o_report.__class__, '_create_single_report') as patched_pdf:
result = tempfile.mktemp('.txt')
with open(result, 'w') as fp:
fp.write('dummy')
patched_pdf.return_value = result
# test the call the the create method inside our custom parser
self.report.render_report(self.env.user.ids,
self.report.report_name,
{})
self.assertEqual(1, patched_pdf.call_count)
# generated files no more exists
self.assertFalse(os.path.exists(result))
res = self.report.render_report(
self.env.user.ids, self.report.report_name, {})
self.assertTrue(res)
py3o_server = self.env['py3o.server'].create({"url": "http://dummy"})
# check the call to the fusion server
self.report.write({"py3o_filetype": "pdf",
"py3o_server_id": py3o_server.id,
"attachment_use": True,
"attachment": "'my_saved_report'"})
attachments = self.env['ir.attachment'].search([])
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 = self.report.render_report(
self.env.user.ids, self.report.report_name, {})
self.assertEqual(('test result', 'pdf'), res)
new_attachments = self.env['ir.attachment'].search([])
created_attachement = new_attachments - attachments
self.assertEqual(1, len(created_attachement))
content = b64decode(created_attachement.datas)
self.assertEqual("test result", content)
# put a new content into tha attachement and check that the next
# time we ask the report we received the saved attachment not a newly
# generated document
created_attachement.datas = base64.encodestring("new content")
res = self.report.render_report(
self.env.user.ids, self.report.report_name, {})
self.assertEqual(('new content', 'pdf'), res)
def test_report_post_process(self):
"""
By default the post_process method is in charge to save the

Loading…
Cancel
Save