Skip to content

Commit d527fa6

Browse files
authored
Merge pull request #230 from bcgov/feature/number
Updates to school move
2 parents b14aed6 + 4347509 commit d527fa6

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

api/src/main/java/ca/bc/gov/educ/api/institute/service/v1/SchoolService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ private SchoolEntity moveSchoolHelper(School school, School existingSchool) {
451451
List<SchoolEntity> schools = schoolRepository.findBySchoolNumberAndDistrictID(
452452
school.getSchoolNumber(), UUID.fromString(school.getDistrictId()));
453453

454-
if(school.getSchoolCategoryCode().equals(existingSchool.getSchoolCategoryCode()) && schools.isEmpty()) {
454+
if(school.getSchoolCategoryCode().equals(existingSchool.getSchoolCategoryCode())
455+
&& school.getFacilityTypeCode().equals(existingSchool.getFacilityTypeCode()) && schools.isEmpty()) {
455456
schoolEntity.setSchoolNumber(school.getSchoolNumber());
456457
} else {
457458
schoolEntity.setSchoolNumber(

api/src/test/java/ca/bc/gov/educ/api/institute/service/EventHandlerServiceTest.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,67 @@ public void testHandleEvent_givenEventTypeMOVE_SCHOOL_withIndependentSchoolCateg
704704
assertThat(toSchoolEntityComplete.getSchoolMoveFrom().stream().toList().get(0).getFromSchoolId()).isEqualTo(fromSchoolEntityComplete.getSchoolId());
705705
}
706706

707+
@Test
708+
public void testHandleEvent_givenEventTypeMOVE_SCHOOL_withIndependentSchoolFacilityChange__DoesExistAndSynchronousNatsMessage_shouldRespondWithDataAndCreateMoveHistory() throws IOException, ExecutionException, InterruptedException {
709+
final DistrictTombstoneEntity dist = this.districtTombstoneRepository.save(this.createDistrictData());
710+
SchoolEntity toSchoolEntity = this.createNewSchoolData("97100", "INDEPEND", "DISTONLINE");
711+
SchoolEntity fromSchoolEntity = this.createNewSchoolData("96100", "INDEPEND", "STANDARD");
712+
LocalDateTime moveDate = LocalDateTime.now().plusDays(1).truncatedTo(ChronoUnit.MILLIS);
713+
714+
Set<SchoolAddressEntity> schoolAddressSet = new HashSet<>();
715+
SchoolAddressEntity fromSchoolAddressEntity = SchoolAddressEntity.builder()
716+
.addressTypeCode("MAILING").addressLine1("123 This Street").city("Victoria")
717+
.provinceCode("BC").countryCode("CA").postal("V1V2V3").schoolEntity(fromSchoolEntity).build();
718+
schoolAddressSet.add(fromSchoolAddressEntity);
719+
720+
toSchoolEntity.setDistrictEntity(dist);
721+
fromSchoolEntity.setDistrictEntity(dist);
722+
fromSchoolEntity.setAddresses(schoolAddressSet);
723+
schoolRepository.save(fromSchoolEntity);
724+
725+
School toSchool = new School();
726+
SchoolMapper map = SchoolMapper.mapper;
727+
728+
BeanUtils.copyProperties(map.toStructure(toSchoolEntity), toSchool);
729+
730+
ObjectMapper objectMapper = new ObjectMapper();
731+
objectMapper.registerModule(new JavaTimeModule()).configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
732+
733+
MoveSchoolData moveSchoolData = createMoveSchoolData(toSchool, fromSchoolEntity.getSchoolId(), moveDate);
734+
735+
UUID sagaId = UUID.randomUUID();
736+
final Event event = Event.builder().eventType(MOVE_SCHOOL).sagaId(sagaId).eventPayload(objectMapper.writeValueAsString(moveSchoolData)).build();
737+
738+
eventHandlerServiceUnderTest.handleMoveSchoolEvent(event).getLeft();
739+
Optional<InstituteEvent> schoolUpdatedEvent = instituteEventRepository.findBySagaIdAndEventType(sagaId, MOVE_SCHOOL.toString());
740+
assertThat(schoolUpdatedEvent).isPresent();
741+
assertThat(schoolUpdatedEvent.get().getEventStatus()).isEqualTo(MESSAGE_PUBLISHED.toString());
742+
assertThat(schoolUpdatedEvent.get().getEventOutcome()).isEqualTo(SCHOOL_MOVED.toString());
743+
744+
//check that data in event payload is updated
745+
MoveSchoolData moveSchoolEventData = JsonUtil.getJsonObjectFromString(MoveSchoolData.class, event.getEventPayload());
746+
assertThat(moveSchoolEventData.getToSchool().getSchoolId()).isNotNull();
747+
assertThat(moveSchoolEventData.getToSchool().getSchoolNumber()).isEqualTo("99000"); //new school number since school number already exists in district
748+
assertThat(moveSchoolEventData.getToSchool().getSchoolNumber()).startsWith("99");
749+
750+
//2 schools = 1 that was created + 1 that was closed for the move.
751+
assertThat(schoolRepository.findAll()).hasSize(2);
752+
753+
//confirm that running the same event twice will not create a new school.
754+
eventHandlerServiceUnderTest.handleMoveSchoolEvent(event).getLeft();
755+
assertThat(schoolRepository.findAll()).hasSize(2);
756+
757+
SchoolEntity fromSchoolEntityComplete = schoolRepository.findById(fromSchoolEntity.getSchoolId()).orElseThrow();
758+
SchoolEntity toSchoolEntityComplete = schoolRepository.findById(UUID.fromString(moveSchoolEventData.getToSchool().getSchoolId())).orElseThrow();
759+
760+
//confirm previous school has closed and address information saved
761+
assertThat(fromSchoolEntityComplete.getClosedDate()).isEqualTo(moveDate);
762+
assertThat(fromSchoolEntityComplete.getAddresses().stream().toList().get(0).getCity()).isEqualTo(fromSchoolAddressEntity.getCity());
763+
764+
assertThat(fromSchoolEntityComplete.getSchoolMoveTo().stream().toList().get(0).getToSchoolId()).isEqualTo(toSchoolEntityComplete.getSchoolId());
765+
assertThat(toSchoolEntityComplete.getSchoolMoveFrom().stream().toList().get(0).getFromSchoolId()).isEqualTo(fromSchoolEntityComplete.getSchoolId());
766+
}
767+
707768
@Test
708769
public void testHandleEvent_givenEventTypeMOVE_SCHOOL__ToSchoolIdDoesNotExist_shouldThrowEntitynotFoundException() throws IOException, ExecutionException, InterruptedException {
709770
final DistrictTombstoneEntity dist = this.districtTombstoneRepository.save(this.createDistrictData());

0 commit comments

Comments
 (0)