Skip to content

Commit

Permalink
fix: update parent report severities when appending new children (#89)
Browse files Browse the repository at this point in the history
Signed-off-by: Joris Mancini <joris.mancini_externe@rte-france.com>
  • Loading branch information
TheMaskedTurtle authored Sep 9, 2024
1 parent 30e98b1 commit fe51313
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 9 deletions.
14 changes: 8 additions & 6 deletions src/main/java/org/gridsuite/report/server/ReportService.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public Report getEmptyReport(@NonNull UUID id, @NonNull String defaultName) {

@Transactional
public void createReport(UUID id, ReportNode reportNode) {
reportNodeRepository.findById(id).ifPresentOrElse(
reportNodeRepository.findAllWithChildrenByIdIn(List.of(id)).stream().findFirst().ifPresentOrElse(
reportEntity -> {
LOGGER.debug("Reporter {} present, append ", reportNode.getMessage());
appendReportElements(reportEntity, reportNode);
Expand All @@ -128,7 +128,13 @@ private void appendReportElements(ReportNodeEntity reportEntity, ReportNode repo
.filter(child -> child.getMessage().equals(reportNode.getMessage()) && child.getMessage().contains("@"))
.findFirst()
.ifPresentOrElse(
child -> saveReportChildren(child, reportNode),
child -> {
// We don't have to update more ancestors because we only append at root level, and we know it
// But if we want to generalize appending to any report we should update the severity list of all
// the ancestors recursively
child.addSeverities(reportNode.getChildren().stream().map(ReportService::severities).flatMap(Collection::stream).collect(Collectors.toSet()));
reportNode.getChildren().forEach(c -> saveReportNodeRecursively(child, c));
},
() -> saveAllReportElements(reportEntity, reportNode)
);
}
Expand All @@ -138,10 +144,6 @@ private void createNewReport(UUID id, ReportNode reportNode) {
saveAllReportElements(persistedReport, reportNode);
}

private void saveReportChildren(ReportNodeEntity parentReportNodeEntity, ReportNode reportNode) {
reportNode.getChildren().forEach(child -> saveReportNodeRecursively(parentReportNodeEntity, child));
}

private void saveAllReportElements(ReportNodeEntity parentReportNodeEntity, ReportNode reportNode) {
saveReportNodeRecursively(parentReportNodeEntity, reportNode);
reportNodeRepository.save(parentReportNodeEntity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,8 @@ public ReportNodeEntity(UUID id, long nanos) {
this.id = id;
this.nanos = nanos;
}

public void addSeverities(Set<String> severities) {
this.severities.addAll(severities);
}
}
53 changes: 50 additions & 3 deletions src/test/java/org/gridsuite/report/server/ReportServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ void appendToExistingReport() {

SQLStatementCountValidator.reset();
reportService.createReport(parentReportId, anotherReport);
assertRequestsCount(2, 1, 0, 0);
assertRequestsCount(1, 1, 0, 0);

assertEquals(3, reportNodeRepository.findAll().size());
var parentReportEntity = reportService.getReportNodeEntity(parentReportId);
Expand All @@ -138,7 +138,7 @@ void appendToExistingReport() {
}

@Test
void appendIncermentalModificationReportToExistingReport() {
void appendIncrementalModificationReportToExistingReport() {
var reportNode = ReportNode.newRootReportNode()
.withMessageTemplate("test", "958de6eb-b5cb-4069-bd1f-fd75301b4a54@NetworkModification")
.build();
Expand All @@ -156,7 +156,7 @@ void appendIncermentalModificationReportToExistingReport() {
.add();
SQLStatementCountValidator.reset();
reportService.createReport(parentReportId, anotherReport);
assertRequestsCount(2, 1, 0, 0);
assertRequestsCount(1, 1, 0, 0);

assertEquals(4, reportNodeRepository.findAll().size());
var parentReportEntity = reportService.getReportNodeEntity(parentReportId);
Expand All @@ -166,6 +166,53 @@ void appendIncermentalModificationReportToExistingReport() {
assertEquals(2, reportService.getReportNodeEntity(parentReportEntity.get().getChildren().get(0).getId()).orElseThrow().getChildren().size());
}

@Test
void testParentReportsSeverityListIsUpdatedAfterAppendingNewReport() {
var reportNode = ReportNode.newRootReportNode()
.withMessageTemplate("test", "958de6eb-b5cb-4069-bd1f-fd75301b4a54@NetworkModification")
.build();
reportNode.newReportNode()
.withMessageTemplate("okok", "test")
.withSeverity(TypedValue.WARN_SEVERITY)
.add();
reportNode.newReportNode()
.withMessageTemplate("okok", "test")
.withSeverity(TypedValue.INFO_SEVERITY)
.add();
var subReportNode = reportNode.newReportNode()
.withMessageTemplate("genMod", "GENERATOR_MODIFICATION")
.add();
subReportNode.newReportNode()
.withMessageTemplate("hehe", "stuff")
.withSeverity(TypedValue.WARN_SEVERITY)
.add();
var parentReportId = UUID.randomUUID();
reportService.createReport(parentReportId, reportNode);
var rootReportNodeEntity = reportService.getReportNodeEntity(parentReportId).orElseThrow();
var reportNodeEntity = reportService.getReportNodeEntity(rootReportNodeEntity.getChildren().get(0).getId()).orElseThrow();
assertEquals(Set.of("INFO", "WARN"), reportNodeEntity.getSeverities());
var subReportNodeEntity = reportService.getReportNodeEntity(reportNodeEntity.getChildren().get(2).getId()).orElseThrow();
assertEquals(Set.of("WARN"), subReportNodeEntity.getSeverities());

var anotherReport = ReportNode.newRootReportNode()
.withMessageTemplate("test", "958de6eb-b5cb-4069-bd1f-fd75301b4a54@NetworkModification")
.build();
anotherReport.newReportNode()
.withMessageTemplate("twtMod", "TWO_WINDINGS_TRANSFORMER_MODIFICATION")
.withSeverity(TypedValue.ERROR_SEVERITY)
.add();
SQLStatementCountValidator.reset();
reportService.createReport(parentReportId, anotherReport);
assertRequestsCount(2, 3, 0, 0);

var rootReportNodeEntityBis = reportService.getReportNodeEntity(parentReportId).orElseThrow();
var reportNodeEntityBis = reportService.getReportNodeEntity(rootReportNodeEntityBis.getChildren().get(0).getId()).orElseThrow();
assertEquals(Set.of("INFO", "WARN", "ERROR"), reportNodeEntityBis.getSeverities());
assertEquals(4, reportNodeEntityBis.getChildren().size());
var subReportNodeEntityBis = reportService.getReportNodeEntity(reportNodeEntityBis.getChildren().get(2).getId()).orElseThrow();
assertEquals(Set.of("WARN"), subReportNodeEntityBis.getSeverities());
}

private static void assertReportsAreEqual(ReportNodeEntity entity, ReportNode reportNode, Set<String> severityList) {
assertEquals(reportNode.getMessage(), entity.getMessage());
assertEquals(severityList, entity.getSeverities());
Expand Down

0 comments on commit fe51313

Please sign in to comment.