Files
report-print-send/printer_custom_options/tests/test_printing_printer.py
qgigon f3be3b151c 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
2020-03-03 09:23:11 +01:00

106 lines
3.9 KiB
Python
Executable File

# 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)