parent
ac1c3572e8
commit
7f6c8129e5
|
@ -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)
|
||||
|
||||
|
|
|
@ -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…
Reference in New Issue