diff --git a/charts/candidate/Chart.yaml b/charts/candidate/Chart.yaml index 4936ab58f..b93a1f3bd 100644 --- a/charts/candidate/Chart.yaml +++ b/charts/candidate/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: ara -version: 9.2.1-rc.1 +version: 9.2.1-rc.2 home: https://github.com/Decathlon/ara description: | ARA helps you to fight against regressions by letting it preanalyze your non-regression tests runs, diff --git a/charts/candidate/values.yaml b/charts/candidate/values.yaml index 025c1a021..040733c19 100644 --- a/charts/candidate/values.yaml +++ b/charts/candidate/values.yaml @@ -8,7 +8,7 @@ api: image: registry: docker.io repository: decathlon/ara-api - tag: 10.0.1 + tag: 10.0.2 imagePullPolicy: IfNotPresent replicas: 1 annotations: {} diff --git a/code/api/api/pom.xml b/code/api/api/pom.xml index 540138f8b..e36d64e7d 100644 --- a/code/api/api/pom.xml +++ b/code/api/api/pom.xml @@ -28,7 +28,7 @@ com.decathlon.ara ara-api - 10.0.1 + 10.0.2 ARA API diff --git a/code/api/api/src/main/java/com/decathlon/ara/scenario/common/upload/ScenarioUploader.java b/code/api/api/src/main/java/com/decathlon/ara/scenario/common/upload/ScenarioUploader.java index c97e7be48..fdd3c3513 100644 --- a/code/api/api/src/main/java/com/decathlon/ara/scenario/common/upload/ScenarioUploader.java +++ b/code/api/api/src/main/java/com/decathlon/ara/scenario/common/upload/ScenarioUploader.java @@ -58,7 +58,10 @@ public void processUploadedContent(long projectId, String sourceCode, Technology } // Remove the previous scenarios from the same source => the database will remove the associations between functionalities and these scenarios - scenarioRepository.deleteAll(scenarioRepository.findAllBySourceId(source.getId())); + var allScenarios = scenarioRepository.findAllBySourceId(source.getId()); + allScenarios.forEach(this::removeScenarioAssociationSafely); + scenarioRepository.deleteAll(allScenarios); + // Let Hibernate make the DELETE SQL statements now, because we will add the same scenarios below: don't mess with old and new instances entityManager.flush(); entityManager.clear(); @@ -81,6 +84,21 @@ public void processUploadedContent(long projectId, String sourceCode, Technology functionalityRepository.saveAll(functionalities); } + public void removeScenarioAssociationSafely(Scenario scenario) { + var scenarioFunctionalities = scenario.getFunctionalities(); + while (!scenarioFunctionalities.isEmpty()) { + var initialSize = scenarioFunctionalities.size(); + scenarioFunctionalities.stream() + .findFirst() + .ifPresent(scenario::removeFunctionality); + if (scenarioFunctionalities.size() >= initialSize) { + // Check implementation of removeFunctionality decrease the size of functionalities set + throw new IllegalStateException( + "Error during scenario-functionality link deletion: prevent infinite loop"); + } + } + } + @FunctionalInterface public interface ScenarioListSupplier { List get(Source source) throws BadRequestException; diff --git a/code/api/database/pom.xml b/code/api/database/pom.xml index 9e4fca47c..533e0a95c 100644 --- a/code/api/database/pom.xml +++ b/code/api/database/pom.xml @@ -28,7 +28,7 @@ com.decathlon.ara ara-database - 10.0.1 + 10.0.2 ARA Database diff --git a/code/api/database/src/main/java/com/decathlon/ara/domain/Scenario.java b/code/api/database/src/main/java/com/decathlon/ara/domain/Scenario.java index bd42729b6..b2a14d680 100644 --- a/code/api/database/src/main/java/com/decathlon/ara/domain/Scenario.java +++ b/code/api/database/src/main/java/com/decathlon/ara/domain/Scenario.java @@ -97,6 +97,16 @@ public class Scenario implements Comparable { @ManyToMany(fetch = FetchType.LAZY, mappedBy = "scenarios") private Set functionalities = new HashSet<>(); + public void addFunctionality(Functionality functionality) { + this.functionalities.add(functionality); + functionality.getScenarios().add(this); + } + + public void removeFunctionality(Functionality functionality) { + this.functionalities.remove(functionality); + functionality.getScenarios().remove(this); + } + @Override public int compareTo(Scenario other) { // Keep business key in sync with @EqualsAndHashCode diff --git a/code/api/generated-cucumber-report/pom.xml b/code/api/generated-cucumber-report/pom.xml index 1bda8ac61..ed9e1c9dc 100644 --- a/code/api/generated-cucumber-report/pom.xml +++ b/code/api/generated-cucumber-report/pom.xml @@ -27,7 +27,7 @@ com.decathlon.ara ara-generated-cucumber-report - 10.0.1 + 10.0.2 ARA Cucumber diff --git a/code/api/jacoco-aggregation/pom.xml b/code/api/jacoco-aggregation/pom.xml index 01d30213b..fe5379c5b 100644 --- a/code/api/jacoco-aggregation/pom.xml +++ b/code/api/jacoco-aggregation/pom.xml @@ -3,14 +3,14 @@ ara-parent com.decathlon.ara - 10.0.1 + 10.0.2 4.0.0 com.decathlon.ara jacoco-aggregation pom - 10.0.1 + 10.0.2 Jacoco Report Aggregation diff --git a/code/api/lib/pom.xml b/code/api/lib/pom.xml index cbf61db3b..1152c5a43 100644 --- a/code/api/lib/pom.xml +++ b/code/api/lib/pom.xml @@ -27,7 +27,7 @@ com.decathlon.ara ara-lib - 10.0.1 + 10.0.2 16 diff --git a/code/api/pom.xml b/code/api/pom.xml index 250264d4c..3c431da51 100644 --- a/code/api/pom.xml +++ b/code/api/pom.xml @@ -28,7 +28,7 @@ com.decathlon.ara ara-parent pom - 10.0.1 + 10.0.2 ARA Parent