diff --git a/spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumTest.java b/spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumTest.java index 325c55fc..a35c779f 100644 --- a/spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumTest.java +++ b/spring-boot/src/test/java/org/dcsa/conformance/frontend/SeleniumTest.java @@ -77,12 +77,16 @@ void testLoginAndCreateSandboxStart() { @ParameterizedTest @ValueSource(strings = { - "Adoption", // Takes 0:39 minutes - "Booking", // Takes 10:52 minutes - "CS", // 10:37 minutes - "JIT", // 1:12 minutes - "OVS", // 3:28 minutes - "TnT" // 6:6 minutes + "Adoption", // Takes 0:29 minutes + "Booking", // Takes 11:52 minutes + "CS", // 11:05 minutes + "Ebl", // 37:09 minutes + "eBL Issuance", // 6:03 minutes + "eBL Surrender", // 7:59 minutes + "JIT", // 1:14 minutes + "OVS", // 3:34 minutes +// "PINT", // Waits until DT-1796 is fixed + "TnT" // 6:20 minutes }) void testStandardWithAllVersions(String standardName) { StopWatch stopWatch = StopWatch.createStarted(); @@ -96,30 +100,22 @@ void testStandardWithAllVersions(String standardName) { requestedStandard .versions() .forEach( - version -> version - .roles() - .forEach( - role -> createSandboxesAndRunGroups(requestedStandard, version, "Conformance", role))); + version -> + version.suites().stream() + .filter(suite -> suite.startsWith("Conformance")) + .forEach( + suite -> + version + .roles() + .forEach( + role -> + createSandboxesAndRunGroups( + requestedStandard, version.number(), suite, role)))); log.info("Finished with standard: {}, time taken: {}", standardName, stopWatch); } - // Note: this method can be deleted when 'Conformance TD-only' is working. Standard can be added to method above. - // Takes 20 minutes - @ParameterizedTest - @ValueSource(strings = {"Carrier", "Shipper"}) - void testEBLSIOnly(String testedParty) { - getAllSandboxes(); - List availableStandards = getAvailableStandards(); - Standard requestedStandard = - availableStandards.stream() - .filter(standard -> standard.name().equals("Ebl")) - .findFirst() - .orElseThrow(); - StandardVersion version = requestedStandard.versions().getFirst(); - createSandboxesAndRunGroups(requestedStandard, version, "Conformance SI-only", testedParty); - } - - private void createSandboxesAndRunGroups(Standard standard, StandardVersion version, String suiteName, String role) { + private void createSandboxesAndRunGroups(Standard standard, String version, String suiteName, String role) { + log.info("Starting standard: {}, version: {}, suite: {}, role: {}", standard.name(), version, suiteName, role); switchToTab(0); SandboxConfig sandBox1 = createSandBox(standard, version, suiteName, role, 0); openNewTab(); @@ -128,7 +124,7 @@ private void createSandboxesAndRunGroups(Standard standard, StandardVersion vers updateSandboxConfigBeforeStarting(sandBox1, sandBox2); runScenarioGroups(); - log.info("Finished with standard: {}, version: {}, role: {}", standard.name(), version.number(), role); + log.info("Finished with standard: {}, version: {}, suite: {}, role: {}", standard.name(), version, suiteName, role); // Close tab and switch back to first tab. driver.close(); @@ -153,41 +149,48 @@ private void runScenarioGroups() { .findElements(By.className(("scenarioActionButton"))) .get(i) .click(); + waitForUIReadiness(); - handleJsonPromptForText(); do { + if (handleJsonPromptForText()) continue; handlePromptText(); completeAction(); } while (!hasNoMoreActionsDisplayed()); } } - private static void handleJsonPromptForText() { - waitForUIReadiness(); + private boolean handleJsonPromptForText() { try { - driver.findElement(By.id("jsonForPromptText")); + By jsonForPromptText = By.id("jsonForPromptText"); + String promptText = driver.findElement(jsonForPromptText).getText(); + wait.until(ExpectedConditions.visibilityOfElementLocated(jsonForPromptText)); + + // Special flow for: eBL TD-only UC6 in Carrier mode (DT-1681) + if (promptText.contains("Insert TDR here")) { + promptText = fetchTransportDocument(promptText); + } - wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("jsonForPromptText"))); - String promptText = driver.findElement(By.id("jsonForPromptText")).getText(); driver.findElement(By.id("actionInput")).sendKeys(promptText); driver.findElement(By.id("submitActionButton")).click(); waitForUIReadiness(); + return true; } catch (org.openqa.selenium.NoSuchElementException e) { - log.info("No prompt text"); + log.debug("No prompt text"); } + return false; } - // If there are no more actions, the scenario is finished and should be conformant. - private static boolean hasNoMoreActionsDisplayed() { - if (driver.findElements(By.id("nextActions")).isEmpty() - && driver.findElements(By.tagName("app-text-waiting")).isEmpty()) { - String titleValue = - driver.findElement(By.className("conformanceStatus")).getAttribute("title"); - assertEquals("Conformant", titleValue); - log.info("Scenario is Conformant."); - return true; - } - return false; + private String fetchTransportDocument(String promptText) { + handlePromptText(); + switchToTab(1); + + driver.findElement(By.cssSelector("[testId='refreshButton']")).click(); + waitForUIReadiness(); + + String operatorLog = driver.findElement(By.cssSelector("[testId='operatorLog']")).getText(); + String reference = extractTransportDocumentReference(operatorLog); + switchToTab(0); + return promptText.replace("Insert TDR here", reference); } private void handlePromptText() { @@ -208,6 +211,19 @@ private void handlePromptText() { } } + // If there are no more actions, the scenario is finished and should be conformant. + private static boolean hasNoMoreActionsDisplayed() { + if (driver.findElements(By.id("nextActions")).isEmpty() + && driver.findElements(By.tagName("app-text-waiting")).isEmpty()) { + String titleValue = + driver.findElement(By.className("conformanceStatus")).getAttribute("title"); + assertEquals("Conformant", titleValue); + log.debug("Scenario is Conformant."); + return true; + } + return false; + } + private static void waitForUIReadiness() { if (!driver.findElements(By.tagName("app-text-waiting")).isEmpty()) { wait.until( @@ -218,6 +234,8 @@ private static void waitForUIReadiness() { private static void completeAction() { log.debug("Completing action"); + waitForUIReadiness(); + wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("completeCurrentActionButton"))); driver.findElement(By.id("completeCurrentActionButton")).click(); @@ -270,8 +288,8 @@ private static void loginUser() { alreadyLoggedIn = true; } - SandboxConfig createSandBox(Standard standard, StandardVersion version, String suiteName, String roleName, int sandboxType) { - log.info("Creating Sandbox: {}, {}, {}, type: {}", standard.name(), version.number(), roleName, sandboxType); + SandboxConfig createSandBox(Standard standard, String version, String suiteName, String roleName, int sandboxType) { + log.info("Creating Sandbox: {}, {}, {}, {}, type: {}", standard.name(), version, suiteName, roleName, sandboxType); driver.get(BASE_URL + "/create-sandbox"); if (driver.getCurrentUrl().endsWith("/login")) { loginUser(); @@ -280,7 +298,7 @@ SandboxConfig createSandBox(Standard standard, StandardVersion version, String s assertEquals(BASE_URL + "/create-sandbox", driver.getCurrentUrl()); selectAndPickOption("standardSelect", standard.name()); - selectAndPickOption("versionSelect", version.number()); + selectAndPickOption("versionSelect", version); selectAndPickOption("suiteSelect", suiteName); selectAndPickOption("roleSelect", roleName); @@ -290,13 +308,7 @@ SandboxConfig createSandBox(Standard standard, StandardVersion version, String s assertFalse(typeOptions.isEmpty()); typeOptions.get(sandboxType).click(); - String sandboxName; - if (sandboxType == 0) { - sandboxName = "%s - %s testing: orchestrator".formatted(standard.name(), roleName); - } else { - sandboxName = "%s - %s testing: synthetic %s as tested party" - .formatted(standard.name(), roleName, roleName); - } + String sandboxName = getSandboxName(standard.name(), version, suiteName, roleName, sandboxType); driver.findElement(By.id("mat-input-0")).sendKeys(sandboxName); driver.findElement(By.id("createSandboxButton")).click(); diff --git a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualEBLSIOnlyTest.java b/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualEBLSIOnlyTest.java deleted file mode 100644 index 6c0f7376..00000000 --- a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualEBLSIOnlyTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.dcsa.conformance.manual; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.List; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; - -@Slf4j -class ManualEBLSIOnlyTest extends ManualTestBase { - - //Note: this class can be deleted when 'Conformance TD-only' is working. Standard can be added to ManualScenarioTest - @ParameterizedTest - @CsvSource({"Carrier", "Shipper"}) - void testManualEblSI(String testedParty) { - app.setSimulatedLambdaDelay(lambdaDelay); - getAllSandboxes(); - getAvailableStandards(); - - SandboxConfig sandbox1 = - createSandbox( - new Sandbox( - "Ebl", - "3.0.0", - "Conformance SI-only", - testedParty, - true, - "Ebl-SI - %s testing: orchestrator".formatted(testedParty))); - SandboxConfig sandbox2 = - createSandbox( - new Sandbox( - "Ebl", - "3.0.0", - "Conformance SI-only", - testedParty, - false, - "Ebl-SI - %s testing: synthetic %s as tested party" - .formatted(testedParty, testedParty))); - - updateSandboxConfigBeforeStarting(sandbox1, sandbox2); - List sandbox1Digests = getScenarioDigests(sandbox1.sandboxId()); - assertTrue(sandbox1Digests.size() >= 3, "Found: " + sandbox1Digests.size()); - - updateSandboxConfigBeforeStarting(sandbox2, sandbox1); - List sandbox2Digests = getScenarioDigests(sandbox2.sandboxId()); - assertTrue(sandbox2Digests.isEmpty()); - - // Run all tests for all scenarios - runAllTests(sandbox1Digests, sandbox1, sandbox2); - - log.info("Run for the 2nd time, and see that it still works"); - runAllTests(sandbox1Digests, sandbox1, sandbox2); - } - -} diff --git a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualEBLTDOnlyTest.java b/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualEBLTDOnlyTest.java deleted file mode 100644 index f1f7c16a..00000000 --- a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualEBLTDOnlyTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.dcsa.conformance.manual; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.List; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; - -@Slf4j -class ManualEBLTDOnlyTest extends ManualTestBase { - - @Disabled("A required API exchange was not yet detected for action 'TD Change (Out of Band)'") - @ParameterizedTest - @CsvSource({"Carrier", "Shipper"}) - void testManualEblTD(String testedParty) { - app.setSimulatedLambdaDelay(lambdaDelay); - getAllSandboxes(); - getAvailableStandards(); - - SandboxConfig sandbox1 = - createSandbox( - new Sandbox( - "Ebl", - "3.0.0", - "Conformance TD-only", - testedParty, - true, - "Ebl-TD - %s testing: orchestrator".formatted(testedParty))); - SandboxConfig sandbox2 = - createSandbox( - new Sandbox( - "Ebl", - "3.0.0", - "Conformance TD-only", - testedParty, - false, - "Ebl-TD - %s testing: synthetic %s as tested party" - .formatted(testedParty, testedParty))); - - updateSandboxConfigBeforeStarting(sandbox1, sandbox2); - List sandbox1Digests = getScenarioDigests(sandbox1.sandboxId()); - assertTrue(sandbox1Digests.size() >= 2); - - updateSandboxConfigBeforeStarting(sandbox2, sandbox1); - List sandbox2Digests = getScenarioDigests(sandbox2.sandboxId()); - assertTrue(sandbox2Digests.isEmpty()); - - // Run all tests for all scenarios - runAllTests(sandbox1Digests, sandbox1, sandbox2); - - log.info("Run for the 2nd time, and see that it still works"); - runAllTests(sandbox1Digests, sandbox1, sandbox2); - } - -} diff --git a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualScenarioTest.java b/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualScenarioTest.java index 94bd55e6..b1d64ea2 100644 --- a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualScenarioTest.java +++ b/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualScenarioTest.java @@ -13,7 +13,6 @@ @Slf4j class ManualScenarioTest extends ManualTestBase { - // PINT is postponed, until it has non-RI impls. @SuppressWarnings("unused") private static Stream testStandards() { return Stream.of( @@ -23,22 +22,21 @@ private static Stream testStandards() { Arguments.of("Booking", true), Arguments.of("CS", false), Arguments.of("CS", true), + Arguments.of("Ebl", false), + Arguments.of("Ebl", true), Arguments.of("JIT", false), Arguments.of("JIT", true), Arguments.of("OVS", false), Arguments.of("OVS", true), +// DT-1796, PINT issue: Unknown TD Reference: j5k./hY,wZNqNDSEmJ` +// Arguments.of("PINT", true), +// Arguments.of("PINT", false), Arguments.of("TnT", false), - Arguments.of("TnT", true) - - // eBL Issuance: 1) Carrier issue: Signature of the issuanceManifestSignedContent is valid. - // eBL Issuance: 2) Platform issue: STRAIGHT_EBL -> Response status '409' does not match the expected value '204' -// Arguments.of("eBL Issuance", false), -// Arguments.of("eBL Issuance", true), - - // eBL Surrender: 1) Carrier issue: A required API exchange was not yet detected for action 'Void&Reissue'. - // eBL Surrender: 2) Platform: same issue on 'SURR 409' -// Arguments.of("eBL Surrender", false), -// Arguments.of("eBL Surrender", true) + Arguments.of("TnT", true), + Arguments.of("eBL Issuance", false), + Arguments.of("eBL Issuance", true), + Arguments.of("eBL Surrender", false), + Arguments.of("eBL Surrender", true) ); } @@ -53,17 +51,25 @@ void testStandards(String standardName, boolean secondRun) { .filter(standard -> standard.name().equals(standardName)) .findFirst() .orElseThrow(); + standard1 .versions() .forEach( version -> - version - .roles() - .forEach(role -> runManualTests(standard1.name(), version, role, secondRun))); + version.suites().stream() + .filter(suite -> suite.startsWith("Conformance")) + .forEach( + suite -> + version + .roles() + .forEach( + role -> + runManualTests( + standard1.name(), version, suite, role, secondRun)))); } private void runManualTests( - String standardName, StandardVersion version, String roleName, boolean secondRun) { + String standardName, StandardVersion version, String suiteName, String roleName, boolean secondRun) { SandboxConfig sandbox1; SandboxConfig sandbox2; if (!secondRun) { @@ -72,30 +78,29 @@ private void runManualTests( new Sandbox( standardName, version.number(), - "Conformance", + suiteName, roleName, true, - "%s - %s testing: orchestrator".formatted(standardName, roleName))); + getSandboxName(standardName, version.number(), suiteName, roleName, 0))); sandbox2 = createSandbox( new Sandbox( standardName, version.number(), - "Conformance", + suiteName, roleName, false, - "%s - %s testing: synthetic %s as tested party" - .formatted(standardName, roleName, roleName))); + getSandboxName(standardName, version.number(), suiteName, roleName, 1))); updateSandboxConfigBeforeStarting(sandbox1, sandbox2); updateSandboxConfigBeforeStarting(sandbox2, sandbox1); } else { sandbox1 = - getSandboxByName("%s - %s testing: orchestrator".formatted(standardName, roleName)); + getSandboxByName(getSandboxName(standardName, version.number(), suiteName, roleName, 0)); sandbox2 = - getSandboxByName( - "%s - %s testing: synthetic %s as tested party" - .formatted(standardName, roleName, roleName)); - log.info("Run for the 2nd time, and see that it still works"); + getSandboxByName(getSandboxName(standardName, version.number(), suiteName, roleName, 1)); + log.info("Run for the 2nd time, and verify it still works."); + log.info("Using sandboxes: {} v{}, suite: {}, role: {}", standardName, version.number(), suiteName, roleName); + resetSandbox(sandbox2); // Make sure the sandbox does not keep an optional state from the first run } List sandbox1Digests = getScenarioDigests(sandbox1.sandboxId()); diff --git a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualTestBase.java b/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualTestBase.java index 66be681f..15ddcc81 100644 --- a/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualTestBase.java +++ b/spring-boot/src/test/java/org/dcsa/conformance/manual/ManualTestBase.java @@ -10,7 +10,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.dcsa.conformance.core.party.HttpHeaderConfiguration; @@ -49,28 +48,12 @@ protected List getAllSandboxes() { ObjectNode node = mapper.createObjectNode().put("operation", "getAllSandboxes"); JsonNode jsonNode = webuiHandler.handleRequest(USER_ID, node); assertTrue(jsonNode.size() >= 6); - // Workaround because of inconsistent data is returned. - List sandboxItems = new ArrayList<>(); - jsonNode.forEach( - jsonNode1 -> { - if (jsonNode1.has("operatorLog")) { - sandboxItems.add( - new SandboxItem( - jsonNode1.get("id").asText(), - jsonNode1.get("name").asText(), - jsonNode1.get("operatorLog").asText(), - jsonNode1.get("canNotifyParty").asBoolean())); - } else { - sandboxItems.add( - new SandboxItem( - jsonNode1.get("id").asText(), jsonNode1.get("name").asText(), null, false)); - } - }); - return sandboxItems; + return mapper.convertValue(jsonNode, new TypeReference<>() {}); } void handleActionInput( SandboxConfig sandbox, String scenarioId, String actionId, JsonNode textInputNode) { + log.debug("Handling action input: {}", textInputNode); ObjectNode node = mapper .createObjectNode() @@ -95,6 +78,7 @@ void startOrStopScenario(SandboxConfig sandbox, String scenarioId) { } void notifyAction(SandboxConfig sandbox) { + log.debug("Notifying party."); ObjectNode node = mapper .createObjectNode() @@ -106,6 +90,7 @@ void notifyAction(SandboxConfig sandbox) { } void completeAction(SandboxConfig sandbox) { + log.debug("Completing current action."); ObjectNode node = mapper .createObjectNode() @@ -214,17 +199,23 @@ void updateSandboxConfigBeforeStarting(SandboxConfig sandbox1, SandboxConfig san assertTrue(webuiHandler.handleRequest(USER_ID, node).isEmpty()); // Validate Sandbox 1 details + getSandbox(sandbox1); + } + + SandboxItem getSandbox(SandboxConfig sandbox) { + JsonNode node; node = mapper .createObjectNode() .put("operation", "getSandbox") - .put("sandboxId", sandbox1.sandboxId) + .put("sandboxId", sandbox.sandboxId) .put("includeOperatorLog", true); JsonNode jsonNode = webuiHandler.handleRequest(USER_ID, node); assertTrue(jsonNode.has("id")); assertTrue(jsonNode.has("name")); assertTrue(jsonNode.has("operatorLog")); - assertEquals(jsonNode.get("id").asText(), sandbox1.sandboxId); + assertEquals(jsonNode.get("id").asText(), sandbox.sandboxId); + return mapper.convertValue(jsonNode, SandboxItem.class); } SandboxConfig createSandbox(Sandbox sandbox) { @@ -241,11 +232,22 @@ SandboxConfig createSandbox(Sandbox sandbox) { JsonNode jsonNode = webuiHandler.handleRequest(USER_ID, node); assertTrue(jsonNode.has("sandboxId"), "SandboxId not found, maybe not created? Response: " + jsonNode); String sandboxId = jsonNode.get("sandboxId").asText(); - log.info("Created sandbox: {}, v{}, suite: {}, role: {}, defaultType: {}", sandbox.standardName, sandbox.versionNumber, sandbox.scenarioSuite, sandbox.testedPartyRole, sandbox.isDefaultType); + log.info("Created sandbox: {} v{}, suite: {}, role: {}, defaultType: {}", sandbox.standardName, sandbox.versionNumber, sandbox.scenarioSuite, sandbox.testedPartyRole, sandbox.isDefaultType); return getSandboxConfig(sandboxId); } + void resetSandbox(SandboxConfig sandbox) { + log.info("Reset state of sandbox: {}", sandbox.sandboxName); + JsonNode node = + mapper + .createObjectNode() + .put("operation", "resetParty") + .put("sandboxId", sandbox.sandboxId); + JsonNode jsonNode = webuiHandler.handleRequest(USER_ID, node); + assertTrue(jsonNode.isEmpty(), "Should be empty, found: " + jsonNode); + } + SandboxConfig getSandboxByName(String sandboxName) { SandboxItem sandboxItem1 = getAllSandboxes().stream() @@ -278,6 +280,18 @@ List getScenarioDigests(String sandboxId) { return mapper.convertValue(jsonNode, new TypeReference<>() {}); } + protected String getSandboxName(String standardName, String version, String suiteName, String roleName, int sandboxType) { + String sandboxName; + if (sandboxType == 0) { + sandboxName = "%s v%s, %s, %s - Testing: orchestrator".formatted(standardName, version, suiteName, roleName); + } else { + sandboxName = "%s v%s, %s, %s - Testing: synthetic %s as tested party" + .formatted(standardName, version, suiteName, roleName, roleName); + } + return sandboxName; + } + + void runAllTests( List sandbox1Digests, SandboxConfig sandbox1, SandboxConfig sandbox2) { sandbox1Digests.forEach( @@ -290,9 +304,10 @@ void runAllTests( void runScenario( SandboxConfig sandbox1, SandboxConfig sandbox2, String scenarioId, String scenarioName) { - + log.debug("Starting scenario '{}'.", scenarioName); startOrStopScenario(sandbox1, scenarioId); notifyAction(sandbox2); + waitForCleanSandboxStatus(sandbox1); boolean isRunning; do { @@ -301,12 +316,18 @@ void runScenario( boolean hasPromptText = jsonNode.has("promptText"); isRunning = jsonNode.get("isRunning").booleanValue(); if (inputRequired) { - String jsonForPromptText = jsonNode.get("jsonForPromptText").toString(); + JsonNode jsonForPrompt = jsonNode.get("jsonForPromptText"); + String jsonForPromptText = jsonForPrompt.toString(); assertTrue( - jsonForPromptText.length() >= 25, "Prompt text was:" + jsonForPromptText.length()); + jsonForPromptText.length() >= 25, "Prompt text was:" + jsonForPromptText.length()); String promptActionId = jsonNode.get("promptActionId").textValue(); - handleActionInput(sandbox1, scenarioId, promptActionId, jsonNode.get("jsonForPromptText")); + // Special flow for: eBL TD-only UC6 in Carrier mode (DT-1681) + if (jsonForPromptText.contains("Insert TDR here")) { + jsonForPrompt = fetchTransportDocument(sandbox2); + } + + handleActionInput(sandbox1, scenarioId, promptActionId, jsonForPrompt); if (lambdaDelay > 0) waitForAsyncCalls(lambdaDelay * 2); continue; } @@ -318,6 +339,27 @@ void runScenario( validateSandboxScenarioGroup(sandbox1, scenarioId, scenarioName); } + private JsonNode fetchTransportDocument(SandboxConfig sandbox2) { + notifyAction(sandbox2); + + log.debug("Fetching transport document reference from sandbox2"); + String referenceText = + getSandbox(sandbox2).operatorLog.stream() + .filter(text -> text.contains("transport document '")) + .findFirst() + .orElseThrow(() -> new IllegalStateException("No transport document found")); + return OBJECT_MAPPER + .createObjectNode() + .put("transportDocumentReference", extractTransportDocumentReference(referenceText)); + } + + protected static String extractTransportDocumentReference(String referenceTextLine) { + String tdRefText = "transport document '"; + int startReference = referenceTextLine.indexOf(tdRefText); + int endReference = referenceTextLine.indexOf("'", startReference + tdRefText.length()); + return referenceTextLine.substring(startReference + tdRefText.length(), endReference); + } + record Sandbox( String standardName, String versionNumber, @@ -327,7 +369,7 @@ record Sandbox( String sandboxName) {} // Possible result of getAllSandboxes - protected record SandboxItem(String id, String name, String operatorLog, boolean canNotifyParty) {} + protected record SandboxItem(String id, String name, List operatorLog, boolean canNotifyParty) {} public record SandboxConfig( String sandboxId, diff --git a/spring-boot/src/test/java/org/dcsa/conformance/springboot/ConformanceApplicationTest.java b/spring-boot/src/test/java/org/dcsa/conformance/springboot/ConformanceApplicationTest.java index 33c34bc7..0c1dd7b0 100644 --- a/spring-boot/src/test/java/org/dcsa/conformance/springboot/ConformanceApplicationTest.java +++ b/spring-boot/src/test/java/org/dcsa/conformance/springboot/ConformanceApplicationTest.java @@ -40,7 +40,7 @@ class ConformanceApplicationTest { "eblsurrender-300-conformance-auto-all-in-one", "jit-120-conformance-auto-all-in-one", "ovs-300-conformance-auto-all-in-one", - "pint-300-reference-implementation-auto-all-in-one", + "pint-300-conformance-auto-all-in-one", "tnt-220-conformance-auto-all-in-one" }) void testEachSuite(final String sandboxId) throws InterruptedException { @@ -61,10 +61,10 @@ void testEachSuite(final String sandboxId) throws InterruptedException { int firstFound = report.indexOf("conformance
✅ CONFORMANT"); int secondFound = report.indexOf("conformance
✅ CONFORMANT", firstFound + 50); if (firstFound == -1 || secondFound == -1) { // Report current situation for debugging - log.error("Report current situation: {}", report); + log.error("Report situation on sandboxId {}: {}", sandboxId, report); } - assertTrue(firstFound > 0, "First conformance OK not found"); - assertTrue(secondFound > firstFound, "Second conformance OK not found"); + assertTrue(firstFound > 0, "First conformance OK not found, in sandbox: " + sandboxId); + assertTrue(secondFound > firstFound, "Second conformance OK not found after first, in sandbox: " + sandboxId); } private void checkUntilScenariosAreReady(String sandboxId) throws InterruptedException { diff --git a/spring-boot/src/test/resources/application.properties b/spring-boot/src/test/resources/application.properties index e3e1eed8..e0cf262e 100644 --- a/spring-boot/src/test/resources/application.properties +++ b/spring-boot/src/test/resources/application.properties @@ -8,6 +8,10 @@ logging.level.org.dcsa.conformance.core.party = WARN logging.level.org.dcsa.conformance.sandbox = WARN logging.level.org.dcsa.conformance.springboot = INFO +# Test packages +logging.level.org.dcsa.conformance.manual = INFO +logging.level.org.dcsa.conformance.frontend = INFO + conformance.createAutoTestingSandboxes = true conformance.createManualTestingSandboxes = false conformance.useDynamoDb = false diff --git a/webui/src/app/pages/sandbox/sandbox.component.html b/webui/src/app/pages/sandbox/sandbox.component.html index 80fa23a7..7b8c12a8 100644 --- a/webui/src/app/pages/sandbox/sandbox.component.html +++ b/webui/src/app/pages/sandbox/sandbox.component.html @@ -69,9 +69,10 @@
-
{{logEntry}}
+
{{logEntry}}