Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved ExtractionTest Validation of Attachment and Extracted Children Expected vs Found Count #188

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
41 changes: 32 additions & 9 deletions src/test/java/emissary/test/core/junit5/ExtractionTest.java
Expand Up @@ -49,6 +49,9 @@ public abstract class ExtractionTest extends UnitTest {
private static final List<IBaseDataObject> NO_ATTACHMENTS = Collections.emptyList();
private static final byte[] INCORRECT_VIEW_MESSAGE = "This is the incorrect view, the place should not have processed this view".getBytes();

private boolean skipAttCountValidation = false;
private boolean skipExtractCountValidation = false;

protected KffDataObjectHandler kff =
new KffDataObjectHandler(KffDataObjectHandler.TRUNCATE_KNOWN_DATA, KffDataObjectHandler.SET_FORM_WHEN_KNOWN,
KffDataObjectHandler.SET_FILE_TYPE);
Expand Down Expand Up @@ -171,8 +174,12 @@ protected void checkAnswers(Document answers, IBaseDataObject payload, List<IBas
}

protected void checkAnswers(Element el, IBaseDataObject payload, List<IBaseDataObject> attachments, String tname) throws DataConversionException {

int numAtt = JDOMUtil.getChildIntValue(el, "numAttachments");
long numAttElements = el.getChildren().stream().filter(c -> c.getName().startsWith("att")).count();
if (Math.toIntExact(numAttElements) != numAtt && !(numAttElements <= 0 && numAtt == -1) && !skipAttCountValidation) {
logger.warn("Expected numAttachments and actual <att#> count in {} not equal. Expected: {} Actual: {}", tname, Math.max(numAtt, 0),
sambish5 marked this conversation as resolved.
Show resolved Hide resolved
numAttElements);
sambish5 marked this conversation as resolved.
Show resolved Hide resolved
}
if (numAtt > -1) {
assertEquals(numAtt, attachments != null ? attachments.size() : 0, "Number of attachments in " + tname);
}
Expand Down Expand Up @@ -278,17 +285,24 @@ protected void checkAnswers(Element el, IBaseDataObject payload, List<IBaseDataO
assertNull(viewData, String.format("Alternate View '%s' is present, but should not be, in %s", viewName, tname));
}


// Check each extract
String extractCountStr = el.getChildTextTrim("extractCount");
int extractCount = JDOMUtil.getChildIntValue(el, "extractCount");
long numExtractElements =
el.getChildren().stream().filter(c -> c.getName().startsWith("extract") && !c.getName().startsWith("extractCount")).count();
if (Math.toIntExact(numExtractElements) != extractCount && !(numExtractElements <= 0 && extractCount == -1) && !skipExtractCountValidation) {
logger.warn("Expected extractCount and actual <extract#> count in {} not equal. Expected: {} Actual: {}", tname,
Math.max(extractCount, 0),
numExtractElements);
}

if (payload.hasExtractedRecords()) {
List<IBaseDataObject> extractedChildren = payload.getExtractedRecords();
int foundCount = extractedChildren.size();

if (extractCountStr != null) {
assertEquals(Integer.parseInt(extractCountStr), foundCount,
String.format("Number of extracted children in '%s' is %s, not expected %s", tname, foundCount, extractCountStr));
if (extractCount > -1) {
assertEquals(extractCount, foundCount,
String.format("Number of extracted children in '%s' is %s, not expected %s", tname, foundCount,
extractCount));
}

int attNum = 1;
Expand All @@ -300,9 +314,9 @@ protected void checkAnswers(Element el, IBaseDataObject payload, List<IBaseDataO
attNum++;
}
} else {
if (extractCountStr != null) {
assertEquals(0, Integer.parseInt(extractCountStr),
String.format("No extracted children in '%s' when expecting %s", tname, extractCountStr));
if (extractCount > -1) {
assertEquals(0, extractCount,
String.format("No extracted children in '%s' when expecting %s", tname, extractCount));
}
}
}
Expand Down Expand Up @@ -419,4 +433,13 @@ protected void setupPayload(IBaseDataObject payload, Document doc) {
payload.setFileType(payload.currentForm());
}
}

// allow the validation of att and ext counts to be skipped/not logged in tests
protected void setAttachmentCountValidation(boolean skipAttCountValidation) {
this.skipAttCountValidation = skipAttCountValidation;
}

protected void setExtractCountValidation(boolean skipExtractCountValidation) {
this.skipExtractCountValidation = skipExtractCountValidation;
}
sambish5 marked this conversation as resolved.
Show resolved Hide resolved
}
16 changes: 0 additions & 16 deletions src/test/resources/emissary/test/core/TestExtractionTest.xml

This file was deleted.