Skip to content

Commit fe12378

Browse files
committed
fix: get context using either collectionInstrumentId or campaignId
1 parent 70aac0c commit fe12378

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

src/main/java/fr/insee/genesis/domain/service/context/DataProcessingContextService.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.time.LocalDateTime;
2020
import java.util.ArrayList;
21-
import java.util.Arrays;
2221
import java.util.HashSet;
2322
import java.util.List;
2423
import java.util.Set;
@@ -149,26 +148,38 @@ public DataProcessingContextModel getContext(String interrogationId) throws Gene
149148
throw new GenesisException(404,"No interrogation in database with id %s".formatted(interrogationId));
150149
}
151150
Set<String> partitionIds = new HashSet<>();
151+
Set<String> campaignIds = new HashSet<>();
152+
Set<String> collectionInstrumentIds = new HashSet<>();
153+
152154
for (SurveyUnitModel su : surveyUnitModels){
153155
if (su.getCampaignId()!=null){
154-
partitionIds.add(su.getCampaignId());
155-
break;
156+
campaignIds.add(su.getCampaignId());
157+
}
158+
if (su.getCollectionInstrumentId()!=null){
159+
collectionInstrumentIds.add(su.getCampaignId());
156160
}
157-
partitionIds.add(su.getCollectionInstrumentId());
158161
}
159-
if(partitionIds.isEmpty()){
162+
if(campaignIds.size() > 1 || collectionInstrumentIds.size()>1){
163+
throw new GenesisException(500,"Multiple partitions for interrogation %s".formatted(interrogationId));
164+
}
165+
166+
if(campaignIds.isEmpty() && collectionInstrumentIds.isEmpty()){
160167
return null;
161168
}
162-
if(partitionIds.size() > 1){
163-
throw new GenesisException(500,"Multiple partitions for interrogation %s %n%s".formatted(
164-
interrogationId,
165-
Arrays.toString(partitionIds.toArray())
166-
));
169+
170+
DataProcessingContextModel contextModel = new DataProcessingContextModel();
171+
if (!collectionInstrumentIds.isEmpty()){
172+
contextModel = DataProcessingContextMapper.INSTANCE.documentToModel(
173+
dataProcessingContextPersistancePort.findByPartitionId(collectionInstrumentIds.stream().toList().getFirst())
174+
);
167175
}
168176

169-
return DataProcessingContextMapper.INSTANCE.documentToModel(
170-
dataProcessingContextPersistancePort.findByPartitionId(partitionIds.stream().toList().getFirst())
171-
);
177+
if (contextModel.getId()==null && !campaignIds.isEmpty()) {
178+
contextModel = DataProcessingContextMapper.INSTANCE.documentToModel(
179+
dataProcessingContextPersistancePort.findByPartitionId(campaignIds.stream().toList().getFirst()));
180+
}
181+
182+
return contextModel;
172183
}
173184

174185
@Override

src/test/java/fr/insee/genesis/domain/service/context/DataProcessingContextServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ void getContext_shouldThrow500IfMultiplePartitions() {
209209
//To ensure test is portable on Unix/Linux/macOS and windows systems
210210
String normalizedMessage = ex.getMessage().replaceAll("\\r?\\n", "");
211211
Assertions.assertThat(ex.getStatus()).isEqualTo(500);
212-
Assertions.assertThat(normalizedMessage).isEqualTo("Multiple partitions for interrogation 00001 [CAMPAIGN2, CAMPAIGN1]");
212+
Assertions.assertThat(normalizedMessage).isEqualTo("Multiple partitions for interrogation 00001");
213213
}
214214

215215
@Test

0 commit comments

Comments
 (0)