diff --git a/test/test_printers/test_printer_network.py b/test/test_printers/test_printer_network.py new file mode 100644 index 0000000..1624120 --- /dev/null +++ b/test/test_printers/test_printer_network.py @@ -0,0 +1,96 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +"""tests for the Network printer + +:author: `Patrick Kanzler `_ and the python-escpos developers +:organization: `python-escpos `_ +:copyright: Copyright (c) 2016-2023 `python-escpos `_ +:license: MIT +""" + +import logging + +import pytest + + +def test_device_not_initialized(networkprinter): + """ + GIVEN a network printer object + WHEN it is not initialized + THEN check the device property is False + """ + assert networkprinter._device is False + + +def test_open_raise_exception(networkprinter, devicenotfounderror): + """ + GIVEN a network printer object + WHEN open() is set to raise a DeviceNotFoundError on error + THEN check the exception is raised + """ + networkprinter.host = "fakehost" + + with pytest.raises(devicenotfounderror): + networkprinter.open(raise_not_found=True) + + +def test_open_not_raise_exception(networkprinter, caplog): + """ + GIVEN a network printer object + WHEN open() is set to not raise on error but simply cancel + THEN check the error is logged and open() canceled + """ + networkprinter.host = "fakehost" + + with caplog.at_level(logging.ERROR): + networkprinter.open(raise_not_found=False) + + assert "not found" in caplog.text + assert networkprinter.device is None + + +def test_open(networkprinter, caplog, mocker): + """ + GIVEN a network printer object and a mocked socket device + WHEN a valid connection to a device is opened + THEN check the success is logged and the device property is set + """ + mocker.patch("socket.socket") + + with caplog.at_level(logging.INFO): + networkprinter.open() + + assert "enabled" in caplog.text + assert networkprinter.device + + +def test_close_on_reopen(networkprinter, mocker): + """ + GIVEN a network 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("socket.socket") + spy = mocker.spy(networkprinter, "close") + + networkprinter.open() + assert networkprinter._device + + networkprinter.open() + spy.assert_called_once_with() + + +def test_close(networkprinter, caplog, mocker): + """ + GIVEN a network printer object and a mocked socket device + WHEN a connection is opened and closed + THEN check the closing is logged and the device property is False + """ + mocker.patch("socket.socket") + networkprinter.open() + + with caplog.at_level(logging.INFO): + networkprinter.close() + + assert "Closing" in caplog.text + assert networkprinter._device is False