Skip to content

Commit

Permalink
Fix for school move numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
arcshiftsolutions committed Dec 13, 2023
1 parent b14aed6 commit 4347509
Showing 2 changed files with 63 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -451,7 +451,8 @@ private SchoolEntity moveSchoolHelper(School school, School existingSchool) {
List<SchoolEntity> schools = schoolRepository.findBySchoolNumberAndDistrictID(
school.getSchoolNumber(), UUID.fromString(school.getDistrictId()));

if(school.getSchoolCategoryCode().equals(existingSchool.getSchoolCategoryCode()) && schools.isEmpty()) {
if(school.getSchoolCategoryCode().equals(existingSchool.getSchoolCategoryCode())
&& school.getFacilityTypeCode().equals(existingSchool.getFacilityTypeCode()) && schools.isEmpty()) {
schoolEntity.setSchoolNumber(school.getSchoolNumber());
} else {
schoolEntity.setSchoolNumber(
Original file line number Diff line number Diff line change
@@ -704,6 +704,67 @@ public void testHandleEvent_givenEventTypeMOVE_SCHOOL_withIndependentSchoolCateg
assertThat(toSchoolEntityComplete.getSchoolMoveFrom().stream().toList().get(0).getFromSchoolId()).isEqualTo(fromSchoolEntityComplete.getSchoolId());
}

@Test
public void testHandleEvent_givenEventTypeMOVE_SCHOOL_withIndependentSchoolFacilityChange__DoesExistAndSynchronousNatsMessage_shouldRespondWithDataAndCreateMoveHistory() throws IOException, ExecutionException, InterruptedException {
final DistrictTombstoneEntity dist = this.districtTombstoneRepository.save(this.createDistrictData());
SchoolEntity toSchoolEntity = this.createNewSchoolData("97100", "INDEPEND", "DISTONLINE");
SchoolEntity fromSchoolEntity = this.createNewSchoolData("96100", "INDEPEND", "STANDARD");
LocalDateTime moveDate = LocalDateTime.now().plusDays(1).truncatedTo(ChronoUnit.MILLIS);

Set<SchoolAddressEntity> schoolAddressSet = new HashSet<>();
SchoolAddressEntity fromSchoolAddressEntity = SchoolAddressEntity.builder()
.addressTypeCode("MAILING").addressLine1("123 This Street").city("Victoria")
.provinceCode("BC").countryCode("CA").postal("V1V2V3").schoolEntity(fromSchoolEntity).build();
schoolAddressSet.add(fromSchoolAddressEntity);

toSchoolEntity.setDistrictEntity(dist);
fromSchoolEntity.setDistrictEntity(dist);
fromSchoolEntity.setAddresses(schoolAddressSet);
schoolRepository.save(fromSchoolEntity);

School toSchool = new School();
SchoolMapper map = SchoolMapper.mapper;

BeanUtils.copyProperties(map.toStructure(toSchoolEntity), toSchool);

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule()).configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

MoveSchoolData moveSchoolData = createMoveSchoolData(toSchool, fromSchoolEntity.getSchoolId(), moveDate);

UUID sagaId = UUID.randomUUID();
final Event event = Event.builder().eventType(MOVE_SCHOOL).sagaId(sagaId).eventPayload(objectMapper.writeValueAsString(moveSchoolData)).build();

eventHandlerServiceUnderTest.handleMoveSchoolEvent(event).getLeft();
Optional<InstituteEvent> schoolUpdatedEvent = instituteEventRepository.findBySagaIdAndEventType(sagaId, MOVE_SCHOOL.toString());
assertThat(schoolUpdatedEvent).isPresent();
assertThat(schoolUpdatedEvent.get().getEventStatus()).isEqualTo(MESSAGE_PUBLISHED.toString());
assertThat(schoolUpdatedEvent.get().getEventOutcome()).isEqualTo(SCHOOL_MOVED.toString());

//check that data in event payload is updated
MoveSchoolData moveSchoolEventData = JsonUtil.getJsonObjectFromString(MoveSchoolData.class, event.getEventPayload());
assertThat(moveSchoolEventData.getToSchool().getSchoolId()).isNotNull();
assertThat(moveSchoolEventData.getToSchool().getSchoolNumber()).isEqualTo("99000"); //new school number since school number already exists in district
assertThat(moveSchoolEventData.getToSchool().getSchoolNumber()).startsWith("99");

//2 schools = 1 that was created + 1 that was closed for the move.
assertThat(schoolRepository.findAll()).hasSize(2);

//confirm that running the same event twice will not create a new school.
eventHandlerServiceUnderTest.handleMoveSchoolEvent(event).getLeft();
assertThat(schoolRepository.findAll()).hasSize(2);

SchoolEntity fromSchoolEntityComplete = schoolRepository.findById(fromSchoolEntity.getSchoolId()).orElseThrow();
SchoolEntity toSchoolEntityComplete = schoolRepository.findById(UUID.fromString(moveSchoolEventData.getToSchool().getSchoolId())).orElseThrow();

//confirm previous school has closed and address information saved
assertThat(fromSchoolEntityComplete.getClosedDate()).isEqualTo(moveDate);
assertThat(fromSchoolEntityComplete.getAddresses().stream().toList().get(0).getCity()).isEqualTo(fromSchoolAddressEntity.getCity());

assertThat(fromSchoolEntityComplete.getSchoolMoveTo().stream().toList().get(0).getToSchoolId()).isEqualTo(toSchoolEntityComplete.getSchoolId());
assertThat(toSchoolEntityComplete.getSchoolMoveFrom().stream().toList().get(0).getFromSchoolId()).isEqualTo(fromSchoolEntityComplete.getSchoolId());
}

@Test
public void testHandleEvent_givenEventTypeMOVE_SCHOOL__ToSchoolIdDoesNotExist_shouldThrowEntitynotFoundException() throws IOException, ExecutionException, InterruptedException {
final DistrictTombstoneEntity dist = this.districtTombstoneRepository.save(this.createDistrictData());

0 comments on commit 4347509

Please sign in to comment.