@@ -704,6 +704,67 @@ public void testHandleEvent_givenEventTypeMOVE_SCHOOL_withIndependentSchoolCateg
704
704
assertThat (toSchoolEntityComplete .getSchoolMoveFrom ().stream ().toList ().get (0 ).getFromSchoolId ()).isEqualTo (fromSchoolEntityComplete .getSchoolId ());
705
705
}
706
706
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
+
707
768
@ Test
708
769
public void testHandleEvent_givenEventTypeMOVE_SCHOOL__ToSchoolIdDoesNotExist_shouldThrowEntitynotFoundException () throws IOException , ExecutionException , InterruptedException {
709
770
final DistrictTombstoneEntity dist = this .districtTombstoneRepository .save (this .createDistrictData ());
0 commit comments