From cf9fb7986bc160a2e7da204d27e4e16916f69210 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 19 Jan 2018 17:22:37 +0000 Subject: [PATCH] [FIX] base_report_to_printer: Stateless tests (#123) If the test was run in a database with the `account` module installed, they were failing for 2 reasons: - It was searching for the first report it could find, with the first 5 records to report. This made it load the `account.report_agedpartnerbalance` report, which caused a fake `TypeError: 'NoneType' object has no attribute '__getitem__'` error. - It was running tests without loading the full module graph, thus not getting the default value for the new required `invoice_warn` field. Now tests are run in `post_install` mode to load full module graph, and they use stateless data. --- base_report_to_printer/README.rst | 1 + base_report_to_printer/i18n/fr.po | 6 +- base_report_to_printer/i18n/hr.po | 6 +- .../models/ir_actions_report.py | 2 - .../models/printing_printer.py | 1 - .../tests/test_ir_actions_report.py | 1 - .../tests/test_printing_printer.py | 1 - base_report_to_printer/tests/test_report.py | 83 ++++++++++--------- .../tests/test_res_users.py | 6 +- 9 files changed, 53 insertions(+), 54 deletions(-) diff --git a/base_report_to_printer/README.rst b/base_report_to_printer/README.rst index a47b4ed..4e49307 100644 --- a/base_report_to_printer/README.rst +++ b/base_report_to_printer/README.rst @@ -105,6 +105,7 @@ Contributors * Guewen Baconnier * Dave Lasley * Sylvain Garancher +* Jairo Llopis Maintainer ---------- diff --git a/base_report_to_printer/i18n/fr.po b/base_report_to_printer/i18n/fr.po index d27f601..b103f75 100644 --- a/base_report_to_printer/i18n/fr.po +++ b/base_report_to_printer/i18n/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-19 03:38+0000\n" -"PO-Revision-Date: 2017-12-19 03:38+0000\n" +"POT-Creation-Date: 2018-01-19 17:25+0000\n" +"PO-Revision-Date: 2018-01-19 17:25+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" "MIME-Version: 1.0\n" @@ -414,7 +414,7 @@ msgid "No data has been received" msgstr "" #. module: base_report_to_printer -#: code:addons/base_report_to_printer/models/ir_actions_report.py:113 +#: code:addons/base_report_to_printer/models/ir_actions_report.py:112 #, python-format msgid "No printer configured to print this report." msgstr "Pas d'imprimante configurée pour imprimer ce rapport." diff --git a/base_report_to_printer/i18n/hr.po b/base_report_to_printer/i18n/hr.po index 05f7fa0..626d821 100644 --- a/base_report_to_printer/i18n/hr.po +++ b/base_report_to_printer/i18n/hr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-12-19 03:38+0000\n" -"PO-Revision-Date: 2017-12-19 03:38+0000\n" +"POT-Creation-Date: 2018-01-19 17:25+0000\n" +"PO-Revision-Date: 2018-01-19 17:25+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" "MIME-Version: 1.0\n" @@ -414,7 +414,7 @@ msgid "No data has been received" msgstr "Nema zaprimljenih podataka" #. module: base_report_to_printer -#: code:addons/base_report_to_printer/models/ir_actions_report.py:113 +#: code:addons/base_report_to_printer/models/ir_actions_report.py:112 #, python-format msgid "No printer configured to print this report." msgstr "Nijedan pisač nije postavljen za ispis ovog izvještaja." diff --git a/base_report_to_printer/models/ir_actions_report.py b/base_report_to_printer/models/ir_actions_report.py index e6d078c..e316f06 100644 --- a/base_report_to_printer/models/ir_actions_report.py +++ b/base_report_to_printer/models/ir_actions_report.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (c) 2007 Ferran Pegueroles # Copyright (c) 2009 Albert Cervera i Areny # Copyright (C) 2011 Agile Business Group sagl () @@ -130,7 +129,6 @@ class IrActionsReport(models.Model): return True return False - @api.model def render_qweb_pdf(self, docids, data=None): """ Generate a PDF and returns it. diff --git a/base_report_to_printer/models/printing_printer.py b/base_report_to_printer/models/printing_printer.py index d2183a3..bccbb08 100644 --- a/base_report_to_printer/models/printing_printer.py +++ b/base_report_to_printer/models/printing_printer.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (c) 2007 Ferran Pegueroles # Copyright (c) 2009 Albert Cervera i Areny # Copyright (C) 2011 Agile Business Group sagl () 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 22c5c04..50b4dad 100644 --- a/base_report_to_printer/tests/test_ir_actions_report.py +++ b/base_report_to_printer/tests/test_ir_actions_report.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2016 LasLabs Inc. # Copyright 2016 SYLEAM # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/base_report_to_printer/tests/test_printing_printer.py b/base_report_to_printer/tests/test_printing_printer.py index c61d8a4..03ea2ad 100644 --- a/base_report_to_printer/tests/test_printing_printer.py +++ b/base_report_to_printer/tests/test_printing_printer.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2016 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/base_report_to_printer/tests/test_report.py b/base_report_to_printer/tests/test_report.py index c9b878b..f7ea6b3 100644 --- a/base_report_to_printer/tests/test_report.py +++ b/base_report_to_printer/tests/test_report.py @@ -1,18 +1,16 @@ # -*- coding: utf-8 -*- # Copyright 2016 LasLabs Inc. +# Copyright 2017 Tecnativa - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import mock -from odoo.tests.common import HttpCase +from odoo.tests import common from odoo import exceptions -class StopTest(Exception): - pass - - -class TestReport(HttpCase): - +@common.at_install(False) +@common.post_install(True) +class TestReport(common.HttpCase): def setUp(self): super(TestReport, self).setUp() self.Model = self.env['ir.actions.report'] @@ -22,6 +20,32 @@ class TestReport(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 = self.Model.create({ + "name": "Test", + "report_type": "qweb-pdf", + "model": "res.partner", + "report_name": "base_report_to_printer.test", + }) + self.partners = self.env["res.partner"] + for n in range(5): + self.partners += self.env["res.partner"].create({ + "name": "Test %d" % n, + }) def new_record(self): return self.Model.create(self.report_vals) @@ -69,11 +93,7 @@ class TestReport(HttpCase): with mock.patch('odoo.addons.base_report_to_printer.models.' 'printing_printer.PrintingPrinter.' 'print_document') as print_document: - report = self.env['ir.actions.report'].search([ - ('report_type', '=', 'qweb-pdf'), - ], limit=1) - records = self.env[report.model].search([], limit=5) - report.render_qweb_pdf(records.ids) + self.report.render_qweb_pdf(self.partners.ids) print_document.assert_not_called() def test_render_qweb_pdf_printable(self): @@ -82,52 +102,33 @@ class TestReport(HttpCase): with mock.patch('odoo.addons.base_report_to_printer.models.' 'printing_printer.PrintingPrinter.' 'print_document') as print_document: - report = self.env['ir.actions.report'].search([ - ('report_type', '=', 'qweb-pdf'), - ], limit=1) - report.property_printing_action_id.action_type = 'server' - report.printing_printer_id = self.new_printer() - records = self.env[report.model].search([], limit=5) - document, doc_format = report.render_qweb_pdf(records.ids) + 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) print_document.assert_called_once_with( - report, document, + self.report, document[0], action='server', doc_format='qweb-pdf', tray=False) def test_print_document_not_printable(self): """ It should print the report, regardless of the defined behaviour """ - report = self.env['ir.actions.report'].search([ - ('report_type', '=', 'qweb-pdf'), - ], limit=1) - report.printing_printer_id = self.new_printer() - records = self.env[report.model].search([], limit=5) - + self.report.printing_printer_id = self.new_printer() with mock.patch('odoo.addons.base_report_to_printer.models.' 'printing_printer.PrintingPrinter.' 'print_document') as print_document: - report.print_document(records.ids) + self.report.print_document(self.partners.ids) print_document.assert_called_once() def test_print_document_printable(self): """ It should print the report, regardless of the defined behaviour """ - report = self.env['ir.actions.report'].search([ - ('report_type', '=', 'qweb-pdf'), - ], limit=1) - report.property_printing_action_id.action_type = 'server' - report.printing_printer_id = self.new_printer() - records = self.env[report.model].search([], limit=5) - + self.report.property_printing_action_id.action_type = 'server' + self.report.printing_printer_id = self.new_printer() with mock.patch('odoo.addons.base_report_to_printer.models.' 'printing_printer.PrintingPrinter.' 'print_document') as print_document: - report.print_document(records.ids) + self.report.print_document(self.partners.ids) print_document.assert_called_once() def test_print_document_no_printer(self): """ It should raise an error """ - report = self.env['ir.actions.report'].search([ - ('report_type', '=', 'qweb-pdf'), - ], limit=1) - records = self.env[report.model].search([], limit=5) - with self.assertRaises(exceptions.UserError): - report.print_document(records.ids) + self.report.print_document(self.partners.ids) diff --git a/base_report_to_printer/tests/test_res_users.py b/base_report_to_printer/tests/test_res_users.py index a357c78..39b4de0 100644 --- a/base_report_to_printer/tests/test_res_users.py +++ b/base_report_to_printer/tests/test_res_users.py @@ -2,10 +2,12 @@ # Copyright 2016 LasLabs Inc. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo.tests.common import TransactionCase +from odoo.tests import common -class TestResUsers(TransactionCase): +@common.at_install(False) +@common.post_install(True) +class TestResUsers(common.TransactionCase): def setUp(self): super(TestResUsers, self).setUp()