[IMP] base_report_to_printer: Fix XMLRPC calls and tests

- When added the patch to be able to configure report copies by report object, the expected signature changed to expect a report object. That can't work through the XMLRPC interface, so we revert it to what it was before: expecting the report name.
- Some tests that were producing warnings are muted now.
- The tests that had been changed went back to normal too.
- Current implementation didn't produce the expected results when actually forcing to print 1 copy.
- Added a demo report to test, since searching the database for the 1st unkonwn report found is not very deterministic and can lead to problems, like those addressed in #122 and #123.
- Finally, this update requires a database upgrade, so I pushed correctly the manifest version too.
This commit is contained in:
Jairo Llopis
2018-04-09 09:53:41 +01:00
committed by Jairo Llopis
parent a946a2a570
commit 3eb0c70acb
9 changed files with 70 additions and 16 deletions

View File

@@ -8,11 +8,11 @@
{
'name': "Report to printer",
'version': '10.0.1.0.4',
'version': '10.0.2.0.0',
'category': 'Generic Modules/Base',
'author': "Agile Business Group & Domsense, Pegueroles SCP, NaN, "
"LasLabs, Odoo Community Association (OCA)",
'website': 'http://www.agilebg.com',
"LasLabs, Tecnativa, Odoo Community Association (OCA)",
'website': 'https://github.com/OCA/report-print-send',
'license': 'AGPL-3',
"depends": ['report'],
'data': [
@@ -27,6 +27,9 @@
'views/ir_actions_report_xml_view.xml',
'wizards/printing_printer_update_wizard_view.xml',
],
'demo': [
'demo/report.xml',
],
'installable': True,
'application': True,
'external_dependencies': {

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2017 Tecnativa - Jairo Llopis
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<data>
<template id="report_1">
<h1 t-tranlsation="off">Dummy report just for tests</h1>
</template>
<report
id="action_report_1"
model="res.partner"
string="Demo Report 1"
report_type="qweb-pdf"
name="base_report_to_printer.report_1"
file="base_report_to_printer.report_1"
/>
</data>

View File

@@ -73,6 +73,7 @@ class PrintingPrinter(models.Model):
}
return vals
# TODO Rename param report to report_name, to make behavior obvious
@api.multi
def print_options(self, report=None, format=None, copies=1):
""" Hook to set print options """
@@ -83,8 +84,9 @@ class PrintingPrinter(models.Model):
options['copies'] = str(copies)
return options
# TODO Rename param report to report_name, to make behavior obvious
@api.multi
def print_document(self, report, content, format, copies=1):
def print_document(self, report, content, format, copies=None):
""" Print a file
Format could be pdf, qweb-pdf, raw, ...
@@ -96,17 +98,19 @@ class PrintingPrinter(models.Model):
os.write(fd, content)
finally:
os.close(fd)
if copies == 1:
report_obj = self.env["report"]._get_report_from_name(report)
if copies is None:
# If number of copies is not indicated by argument, check context
# or report definition
copies = (
self.env.context.get('report_copies') or
(report and report.report_copies) or
copies
report_obj.report_copies or
1
)
return self.print_file(
file_name, report=report, copies=copies, format=format)
# TODO Rename param report to report_name, to make behavior obvious
@api.multi
def print_file(self, file_name, report=None, copies=1, format=None):
""" Print a file """

View File

@@ -20,7 +20,11 @@ class Report(models.Model):
raise exceptions.Warning(
_('No printer configured to print this report.')
)
return printer.print_document(report, document, report.report_type)
return printer.print_document(
report_name,
document,
report.report_type,
)
@api.multi
def _can_print_report(self, behaviour, printer, document):
@@ -51,6 +55,6 @@ class Report(models.Model):
can_print_report = self._can_print_report(behaviour, printer, document)
if can_print_report:
printer.print_document(report, document, report.report_type)
printer.print_document(report_name, document, report.report_type)
return document

View File

@@ -6,6 +6,9 @@ import mock
from odoo import fields
from odoo.tests.common import TransactionCase
from odoo.tools import mute_logger
from ..models import printing_server
model = 'odoo.addons.base_report_to_printer.models.printing_server'
@@ -45,6 +48,7 @@ class TestPrintingJob(TransactionCase):
values['printer_id'] = printer.id
return self.env['printing.job'].create(values)
@mute_logger(printing_server.__name__)
@mock.patch('%s.cups' % model)
def test_cancel_job_error(self, cups):
""" It should catch any exception from CUPS and update status """

View File

@@ -8,6 +8,9 @@ import mock
from odoo.exceptions import UserError
from odoo.tests.common import TransactionCase
from odoo.tools import mute_logger
from ..models import printing_server
model = 'odoo.addons.base_report_to_printer.models.printing_printer'
@@ -32,9 +35,7 @@ class TestPrintingPrinter(TransactionCase):
'location': 'Location',
'uri': 'URI',
}
self.report = self.env['ir.actions.report.xml'].search([
('report_type', '=', 'qweb-pdf'),
], limit=1)
self.report = self.env.ref("base_report_to_printer.action_report_1")
def new_record(self):
return self.Model.create(self.printer_vals)
@@ -59,13 +60,18 @@ class TestPrintingPrinter(TransactionCase):
with mock.patch('%s.mkstemp' % model) as mkstemp:
mkstemp.return_value = fd, file_name
printer = self.new_record()
printer.print_document(self.report, 'content to print', 'pdf')
printer.print_document(
self.report.report_name,
'content to print',
'pdf',
)
cups.Connection().printFile.assert_called_once_with(
printer.system_name,
file_name,
file_name,
options={})
@mute_logger(printing_server.__name__)
@mock.patch('%s.cups' % server_model)
def test_print_report_error(self, cups):
""" It should print a report through CUPS """
@@ -76,7 +82,10 @@ class TestPrintingPrinter(TransactionCase):
printer = self.new_record()
with self.assertRaises(UserError):
printer.print_document(
self.report, 'content to print', 'pdf')
self.report.report_name,
'content to print',
'pdf',
)
@mock.patch('%s.cups' % server_model)
def test_print_file(self, cups):
@@ -90,6 +99,7 @@ class TestPrintingPrinter(TransactionCase):
file_name,
options={})
@mute_logger(printing_server.__name__)
@mock.patch('%s.cups' % server_model)
def test_print_file_error(self, cups):
""" It should print a file through CUPS """

View File

@@ -6,6 +6,9 @@ import mock
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError
from odoo.tools import mute_logger
from ..models import printing_server
model = 'odoo.addons.base_report_to_printer.models.printing_server'
@@ -55,6 +58,7 @@ class TestPrintingPrinterWizard(TransactionCase):
self.Model.action_ok()
cups.Connection().getPrinters.assert_called_once_with()
@mute_logger(printing_server.__name__)
@mock.patch('%s.cups' % model)
def test_action_ok_raises_warning_on_error(self, cups):
""" It should raise Warning on any error """

View File

@@ -6,6 +6,9 @@ import mock
from odoo import fields
from odoo.tests.common import TransactionCase
from odoo.tools import mute_logger
from ..models import printing_server
model = 'odoo.addons.base_report_to_printer.models.printing_server'
@@ -45,6 +48,7 @@ class TestPrintingServer(TransactionCase):
values['printer_id'] = printer.id
return self.env['printing.job'].create(values)
@mute_logger(printing_server.__name__)
@mock.patch('%s.cups' % model)
def test_update_printers_error(self, cups):
""" It should catch any exception from CUPS and update status """
@@ -140,6 +144,7 @@ class TestPrintingServer(TransactionCase):
],
)
@mute_logger(printing_server.__name__)
@mock.patch('%s.cups' % model)
def test_update_jobs_error(self, cups):
""" It should catch any exception from CUPS and update status """

View File

@@ -104,7 +104,7 @@ class TestReport(common.HttpCase):
document = self.Model.get_pdf(
self.partners.ids, self.report.report_name)
print_document.assert_called_once_with(
self.report, document, self.report.report_type)
self.report.report_name, document, self.report.report_type)
def test_print_document_not_printable(self):
""" It should print the report, regardless of the defined behaviour """