From d11a2e2fe9f7cb512e3e42d0ecb57140bd969e80 Mon Sep 17 00:00:00 2001 From: rrenkor Date: Tue, 20 Feb 2024 13:41:29 -0600 Subject: [PATCH 1/3] Fix printer lock not getting unlocked if enable fails --- .../components/printer/PrinterDevice.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/target/devicemanager/components/printer/PrinterDevice.java b/src/main/java/com/target/devicemanager/components/printer/PrinterDevice.java index e8f23e3..398fb26 100644 --- a/src/main/java/com/target/devicemanager/components/printer/PrinterDevice.java +++ b/src/main/java/com/target/devicemanager/components/printer/PrinterDevice.java @@ -165,14 +165,14 @@ private void enable() throws JposException { public Void printContent(List contents, int printerStation) throws JposException, PrinterException { LOGGER.debug("printContent()"); if(tryLock()) { - if (contents == null || contents.isEmpty()) { - LOGGER.debug("Receipt contents are empty"); - return null; - } - enable(); POSPrinter printer; synchronized (printer = dynamicPrinter.getDevice()) { try { + if (contents == null || contents.isEmpty()) { + LOGGER.debug("Receipt contents are empty"); + throw new PrinterException(PrinterError.INVALID_FORMAT); + } + enable(); if (printerStation != PrinterStationType.CHECK_PRINTER.getValue() && (wasPaperEmpty || paperEmptyCheck())) { // Throw JPOS extended error JPOS_EPTR_REC_EMPTY throw new JposException(114, 203); From 01d1bbd257132e3540707d111db2cfa24b39631a Mon Sep 17 00:00:00 2001 From: rrenkor Date: Wed, 21 Feb 2024 14:22:42 -0600 Subject: [PATCH 2/3] Unit test for printer unlock --- .../components/printer/PrinterDeviceTest.java | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java b/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java index cbd8bf0..448acf9 100644 --- a/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java +++ b/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java @@ -357,12 +357,18 @@ public void printContent_WhenContentsNull() throws JposException, PrinterExcepti //arrange //act - printerDevice.printContent(null, 0); - + try { + printerDevice.printContent(null, 0); + } //assert - verify(mockDynamicPrinter, never()).getDevice(); - verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); - verify(mockPrinter, never()).clearOutput(); + catch (PrinterException printerException) { + verify(mockDynamicPrinter, times(1)).getDevice(); + verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); + verify(mockPrinter, times(1)).clearOutput(); + return; + } catch (JposException jposException) { + fail("Expected PrinterException, got JposException"); + } } @Test @@ -371,12 +377,18 @@ public void printContent_WhenContentsEmpty() throws JposException, PrinterExcept List contents = new ArrayList<>(); //act - printerDevice.printContent(contents, 0); - + try { + printerDevice.printContent(contents, 0); + } //assert - verify(mockDynamicPrinter, never()).getDevice(); - verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); - verify(mockPrinter, never()).clearOutput(); + catch (PrinterException printerException) { + verify(mockDynamicPrinter, times(1)).getDevice(); + verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); + verify(mockPrinter, times(1)).clearOutput(); + return; + } catch (JposException jposException) { + fail("Expected PrinterException, got JposException"); + } } @Test @@ -399,9 +411,9 @@ public String toString() { //assert catch (JposException jposException) { - verify(mockDynamicPrinter, never()).getDevice(); + verify(mockDynamicPrinter, times(1)).getDevice(); verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); - verify(mockPrinter, never()).clearOutput(); + verify(mockPrinter, times(1)).clearOutput(); return; } catch (PrinterException printerException) { fail("Expected JposException, got PrinterException"); From 2bdcba23763fb4205976318d20e28e090d8c3b7c Mon Sep 17 00:00:00 2001 From: rrenkor Date: Thu, 22 Feb 2024 11:27:31 -0600 Subject: [PATCH 3/3] Check exceptions are correct in unit tests --- .../devicemanager/components/printer/PrinterDeviceTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java b/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java index 448acf9..2dde931 100644 --- a/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java +++ b/src/test/java/com/target/devicemanager/components/printer/PrinterDeviceTest.java @@ -362,6 +362,7 @@ public void printContent_WhenContentsNull() throws JposException, PrinterExcepti } //assert catch (PrinterException printerException) { + assert(printerException.getDeviceError().equals(PrinterError.INVALID_FORMAT)); verify(mockDynamicPrinter, times(1)).getDevice(); verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); verify(mockPrinter, times(1)).clearOutput(); @@ -382,6 +383,7 @@ public void printContent_WhenContentsEmpty() throws JposException, PrinterExcept } //assert catch (PrinterException printerException) { + assert(printerException.getDeviceError().equals(PrinterError.INVALID_FORMAT)); verify(mockDynamicPrinter, times(1)).getDevice(); verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); verify(mockPrinter, times(1)).clearOutput(); @@ -411,6 +413,7 @@ public String toString() { //assert catch (JposException jposException) { + assert(jposException.getErrorCode() == JposConst.JPOS_E_OFFLINE); verify(mockDynamicPrinter, times(1)).getDevice(); verify(mockPrinter, never()).transactionPrint(anyInt(), anyInt()); verify(mockPrinter, times(1)).clearOutput();