From 943c59b2be972b7c38dc347873bc3394dd04deb6 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Tue, 12 Jan 2021 10:51:52 +0100 Subject: [PATCH] [FIX] base_report_to_printer: Fixed tests --- .travis.yml | 2 ++ .../models/ir_actions_report.py | 6 ++--- .../models/printing_server.py | 5 ++--- .../tests/test_ir_actions_report.py | 10 +++++---- .../tests/test_printing_job.py | 2 +- .../tests/test_printing_printer.py | 3 +-- .../tests/test_printing_printer_tray.py | 3 +-- .../tests/test_printing_printer_wizard.py | 4 ++-- .../tests/test_printing_server.py | 20 ++++++++++++++--- base_report_to_printer/tests/test_report.py | 22 +++++++++---------- .../tests/test_res_users.py | 2 -- 11 files changed, 46 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5e8e3a6..077980b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,8 @@ addons: apt: packages: - expect-dev # provides unbuffer utility + - cups + - libcups2-dev stages: - test diff --git a/base_report_to_printer/models/ir_actions_report.py b/base_report_to_printer/models/ir_actions_report.py index 0d0bf63..ef4de0a 100644 --- a/base_report_to_printer/models/ir_actions_report.py +++ b/base_report_to_printer/models/ir_actions_report.py @@ -100,7 +100,7 @@ class IrActionsReport(models.Model): """ Print a document, do not return the document file """ document, doc_format = self.with_context( must_skip_send_to_printer=True - ).render_qweb_pdf(record_ids, data=data) + )._render_qweb_pdf(record_ids, data=data) behaviour = self.behaviour() printer = behaviour.pop("printer", None) @@ -129,13 +129,13 @@ class IrActionsReport(models.Model): res["id"] = self.id return res - def render_qweb_pdf(self, res_ids=None, data=None): + def _render_qweb_pdf(self, res_ids=None, data=None): """Generate a PDF and returns it. If the action configured on the report is server, it prints the generated document as well. """ - document, doc_format = super().render_qweb_pdf(res_ids=res_ids, data=data) + document, doc_format = super()._render_qweb_pdf(res_ids=res_ids, data=data) behaviour = self.behaviour() printer = behaviour.pop("printer", None) diff --git a/base_report_to_printer/models/printing_server.py b/base_report_to_printer/models/printing_server.py index e38117e..ad84029 100644 --- a/base_report_to_printer/models/printing_server.py +++ b/base_report_to_printer/models/printing_server.py @@ -61,7 +61,7 @@ class PrintingServer(models.Model): servers = self.search(domain) res = True - for server in servers: + for server in servers.with_context(active_test=False): connection = server._open_connection(raise_on_error=raise_on_error) if not connection: server.printer_ids.write({"status": "server-error"}) @@ -71,8 +71,7 @@ class PrintingServer(models.Model): # Update Printers printers = connection.getPrinters() existing_printers = { - printer.system_name: printer - for printer in server.with_context(active_test=False).printer_ids + printer.system_name: printer for printer in server.printer_ids } updated_printers = [] for name, printer_info in printers.items(): diff --git a/base_report_to_printer/tests/test_ir_actions_report.py b/base_report_to_printer/tests/test_ir_actions_report.py index eee37ed..927fc0d 100644 --- a/base_report_to_printer/tests/test_ir_actions_report.py +++ b/base_report_to_printer/tests/test_ir_actions_report.py @@ -2,10 +2,12 @@ # Copyright 2016 SYLEAM # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import mock +from unittest import mock from odoo.tests.common import TransactionCase +model = "odoo.addons.base.models.ir_actions_report.IrActionsReport" + class TestIrActionsReportXml(TransactionCase): def setUp(self): @@ -53,14 +55,14 @@ class TestIrActionsReportXml(TransactionCase): def test_print_action_for_report_name_gets_report(self): """ It should get report by name """ - with mock.patch.object(self.Model, "_get_report_from_name") as mk: + with mock.patch("%s._get_report_from_name" % model) as mk: expect = "test" self.Model.print_action_for_report_name(expect) mk.assert_called_once_with(expect) def test_print_action_for_report_name_returns_if_no_report(self): """ It should return empty dict when no matching report """ - with mock.patch.object(self.Model, "_get_report_from_name") as mk: + with mock.patch("%s._get_report_from_name" % model) as mk: expect = "test" mk.return_value = False res = self.Model.print_action_for_report_name(expect) @@ -68,7 +70,7 @@ class TestIrActionsReportXml(TransactionCase): def test_print_action_for_report_name_returns_if_report(self): """ It should return correct serializable result for behaviour """ - with mock.patch.object(self.Model, "_get_report_from_name") as mk: + with mock.patch("%s._get_report_from_name" % model) as mk: res = self.Model.print_action_for_report_name("test") behaviour = mk().behaviour() expect = { diff --git a/base_report_to_printer/tests/test_printing_job.py b/base_report_to_printer/tests/test_printing_job.py index 0238864..df81201 100644 --- a/base_report_to_printer/tests/test_printing_job.py +++ b/base_report_to_printer/tests/test_printing_job.py @@ -1,7 +1,7 @@ # Copyright 2016 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import mock +from unittest import mock from odoo import fields from odoo.tests.common import TransactionCase diff --git a/base_report_to_printer/tests/test_printing_printer.py b/base_report_to_printer/tests/test_printing_printer.py index 0e01d05..2352766 100644 --- a/base_report_to_printer/tests/test_printing_printer.py +++ b/base_report_to_printer/tests/test_printing_printer.py @@ -2,8 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import tempfile - -import mock +from unittest import mock from odoo.exceptions import UserError from odoo.tests.common import TransactionCase diff --git a/base_report_to_printer/tests/test_printing_printer_tray.py b/base_report_to_printer/tests/test_printing_printer_tray.py index 6886aa1..22bbcc4 100644 --- a/base_report_to_printer/tests/test_printing_printer_tray.py +++ b/base_report_to_printer/tests/test_printing_printer_tray.py @@ -3,8 +3,7 @@ import errno import tempfile - -import mock +from unittest import mock from odoo.tests.common import TransactionCase diff --git a/base_report_to_printer/tests/test_printing_printer_wizard.py b/base_report_to_printer/tests/test_printing_printer_wizard.py index 2233e20..0914a8b 100644 --- a/base_report_to_printer/tests/test_printing_printer_wizard.py +++ b/base_report_to_printer/tests/test_printing_printer_wizard.py @@ -1,7 +1,7 @@ # Copyright 2016 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import mock +from unittest import mock from odoo.exceptions import UserError from odoo.tests.common import TransactionCase @@ -15,7 +15,7 @@ class StopTest(Exception): class TestPrintingPrinterWizard(TransactionCase): def setUp(self): - super(TestPrintingPrinterWizard, self).setUp() + super().setUp() self.Model = self.env["printing.printer.update.wizard"] self.server = self.env["printing.server"].create({}) self.printer_vals = { diff --git a/base_report_to_printer/tests/test_printing_server.py b/base_report_to_printer/tests/test_printing_server.py index f7c444e..324cf03 100644 --- a/base_report_to_printer/tests/test_printing_server.py +++ b/base_report_to_printer/tests/test_printing_server.py @@ -1,12 +1,13 @@ # Copyright 2016 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import mock +from unittest import mock from odoo import fields from odoo.tests.common import TransactionCase model = "odoo.addons.base_report_to_printer.models.printing_server" +model_base = "odoo.models.BaseModel" class TestPrintingServer(TransactionCase): @@ -69,14 +70,14 @@ class TestPrintingServer(TransactionCase): @mock.patch("%s.cups" % model) def test_update_printers_search(self, cups): """ It should search all when no domain """ - with mock.patch.object(self.Model, "search") as search: + with mock.patch("%s.search" % model_base) as search: self.Model.update_printers() search.assert_called_once_with([]) @mock.patch("%s.cups" % model) def test_update_printers_search_domain(self, cups): """ It should use specific domain for search """ - with mock.patch.object(self.Model, "search") as search: + with mock.patch("%s.search" % model_base) as search: expect = [("id", ">", 0)] self.Model.update_printers(expect) search.assert_called_once_with(expect) @@ -89,6 +90,19 @@ class TestPrintingServer(TransactionCase): self.Model.action_update_printers() self.assertEqual("unavailable", rec_id.status) + @mock.patch("%s.cups" % model) + def test_update_archived_printers(self, cups): + """ It should update status even if printer is archived """ + rec_id = self.new_printer() + rec_id.toggle_active() + self.server.refresh() + cups.Connection().getPrinters().get.return_value = False + self.Model.action_update_printers() + self.assertEqual( + "unavailable", + rec_id.status, + ) + @mock.patch("%s.cups" % model) def test_update_jobs_cron(self, cups): """ It should get all jobs from CUPS server """ diff --git a/base_report_to_printer/tests/test_report.py b/base_report_to_printer/tests/test_report.py index 72630da..23a73bc 100644 --- a/base_report_to_printer/tests/test_report.py +++ b/base_report_to_printer/tests/test_report.py @@ -2,14 +2,12 @@ # Copyright 2017 Tecnativa - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import mock +from unittest import mock from odoo import exceptions from odoo.tests import common -@common.at_install(False) -@common.post_install(True) class TestReport(common.HttpCase): def setUp(self): super(TestReport, self).setUp() @@ -20,21 +18,23 @@ class TestReport(common.HttpCase): "model": "ir.actions.report", "report_name": "Test Report", } - self.report_imd = self.env["ir.model.data"].create( - {"name": "test", "module": "base_report_to_printer", "model": "ir.ui.view"} - ) self.report_view = self.env["ir.ui.view"].create( { "name": "Test", "type": "qweb", - "xml_id": "base_report_to_printer.test", - "model_data_id": self.report_imd.id, "arch": """
Test
""", } ) - self.report_imd.res_id = self.report_view.id + self.report_imd = self.env["ir.model.data"].create( + { + "name": "test", + "module": "base_report_to_printer", + "model": "ir.ui.view", + "res_id": self.report_view.id, + } + ) self.report = self.Model.create( { "name": "Test", @@ -88,7 +88,7 @@ class TestReport(common.HttpCase): "printing_printer.PrintingPrinter." "print_document" ) as print_document: - self.report.render_qweb_pdf(self.partners.ids) + self.report._render_qweb_pdf(self.partners.ids) print_document.assert_not_called() def test_render_qweb_pdf_printable(self): @@ -100,7 +100,7 @@ class TestReport(common.HttpCase): ) as print_document: self.report.property_printing_action_id.action_type = "server" self.report.printing_printer_id = self.new_printer() - document = self.report.render_qweb_pdf(self.partners.ids) + document = self.report._render_qweb_pdf(self.partners.ids) print_document.assert_called_once_with( self.report, document[0], diff --git a/base_report_to_printer/tests/test_res_users.py b/base_report_to_printer/tests/test_res_users.py index 3e59dde..c64bed5 100644 --- a/base_report_to_printer/tests/test_res_users.py +++ b/base_report_to_printer/tests/test_res_users.py @@ -4,8 +4,6 @@ from odoo.tests import common -@common.at_install(False) -@common.post_install(True) class TestResUsers(common.TransactionCase): def setUp(self): super(TestResUsers, self).setUp()