Skip to content

Commit 9b12292

Browse files
authored
fix: 2092 adding new impurity functionality not working (#2093)
1 parent 1f9bc08 commit 9b12292

File tree

7 files changed

+102
-64
lines changed

7 files changed

+102
-64
lines changed

frontend/src/views/CONSEP/TestingActivities/PurityContent/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const fieldsConfig = {
1111
secondaryfieldName: 'Impurity type',
1212
placeholder: 'Choose an option',
1313
label: 'impurityType',
14-
options: ['Impurity1', 'Impurity2', 'Impurity3']
14+
options: ['Im1', 'Im2', 'Im3']
1515

1616
},
1717
startDate: {

frontend/src/views/CONSEP/TestingActivities/PurityContent/index.tsx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -273,20 +273,25 @@ const PurityContent = () => {
273273
};
274274

275275
const addImpurity = (replicateNumber: number) => {
276-
let nextRank: number = 1;
277-
if (replicateNumber in impurities) {
278-
const lastItem = impurities[replicateNumber].at(-1);
276+
let nextRank = 1;
277+
const replicateImpurities = impurities[replicateNumber] || [];
278+
279+
if (replicateImpurities.length > 0) {
280+
const lastItem = replicateImpurities.at(-1);
279281
if (lastItem) {
280282
nextRank = lastItem.debrisRank + 1;
281283
}
282284
}
283-
updateImpuritiesMutation.mutate([
284-
{
285-
replicateNumber,
286-
debrisRank: nextRank,
287-
debrisTypeCode: ''
288-
}
289-
]);
285+
286+
const newImpurity = {
287+
debrisRank: nextRank,
288+
debrisCategory: ''
289+
};
290+
291+
setImpurities((prev) => ({
292+
...prev,
293+
[replicateNumber]: [...replicateImpurities, newImpurity]
294+
}));
290295
};
291296

292297
const handleCalculateAverage = () => {};
@@ -408,14 +413,16 @@ const PurityContent = () => {
408413
{`Replicate ${replicateNumber}`}
409414
</h5>
410415
{
411-
Object.keys(impurities).length > 0
416+
impurities[replicateNumber]
417+
&& impurities[replicateNumber].length > 0
412418
&& impurities[replicateNumber].map(
413419
(impurity) => impurityPerReplicate(impurity, replicateNumber)
414420
)
415421
}
416422
<div className="consep-impurity-button">
417423
{
418-
Object.keys(impurities).length > 0
424+
impurities[replicateNumber]
425+
&& impurities[replicateNumber].length > 0
419426
&& impurities[replicateNumber].length >= 10
420427
? (
421428
<InlineNotification

oracle-api/src/main/java/ca/bc/gov/oracleapi/endpoint/consep/PurityTestsEndpoint.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import ca.bc.gov.oracleapi.config.SparLog;
44
import ca.bc.gov.oracleapi.dto.consep.ActivityFormDto;
5+
import ca.bc.gov.oracleapi.dto.consep.PurityDebrisDto;
56
import ca.bc.gov.oracleapi.dto.consep.PurityDebrisFormDto;
67
import ca.bc.gov.oracleapi.dto.consep.PurityReplicateFormDto;
78
import ca.bc.gov.oracleapi.dto.consep.PurityTestDto;
89
import ca.bc.gov.oracleapi.entity.consep.ActivityEntity;
9-
import ca.bc.gov.oracleapi.entity.consep.PurityDebrisEntity;
1010
import ca.bc.gov.oracleapi.entity.consep.PurityReplicateEntity;
1111
import ca.bc.gov.oracleapi.security.RoleAccessConfig;
1212
import ca.bc.gov.oracleapi.service.consep.ActivityService;
@@ -374,7 +374,7 @@ public List<Integer> deleteReplicates(
374374
*
375375
* @param riaKey The identifier for the test activities related data.
376376
* @param debrisFormDtos A list of {@link PurityDebrisFormDto} containing the new values.
377-
* @return the {@link PurityDebrisEntity} updated
377+
* @return the {@link PurityDebrisDto} updated
378378
*/
379379
@PatchMapping(
380380
value = "debris/{riaKey}",
@@ -390,7 +390,7 @@ public List<Integer> deleteReplicates(
390390
@ApiResponse(responseCode = "400", description = "Invalid object"),
391391
@ApiResponse(responseCode = "404", description = "Replicate not found")
392392
})
393-
public List<PurityDebrisEntity> updateDebrisField(
393+
public List<PurityDebrisDto> updateDebrisField(
394394
@Parameter(
395395
name = "riaKey",
396396
in = ParameterIn.PATH,
@@ -439,7 +439,7 @@ public List<PurityDebrisEntity> updateDebrisField(
439439
schema = @Schema(implementation = Void.class)))
440440
})
441441
@RoleAccessConfig({ "SPAR_TSC_ADMIN", "SPAR_MINISTRY_ORCHARD", "SPAR_NONMINISTRY_ORCHARD" })
442-
public List<PurityDebrisEntity> deleteDebris(
442+
public List<PurityDebrisDto> deleteDebris(
443443
@Parameter(
444444
name = "riaKey",
445445
in = ParameterIn.PATH,
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package ca.bc.gov.oracleapi.mapper;
2+
3+
import ca.bc.gov.oracleapi.dto.consep.PurityDebrisDto;
4+
import ca.bc.gov.oracleapi.entity.consep.PurityDebrisEntity;
5+
6+
/**
7+
* Utility class responsible for mapping between {@link PurityDebrisEntity}
8+
* and {@link PurityDebrisDto}.
9+
*/
10+
public class PurityDebrisMapper {
11+
/**
12+
* Converts a {@link PurityDebrisEntity} into a {@link PurityDebrisDto}.
13+
*
14+
* @param entity the entity to be converted
15+
* @return a DTO containing the relevant data from the entity
16+
*/
17+
public static PurityDebrisDto convertToDto(PurityDebrisEntity entity) {
18+
return new PurityDebrisDto(
19+
entity.getId().getRiaKey(),
20+
entity.getId().getReplicateNumber(),
21+
entity.getDebrisSeqNumber(),
22+
entity.getId().getDebrisRank(),
23+
entity.getDebrisTypeCode()
24+
);
25+
}
26+
}

oracle-api/src/main/java/ca/bc/gov/oracleapi/service/consep/PurityTestService.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import ca.bc.gov.oracleapi.entity.consep.idclass.DebrisId;
1414
import ca.bc.gov.oracleapi.entity.consep.idclass.ReplicateId;
1515
import ca.bc.gov.oracleapi.exception.InvalidTestActivityKeyException;
16+
import ca.bc.gov.oracleapi.mapper.PurityDebrisMapper;
1617
import ca.bc.gov.oracleapi.repository.consep.ActivityRepository;
1718
import ca.bc.gov.oracleapi.repository.consep.PurityDebrisRepository;
1819
import ca.bc.gov.oracleapi.repository.consep.PurityReplicateRepository;
@@ -174,7 +175,7 @@ public List<PurityReplicateEntity> updateReplicateField(
174175
* @param debrisFormDtos an object with the values to be updated
175176
*/
176177
@Transactional
177-
public List<PurityDebrisEntity> updateDebris(
178+
public List<PurityDebrisDto> updateDebris(
178179
@NonNull BigDecimal riaKey,
179180
@NonNull List<PurityDebrisFormDto> debrisFormDtos
180181
) {
@@ -228,7 +229,9 @@ public List<PurityDebrisEntity> updateDebris(
228229
List<PurityDebrisEntity> saved = debrisRepository.saveAll(debrisToSave);
229230

230231
SparLog.info("Saved {} purity debris records for riaKey: {}", saved.size(), riaKey);
231-
return saved;
232+
return saved.stream()
233+
.map(PurityDebrisMapper::convertToDto)
234+
.collect(Collectors.toList());
232235
}
233236

234237
/**
@@ -350,7 +353,7 @@ public void deleteSinglePurityReplicate(
350353
* @param debrisRank the rank of the debris to be deleted
351354
*/
352355
@Transactional
353-
public List<PurityDebrisEntity> deletePurityDebris(
356+
public List<PurityDebrisDto> deletePurityDebris(
354357
@NonNull BigDecimal riaKey,
355358
@NonNull Integer replicateNumber,
356359
@NonNull Integer debrisRank
@@ -376,6 +379,11 @@ public List<PurityDebrisEntity> deletePurityDebris(
376379
debrisRepository.shiftRanksDown(riaKey, replicateNumber, debrisRank);
377380
SparLog.info("Updated all debris below the removed rank {}", debrisRank);
378381

379-
return debrisRepository.findByRiaKeyAndReplicateNumbers(riaKey, replicateIds);
382+
List<PurityDebrisEntity> updatedDebrisList =
383+
debrisRepository.findByRiaKeyAndReplicateNumbers(riaKey, replicateIds);
384+
385+
return updatedDebrisList.stream()
386+
.map(PurityDebrisMapper::convertToDto)
387+
.collect(Collectors.toList());
380388
}
381389
}

oracle-api/src/test/java/ca/bc/gov/oracleapi/endpoint/consep/PurityTestsEndpointTest.java

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@
2121
import ca.bc.gov.oracleapi.dto.consep.PurityReplicateFormDto;
2222
import ca.bc.gov.oracleapi.dto.consep.PurityTestDto;
2323
import ca.bc.gov.oracleapi.entity.consep.ActivityEntity;
24-
import ca.bc.gov.oracleapi.entity.consep.PurityDebrisEntity;
2524
import ca.bc.gov.oracleapi.entity.consep.PurityReplicateEntity;
26-
import ca.bc.gov.oracleapi.entity.consep.idclass.DebrisId;
2725
import ca.bc.gov.oracleapi.entity.consep.idclass.ReplicateId;
2826
import ca.bc.gov.oracleapi.service.consep.ActivityService;
2927
import ca.bc.gov.oracleapi.service.consep.PurityTestService;
@@ -472,34 +470,29 @@ void deleteReplicate_shouldReturnNotFound() throws Exception {
472470
void updateDebrisField_shouldReturnUpdatedDebrisList() throws Exception {
473471
BigDecimal riaKey = new BigDecimal("1234567890");
474472

475-
PurityDebrisEntity entity1 = new PurityDebrisEntity();
476-
entity1.setId(new DebrisId(riaKey, 1, 1));
477-
entity1.setDebrisTypeCode("ABC");
478-
479-
PurityDebrisEntity entity2 = new PurityDebrisEntity();
480-
entity2.setId(new DebrisId(riaKey, 1, 2));
481-
entity2.setDebrisTypeCode("DEF");
473+
PurityDebrisDto dto1 = new PurityDebrisDto(riaKey, 1, null, 1, "ABC");
474+
PurityDebrisDto dto2 = new PurityDebrisDto(riaKey, 1, null, 2, "DEF");
482475

483476
PurityDebrisFormDto debrisForm1 = new PurityDebrisFormDto(1, 1, "ABC");
484477
PurityDebrisFormDto debrisForm2 = new PurityDebrisFormDto(1, 2, "DEF");
485478

486479
List<PurityDebrisFormDto> debrisFormList = List.of(debrisForm1, debrisForm2);
487-
List<PurityDebrisEntity> debrisEntities = List.of(entity1, entity2);
480+
List<PurityDebrisDto> debrisDtos = List.of(dto1, dto2);
488481

489482
when(purityTestService.updateDebris(eq(riaKey), eq(debrisFormList)))
490-
.thenReturn(debrisEntities);
483+
.thenReturn(debrisDtos);
491484

492485
mockMvc.perform(patch("/api/purity-tests/debris/{riaKey}", riaKey)
493486
.with(csrf().asHeader())
494487
.contentType(MediaType.APPLICATION_JSON)
495488
.accept(MediaType.APPLICATION_JSON)
496489
.content(objectMapper.writeValueAsString(debrisFormList)))
497490
.andExpect(status().isOk())
498-
.andExpect(jsonPath("$[0].id.replicateNumber").value(1))
499-
.andExpect(jsonPath("$[0].id.debrisRank").value(1))
491+
.andExpect(jsonPath("$[0].replicateNumber").value(1))
492+
.andExpect(jsonPath("$[0].debrisRank").value(1))
500493
.andExpect(jsonPath("$[0].debrisTypeCode").value("ABC"))
501-
.andExpect(jsonPath("$[1].id.replicateNumber").value(1))
502-
.andExpect(jsonPath("$[1].id.debrisRank").value(2))
494+
.andExpect(jsonPath("$[1].replicateNumber").value(1))
495+
.andExpect(jsonPath("$[1].debrisRank").value(2))
503496
.andExpect(jsonPath("$[1].debrisTypeCode").value("DEF"));
504497
}
505498

@@ -510,21 +503,19 @@ void updateSingleDebris_shouldSucceed() throws Exception {
510503

511504
PurityDebrisFormDto debrisForm = new PurityDebrisFormDto(1, 1, "ABC");
512505

513-
PurityDebrisEntity updatedEntity = new PurityDebrisEntity();
514-
updatedEntity.setId(new DebrisId(riaKey, 1, 1));
515-
updatedEntity.setDebrisTypeCode("ABC");
506+
PurityDebrisDto updatedDto = new PurityDebrisDto(riaKey, 1, null, 1, "ABC");
516507

517508
when(purityTestService.updateDebris(eq(riaKey), eq(List.of(debrisForm))))
518-
.thenReturn(List.of(updatedEntity));
509+
.thenReturn(List.of(updatedDto));
519510

520511
mockMvc.perform(patch("/api/purity-tests/debris/{riaKey}", riaKey)
521512
.with(csrf().asHeader())
522513
.contentType(MediaType.APPLICATION_JSON)
523514
.accept(MediaType.APPLICATION_JSON)
524515
.content(objectMapper.writeValueAsString(List.of(debrisForm))))
525516
.andExpect(status().isOk())
526-
.andExpect(jsonPath("$[0].id.replicateNumber").value(1))
527-
.andExpect(jsonPath("$[0].id.debrisRank").value(1))
517+
.andExpect(jsonPath("$[0].replicateNumber").value(1))
518+
.andExpect(jsonPath("$[0].debrisRank").value(1))
528519
.andExpect(jsonPath("$[0].debrisTypeCode").value("ABC"));
529520
}
530521

@@ -551,26 +542,22 @@ void deleteDebris_shouldSucceed() throws Exception {
551542
int replicateNumber = 1;
552543
int debrisRank = 2;
553544

554-
PurityDebrisEntity entity1 = new PurityDebrisEntity();
555-
entity1.setId(new DebrisId(riaKey, replicateNumber, 1));
556-
entity1.setDebrisTypeCode("ABC");
557-
558-
PurityDebrisEntity entity2 = new PurityDebrisEntity();
559-
entity2.setId(new DebrisId(riaKey, replicateNumber, 2));
560-
entity2.setDebrisTypeCode("DEF");
545+
PurityDebrisDto remainingDebris = new PurityDebrisDto(
546+
riaKey, replicateNumber, null, 1, "ABC"
547+
);
561548

562-
List<PurityDebrisEntity> deletedDebrisList = List.of(entity1);
549+
List<PurityDebrisDto> updatedList = List.of(remainingDebris);
563550

564551
when(purityTestService.deletePurityDebris(riaKey, replicateNumber, debrisRank))
565-
.thenReturn(deletedDebrisList);
552+
.thenReturn(updatedList);
566553

567554
mockMvc.perform(delete("/api/purity-tests/debris/{riaKey}/{replicateNumber}/{debrisRank}",
568555
riaKey, replicateNumber, debrisRank)
569556
.with(csrf().asHeader())
570557
.contentType(MediaType.APPLICATION_JSON))
571558
.andExpect(status().isOk())
572559
.andExpect(jsonPath("$.length()").value(1))
573-
.andExpect(jsonPath("$[0].id.debrisRank").value(1))
560+
.andExpect(jsonPath("$[0].debrisRank").value(1))
574561
.andExpect(jsonPath("$[0].debrisTypeCode").value("ABC"));
575562
}
576563

oracle-api/src/test/java/ca/bc/gov/oracleapi/service/consep/PurityTestServiceTest.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import static org.mockito.Mockito.verify;
1212
import static org.mockito.Mockito.when;
1313

14+
import ca.bc.gov.oracleapi.dto.consep.PurityDebrisDto;
1415
import ca.bc.gov.oracleapi.dto.consep.PurityDebrisFormDto;
1516
import ca.bc.gov.oracleapi.dto.consep.PurityReplicateDto;
1617
import ca.bc.gov.oracleapi.dto.consep.PurityReplicateFormDto;
@@ -225,17 +226,22 @@ void updateDebris_shouldUpdateExisting() {
225226
existing.setDebrisTypeCode("OLD");
226227

227228
when(debrisRepository.findByIdRiaKeyAndIdReplicateNumberAndIdDebrisRank(
228-
riaKey, replicateNumber, debrisRank)).thenReturn(Optional.of(existing));
229-
when(debrisRepository.saveAll(anyList())).thenAnswer(invocation -> invocation.getArgument(0));
229+
riaKey, replicateNumber, debrisRank))
230+
.thenReturn(Optional.of(existing));
231+
232+
when(debrisRepository.saveAll(anyList()))
233+
.thenAnswer(invocation -> invocation.getArgument(0));
230234

231235
PurityDebrisFormDto formDto = new PurityDebrisFormDto(
232236
replicateNumber, debrisRank, "NEW"
233237
);
234238

235-
List<PurityDebrisEntity> result = purityTestService.updateDebris(riaKey, List.of(formDto));
239+
List<PurityDebrisDto> result = purityTestService.updateDebris(riaKey, List.of(formDto));
236240

237241
assertEquals(1, result.size());
238-
assertEquals("NEW", result.get(0).getDebrisTypeCode());
242+
assertEquals("NEW", result.get(0).debrisTypeCode());
243+
assertEquals(debrisRank, result.get(0).debrisRank());
244+
assertEquals(riaKey, result.get(0).riaKey());
239245
}
240246

241247
@Test
@@ -244,16 +250,20 @@ void updateDebris_shouldCreateIfNotFound() {
244250
PurityDebrisFormDto formDto = new PurityDebrisFormDto(
245251
replicateNumber, debrisRank, "ABC"
246252
);
247-
253+
248254
when(debrisRepository.findByIdRiaKeyAndIdReplicateNumberAndIdDebrisRank(
249-
riaKey, replicateNumber, debrisRank)).thenReturn(Optional.empty());
250-
when(debrisRepository.saveAll(anyList())).thenAnswer(invocation -> invocation.getArgument(0));
251-
252-
List<PurityDebrisEntity> result = purityTestService.updateDebris(riaKey, List.of(formDto));
253-
255+
riaKey, replicateNumber, debrisRank))
256+
.thenReturn(Optional.empty());
257+
258+
when(debrisRepository.saveAll(anyList()))
259+
.thenAnswer(invocation -> invocation.getArgument(0));
260+
261+
List<PurityDebrisDto> result = purityTestService.updateDebris(riaKey, List.of(formDto));
262+
254263
assertEquals(1, result.size());
255-
assertEquals("ABC", result.get(0).getDebrisTypeCode());
256-
assertEquals(riaKey, result.get(0).getId().getRiaKey());
264+
assertEquals("ABC", result.get(0).debrisTypeCode());
265+
assertEquals(riaKey, result.get(0).riaKey());
266+
assertEquals(replicateNumber, result.get(0).replicateNumber());
257267
}
258268

259269
@Test

0 commit comments

Comments
 (0)