Skip to content

Commit

Permalink
chore: Reduce complexity of addNewCombination method
Browse files Browse the repository at this point in the history
  • Loading branch information
en-milie committed Oct 15, 2024
1 parent df1a3be commit abf083b
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions src/main/java/com/endava/cats/factory/FuzzingDataFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -625,24 +625,7 @@ private List<String> addNewCombination(JsonElement jsonElement) {
anyOfOrOneOfElements = joinCommonOneAndAnyOfs(anyOfOrOneOfElements);

for (Map.Entry<String, Map<String, JsonElement>> entry : anyOfOrOneOfElements.entrySet()) {
String pathKey = entry.getKey();
Map<String, JsonElement> anyOfOrOneOf = entry.getValue();
List<String> interimCombinationList = new ArrayList<>(result).stream()
.limit(Math.min(processingArguments.getLimitXxxOfCombinations(), result.size()))
.collect(Collectors.toCollection(ArrayList::new));

result.clear();
for (Map.Entry<String, JsonElement> xxxOfElement : anyOfOrOneOf.entrySet()) {
String key = xxxOfElement.getKey();
JsonElement value = xxxOfElement.getValue();
for (String payload : interimCombinationList) {
if (payload.contains(ANY_OF) || payload.contains(ONE_OF)) {
result.add(JsonUtils.createValidOneOfAnyOfNode(payload, pathKey, key, String.valueOf(value), anyOfOrOneOf.keySet()));
} else {
result.add(payload);
}
}
}
createXxxOfCombinations(entry, result);

List<String> interimList = result.stream()
.filter(json -> !json.contains(ANY_OF) && !json.contains(ONE_OF))
Expand All @@ -663,6 +646,27 @@ private List<String> addNewCombination(JsonElement jsonElement) {
return new ArrayList<>(result);
}

private void createXxxOfCombinations(Map.Entry<String, Map<String, JsonElement>> entry, Set<String> result) {
String pathKey = entry.getKey();
Map<String, JsonElement> anyOfOrOneOf = entry.getValue();
List<String> interimCombinationList = new ArrayList<>(result).stream()
.limit(Math.min(processingArguments.getLimitXxxOfCombinations(), result.size()))
.collect(Collectors.toCollection(ArrayList::new));

result.clear();
for (Map.Entry<String, JsonElement> xxxOfElement : anyOfOrOneOf.entrySet()) {
String key = xxxOfElement.getKey();
JsonElement value = xxxOfElement.getValue();
for (String payload : interimCombinationList) {
if (payload.contains(ANY_OF) || payload.contains(ONE_OF)) {
result.add(JsonUtils.createValidOneOfAnyOfNode(payload, pathKey, key, String.valueOf(value), anyOfOrOneOf.keySet()));
} else {
result.add(payload);
}
}
}
}

private Map<String, Map<String, JsonElement>> joinCommonOneAndAnyOfs(Map<String, Map<String, JsonElement>> startingOneAnyOfs) {
Set<String> keySet = startingOneAnyOfs.entrySet()
.stream()
Expand Down

0 comments on commit abf083b

Please sign in to comment.