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