Skip to content

Commit

Permalink
Add sample unit state change on delivery to case (#203)
Browse files Browse the repository at this point in the history
* Add sample unit state change on delivery to case

* auto patch increment

* Tweak logging

* Small tweak to diagram

* Another small tweak

Co-authored-by: ras-rm-pr-bot <[email protected]>
  • Loading branch information
insacuri and ras-rm-pr-bot authored Sep 3, 2021
1 parent 6b0cf4a commit 2fed769
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 4 deletions.
4 changes: 2 additions & 2 deletions _infra/helm/sample/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 12.0.6
version: 12.0.7

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 12.0.6
appVersion: 12.0.7
2 changes: 1 addition & 1 deletion diagrams/sample-unit-state.puml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ skinparam state {

[*] --> INIT
INIT --> PERSISTED : persisting [[https://github.com/ONSdigital/rm-sample-service/blob/main/src/main/java/uk/gov/ons/ctp/response/sample/service/impl/SampleServiceImpl.java#L201 *]]
PERSISTED --> DELIVERED : delivering [[https://github.com/ONSdigital/rm-sample-service/blob/main/src/main/java/uk/gov/ons/ctp/response/sample/scheduled/distribution/SampleUnitDistributor.java#L146 *]]
PERSISTED --> DELIVERED : delivering to case [[https://github.com/ONSdigital/rm-sample-service/blob/main/src/main/java/uk/gov/ons/ctp/response/sample/service/SampleDistributionService.java#L103 *]]
@enduml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,19 @@

import java.util.List;
import java.util.UUID;
import libs.common.error.CTPException;
import libs.common.state.StateTransitionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import uk.gov.ons.ctp.response.sample.domain.model.SampleSummary;
import uk.gov.ons.ctp.response.sample.domain.model.SampleUnit;
import uk.gov.ons.ctp.response.sample.domain.repository.SampleSummaryRepository;
import uk.gov.ons.ctp.response.sample.domain.repository.SampleUnitRepository;
import uk.gov.ons.ctp.response.sample.message.SampleUnitPublisher;
import uk.gov.ons.ctp.response.sample.representation.SampleUnitDTO;
import uk.gov.ons.ctp.response.sample.representation.SampleUnitParentDTO;

@Service
Expand All @@ -22,6 +27,12 @@ public class SampleSummaryDistributionService {
@Autowired private SampleService sampleService;
@Autowired private SampleUnitPublisher sampleUnitPublisher;
@Autowired private SampleSummaryRepository sampleSummaryRepository;
@Autowired private SampleUnitRepository sampleUnitRepository;

@Autowired
@Qualifier("sampleUnitTransitionManager")
private StateTransitionManager<SampleUnitDTO.SampleUnitState, SampleUnitDTO.SampleUnitEvent>
sampleUnitTransitionManager;

/**
* Distributes the sample units to the case service to create cases against each sample unit. This
Expand Down Expand Up @@ -55,6 +66,7 @@ public void distribute(UUID sampleSummaryId)
sampleUnit -> {
try {
distributeSampleUnit(sampleSummary.getCollectionExerciseId(), sampleUnit);

} catch (RuntimeException ex) {
LOG.error(
"Failed to distribute sample unit", kv("SampleSummaryId", sampleSummaryId), ex);
Expand All @@ -81,6 +93,20 @@ public void distribute(UUID sampleSummaryId)
public void distributeSampleUnit(UUID collectionExerciseId, SampleUnit sampleUnit) {
SampleUnitParentDTO parent = createSampleUnitParentDTOObject(collectionExerciseId, sampleUnit);
sampleUnitPublisher.sendSampleUnitToCase(parent);
try {
LOG.info(
"Transitioning state of sampleUnit",
kv("id", sampleUnit.getId()),
kv("from", sampleUnit.getState()),
kv("to", SampleUnitDTO.SampleUnitEvent.DELIVERING));
SampleUnitDTO.SampleUnitState newState =
sampleUnitTransitionManager.transition(
sampleUnit.getState(), SampleUnitDTO.SampleUnitEvent.DELIVERING);
sampleUnit.setState(newState);
sampleUnitRepository.saveAndFlush(sampleUnit);
} catch (CTPException e) {
LOG.error("Error occurred whilst transitioning state", e);
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import libs.common.error.CTPException;
import libs.common.state.StateTransitionManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
Expand All @@ -15,7 +17,9 @@
import uk.gov.ons.ctp.response.sample.domain.model.SampleSummary;
import uk.gov.ons.ctp.response.sample.domain.model.SampleUnit;
import uk.gov.ons.ctp.response.sample.domain.repository.SampleSummaryRepository;
import uk.gov.ons.ctp.response.sample.domain.repository.SampleUnitRepository;
import uk.gov.ons.ctp.response.sample.message.SampleUnitPublisher;
import uk.gov.ons.ctp.response.sample.representation.SampleUnitDTO;
import uk.gov.ons.ctp.response.sample.representation.SampleUnitParentDTO;

/** tests */
Expand All @@ -30,6 +34,12 @@ public class SampleSummaryDistributionServiceTest {
private static final String SAMPLE_UNIT_TYPE = "B";

@Mock private SampleSummaryRepository sampleSummaryRepository;
@Mock private SampleUnitRepository sampleUnitRepository;

@Mock
private StateTransitionManager<SampleUnitDTO.SampleUnitState, SampleUnitDTO.SampleUnitEvent>
sampleUnitStateTransitionManager;

@Mock private SampleUnitPublisher sampleUnitPublisher;
@Mock private SampleService sampleService;

Expand All @@ -38,7 +48,7 @@ public class SampleSummaryDistributionServiceTest {

@Test
public void testDistribute()
throws UnknownSampleSummaryException, NoSampleUnitsInSampleSummaryException {
throws UnknownSampleSummaryException, NoSampleUnitsInSampleSummaryException, CTPException {
SampleSummary sampleSummary = new SampleSummary();
sampleSummary.setId(SAMPLE_SUMMARY_ID);
sampleSummary.setSampleSummaryPK(1);
Expand All @@ -58,6 +68,8 @@ public void testDistribute()

sampleSummaryDistributionService.distribute(SAMPLE_SUMMARY_ID);
verify(sampleUnitPublisher, times(1)).sendSampleUnitToCase(any());
verify(sampleUnitStateTransitionManager, times(1)).transition(any(), any());
verify(sampleUnitRepository, times(1)).saveAndFlush(any());
verify(sampleSummaryRepository, times(1)).saveAndFlush(any());
}

Expand Down

0 comments on commit 2fed769

Please sign in to comment.