Added custom options module for printers by report

corrections for travis tests

fix for flake8 errors and travis tests

added new sections and rapleced maintainers

added USAGE section in readme + bug corection for update of printers

changed copyrights

updated manifest and fix for case of false ppd
This commit is contained in:
qgigon
2019-12-05 15:33:05 +01:00
parent d2a59fa457
commit f3be3b151c
17 changed files with 862 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
# Copyright 2019 Compassion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import mock
import types
from odoo.tests.common import TransactionCase
server_model = 'odoo.addons.base_report_to_printer.models.printing_server'
class TestPrintingPrinter(TransactionCase):
def setUp(self):
super().setUp()
self.server = self.env['printing.server'].create({})
self.ServerModel = self.env['printing.server']
self.printer = self.env['printing.printer'].create({
'name': 'Printer',
'server_id': self.server.id,
'system_name': 'Sys Name',
'default': True,
'status': 'unknown',
'status_message': 'Msg',
'model': 'res.users',
'location': 'Location',
'uri': 'URI',
})
self.bin_option = self.env['printer.option.choice'].create({
'option_key': 'OutputBin',
'option_value': 'bin1',
'printer_id': self.printer.id,
})
self.printer_vals = {
'printer-info': 'Info',
'printer-make-and-model': 'Make and Model',
'printer-location': "location",
'device-uri': 'URI',
'printer-uri-supported': '/' + self.printer.system_name
}
def test_print_options__copies_options_from_report(self):
mock_report = mock.Mock()
mock_report.printer_options = [self.bin_option]
options = self.printer \
.print_options(report=mock_report)
self.assertEqual(options['OutputBin'], 'bin1')
def test_print_options__without_option(self):
mock_report = mock.Mock()
mock_report.printer_options = []
options = self.printer \
.print_options(report=mock_report)
self.assertEqual(options, {})
@mock.patch('%s.cups' % server_model)
def test_prepare_update_from_cups__load_options(self, patched_cups):
patched_cups.Connection.return_value.getPPD3.return_value = (200, 1, None)
self._mock_cups_options(self.printer, [])
self.printer._prepare_update_from_cups(
patched_cups.Connection(), self.printer_vals)
self.assertEqual(len(self.printer.printer_options), 1)
self.assertEqual(self.printer.printer_options[0].option_key,
'OutputBin')
@mock.patch('%s.cups' % server_model)
def test_prepare_update_from_cups(self, patched_cups):
patched_cups.Connection.return_value.getPPD3.return_value = (200, 1, None)
self._mock_cups_options(self.printer,
[{'choice': 'bin1'},
{'choice': 'bin2'}])
vals = self.printer._prepare_update_from_cups(
patched_cups.Connection(), self.printer_vals)
# OutputBin:bin1 was already inserted
self.assertEqual(len(vals['printer_option_choices']), 1)
self.assertIn((0, 0,
{'option_key': 'OutputBin', 'option_value': 'bin2'}),
vals['printer_option_choices'])
self.assertNotIn((0, 0,
{'option_key': 'OutputBin', 'option_value': 'bin1'}),
vals['printer_option_choices'])
def _mock_cups_options(self, printer,
choices):
def mock__get_cups_ppd(*args):
mock_ppd = mock.Mock()
# Mock optionGroups
mock_option_group = mock.Mock()
mock_option = mock.Mock()
mock_option.keyword = 'OutputBin'
mock_option.choices = choices
mock_option_group.options = [mock_option]
mock_ppd.optionGroups = [mock_option_group]
# Mock findOption
mock_ppd.findOption = lambda x: mock_option
return 'pdd_path', mock_ppd
printer._get_cups_ppd = \
types.MethodType(mock__get_cups_ppd, self.printer)