Fix win32raw failing tests (maybe)

This commit is contained in:
belono 2023-10-25 22:58:34 +02:00
parent 5daf3efa30
commit 504af10718

View File

@ -19,38 +19,33 @@ pytestmark = pytest.mark.skipif(
)
def test_device_not_initialized(win32rawprinter, mocker):
def test_device_not_initialized(win32rawprinter):
"""
GIVEN a win32raw printer object
WHEN it is not initialized
THEN check the device property is False
"""
mocker.patch("win32print.__init__")
assert win32rawprinter._device is False
def test_open_raise_exception(win32rawprinter, devicenotfounderror, mocker):
def test_open_raise_exception(win32rawprinter, devicenotfounderror):
"""
GIVEN a win32raw printer object and a mocked win32printer device
GIVEN a win32raw printer object
WHEN open() is set to raise a DeviceNotFoundError on error
THEN check the exception is raised
"""
mocker.patch("win32print.__init__")
win32rawprinter.printer_name = "fake_printer"
with pytest.raises(devicenotfounderror):
win32rawprinter.open(raise_not_found=True)
def test_open_not_raise_exception(win32rawprinter, caplog, mocker):
def test_open_not_raise_exception(win32rawprinter, caplog):
"""
GIVEN a win32raw printer object and a mocked win32printer device
GIVEN a win32raw printer object
WHEN open() is set to not raise on error but simply cancel
THEN check the error is logged and open() canceled
"""
mocker.patch("win32print.__init__")
win32rawprinter.printer_name = "fake_printer"
with caplog.at_level(logging.ERROR):
@ -66,51 +61,52 @@ def test_open(win32rawprinter, caplog, mocker):
WHEN a valid connection to a device is opened
THEN check the success is logged and the device property is set
"""
mocker.patch("win32print.__init__")
# The _win32typing.PyPrinterHANDLE object is unreachable, so we have to mock it
PyPrinterHANDLE = mocker.Mock()
PyPrinterHANDLE.return_value = 0 # Accepts 0 or None as return value
# Replace the contents of Win32Raw.printers to accept test_printer as a system's printer name
mocker.patch("escpos.printer.Win32Raw.printers", new={"test_printer": "Test"})
# Configure and assert printer_name is valid
win32rawprinter.printer_name = "test_printer"
assert win32rawprinter.printer_name in win32rawprinter.printers
with caplog.at_level(logging.INFO):
# Patch the win32print.OpenPrinter method to return the mocked PyPrinterHANDLE
mocker.patch("win32print.OpenPrinter", new=PyPrinterHANDLE)
win32rawprinter.open()
assert "enabled" in caplog.text
assert win32rawprinter.device
assert win32rawprinter.device == PyPrinterHANDLE.return_value
def test_close_on_reopen(win32rawprinter, mocker):
"""
GIVEN a win32raw printer object and a mocked connection
WHEN a valid connection to a device is reopened before close
THEN check the close method is called if _device
"""
mocker.patch("win32print.__init__")
spy = mocker.spy(win32rawprinter, "close")
mocker.patch("escpos.printer.Win32Raw.printers", new={"test_printer": "Test"})
win32rawprinter.printer_name = "test_printer"
win32rawprinter.open()
assert win32rawprinter._device
win32rawprinter.open()
spy.assert_called_once_with()
def test_close(win32rawprinter, mocker, caplog):
def test_close(win32rawprinter, caplog, mocker):
"""
GIVEN a win32raw printer object and a mocked win32print device
WHEN a connection is opened and closed
THEN check the closing is logged and the device property is False
"""
mocker.patch("win32print.__init__")
# The _win32typing.PyPrinterHANDLE object is unreachable, so we have to mock it
PyPrinterHANDLE = mocker.Mock()
PyPrinterHANDLE.return_value = 0 # Accepts 0 or None as return value
# Replace the contents of Win32Raw.printers to accept test_printer as a system's printer name
mocker.patch("escpos.printer.Win32Raw.printers", new={"test_printer": "Test"})
# Configure and assert printer_name is valid
win32rawprinter.printer_name = "test_printer"
assert win32rawprinter.printer_name in win32rawprinter.printers
# Patch the win32print.OpenPrinter method to return the mocked PyPrinterHANDLE
mocker.patch("win32print.OpenPrinter", new=PyPrinterHANDLE)
win32rawprinter.open()
with caplog.at_level(logging.INFO):
# Patch the win32print close methods
# Raises a warning but passes the test
mocker.patch("win32print.EndPagePrinter")
mocker.patch("win32print.EndDocPrinter")
mocker.patch("win32print.ClosePrinter")
win32rawprinter.close()
assert "Closing" in caplog.text