From 52e9065a8a4f0e19e5b7dd7aa7b463c53a9cb9c7 Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 6 Aug 2025 14:31:06 -0500 Subject: [PATCH 1/3] AuditLogHelper.getLastTransactionId try/catch --- src/org/labkey/test/util/AuditLogHelper.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/org/labkey/test/util/AuditLogHelper.java b/src/org/labkey/test/util/AuditLogHelper.java index 500bcb6acd..3f47014945 100644 --- a/src/org/labkey/test/util/AuditLogHelper.java +++ b/src/org/labkey/test/util/AuditLogHelper.java @@ -232,10 +232,18 @@ public void checkAuditEventDiffCount(String containerPath, AuditEvent auditEvent } } - public Integer getLastTransactionId(String containerPath, AuditEvent auditEventName) throws IOException, CommandException + public Integer getLastTransactionId(String containerPath, AuditEvent auditEventName) { - List> events = getAuditLogsFromLKS(containerPath, auditEventName, List.of("TransactionId"), Collections.emptyList(), 1, ContainerFilter.CurrentAndSubfolders).getRows(); - return events.size() == 1 ? (Integer) events.get(0).get("TransactionId") : null; + try + { + List> events = getAuditLogsFromLKS(containerPath, auditEventName, List.of("TransactionId"), Collections.emptyList(), 1, ContainerFilter.CurrentAndSubfolders).getRows(); + return events.size() == 1 ? (Integer) events.get(0).get("TransactionId") : null; + } + catch (Exception e) + { + // don't fail here, just return null if we can't get the last transactionId + return null; + } } /** From 4f1e9be418a5c16366c97e6b2ba5d7e46bb3ab81 Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 6 Aug 2025 14:31:48 -0500 Subject: [PATCH 2/3] Add capital to NON_LATIN_STRING (for BiologicsReportTest export chart pdf scenario) --- src/org/labkey/test/util/TestDataGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/labkey/test/util/TestDataGenerator.java b/src/org/labkey/test/util/TestDataGenerator.java index cbb98da400..b9995e0125 100644 --- a/src/org/labkey/test/util/TestDataGenerator.java +++ b/src/org/labkey/test/util/TestDataGenerator.java @@ -77,7 +77,7 @@ public class TestDataGenerator public static final char WIDE_PLACEHOLDER = '\u03A0'; // 'Π' - Wide character can't be picked from the string with 'charAt' public static final char REPEAT_PLACEHOLDER = '\u22EF'; // '⋯' - Used to indicate that the char will be repeated public static final char ALL_CHARS_PLACEHOLDER = '\u2211'; // '∑' - Used to indicate that all characters from the charset should be used - public static final String NON_LATIN_STRING = "\u0438\uC548\u306F"; // "и안は" + public static final String NON_LATIN_STRING = "\u0438\u0418\uC548\u306F"; // "иИ안は" // chose a Character random from this String public static final String CHARSET_STRING = "ABCDEFG01234abcdefvxyz~!@#$%^&*()-+=_{}[]|:;\"',.<>" + NON_LATIN_STRING + WIDE_PLACEHOLDER; public static final String ALPHANUMERIC_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvxyz"; From 0b31e6dbdf3bc9dcd0050551137e437cfd30c7b2 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 7 Aug 2025 08:29:56 -0500 Subject: [PATCH 3/3] move code to AuditLogHelper for doAndWaitForTransaction --- src/org/labkey/test/util/AuditLogHelper.java | 27 ++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/util/AuditLogHelper.java b/src/org/labkey/test/util/AuditLogHelper.java index 3f47014945..83b85bd63c 100644 --- a/src/org/labkey/test/util/AuditLogHelper.java +++ b/src/org/labkey/test/util/AuditLogHelper.java @@ -33,6 +33,8 @@ import static java.lang.Integer.parseInt; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import static org.labkey.test.WebDriverWrapper.WAIT_FOR_JAVASCRIPT; +import static org.labkey.test.WebDriverWrapper.waitFor; public class AuditLogHelper { @@ -241,9 +243,30 @@ public Integer getLastTransactionId(String containerPath, AuditEvent auditEventN } catch (Exception e) { - // don't fail here, just return null if we can't get the last transactionId - return null; + throw new RuntimeException(e); + } + } + + public Integer doAndWaitForTransaction(Runnable action, String containerPath, AuditEvent auditEventName) + { + int prevTransactionId; + if (action != null) + { + prevTransactionId = Objects.requireNonNullElse(getLastTransactionId(containerPath, auditEventName), -1); + action.run(); } + else + { + prevTransactionId = -1; + } + + return waitFor(() -> { + Integer transactionId = getLastTransactionId(containerPath, auditEventName); + if (transactionId != null && transactionId > prevTransactionId) + return transactionId; + else + return null; + }, "Error waiting for next transactionId in " + auditEventName, WAIT_FOR_JAVASCRIPT); } /**