package Ġuk . gov . just ice . digital . h mp ps . where about s . services Ċ Ċ import Ġcom . microsoft . application insights . Telemetry Client Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any OrNull Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . is A Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . isNull Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . never Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . reset Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . groups . Tuple Ċ import Ġorg . junit . jupiter . api . Assertions . assert Throws Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Argument Matchers . any Long Ċ import Ġorg . mockito . Argument Matchers . any String Ċ import Ġorg . springframework . data . domain . Sort Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . dto . Appointment Search Dto Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . dto . Created Appointment Details Dto Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . dto . Off ender Booking Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . dto . Repeat Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . dto . pr ison api . Scheduled Appointment Search Dto Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . model . He aring Type Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . model . Recurring Appointment Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . model . Related Appointment Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . model . Repeat Period Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . model . Time Period Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . repository . Cour t Repository Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . repository . Recurring Appointment Repository Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . repository . Video Link Booking Repository Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . services . cour t . Cour t Service Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . services . cour t . Video Link Booking Service Ċ import Ġuk . gov . just ice . digital . h mp ps . where about s . utils . Data Helpers Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util . Optional Ċ import Ġjavax . persistence . Entity NotFoundException Ċ Ċ class ĠAppointment Service Test Ġ{ ĊĠ Ġprivate Ġval Ġcourt Repository : ĠCour t Repository Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġpr ison ApiService : ĠPr ison ApiService Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġpr ison ApiService Audit able : ĠPr ison ApiService Audit able Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġvideo Link Booking Repository : ĠVideo Link Booking Repository Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġrecur ring Appointment Repository : ĠRe cur ring Appointment Repository Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġvideo Link Booking Service : ĠVideo Link Booking Service Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġtelemetry Client : ĠTe lemetry Client Ġ= Ġmock () ĊĊĠ Ġprivate Ġlateinit Ġvar Ġappointment Service : ĠAppointment Service ĊĊĠ Ġ@ BeforeEach ĊĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠ Ġappointment Service Ġ= ĠAppointment Service ( ĊĠĠĠĠĠ ĠCour t Service ( cour t Repository ), ĊĠĠĠĠĠ Ġpr ison ApiService , ĊĠĠĠĠĠ Ġpr ison ApiService Audit able , ĊĠĠĠĠĠ Ġvideo Link Booking Repository , ĊĠĠĠĠĠ Ġrecur ring Appointment Repository , ĊĠĠĠĠĠ Ġvideo Link Booking Service , ĊĠĠĠĠĠ Ġtelemetry Client ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġwhenever ( cour t Repository . findAll ( is A < Sort >() )). thenReturn ( listOf ()) ĊĠ Ġ} ĊĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass ĠApp ointments Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġgetting Ġapp ointments Ġit Ġreturns Ġthe Ġlist Ġof Ġapp ointments Ġfiltered Ġby Ġoff ender Ġlocation `() Ġ{ ĊĠĠĠĠĠ Ġval Ġfiltered Off ender No Ġ= Ġ" A 1 2 3 4 AA " ĊĠĠĠĠĠ Ġval Ġfiltered Off ender Location Ġ= Ġ"$ OFF ENDER _ LOCATION _ PREFIX - 1 " ĊĠĠĠĠĠ Ġval Ġother Off ender No Ġ= Ġ" B 2 3 4 5 BB " ĊĠĠĠĠĠ Ġval Ġother Off ender Location Ġ= Ġ" M DI - 2 - 1 " ĊĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Scheduled App ointments ( any String (), Ġany (), Ġany OrNull (), Ġany OrNull ())) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Appointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= Ġ 1 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġ" A Ġlocation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġ" VL B ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġ" Video ĠLink ĠBook ing ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġfiltered Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" B ILL ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" BEN N ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġ" AS MIT H " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Appointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= Ġ 1 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġ" Another Ġlocation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġ" VL B ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġ" Video ĠLink ĠBook ing ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 2 , Ġ 1 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 2 , Ġ 1 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġother Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" ANY ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" NAME ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġ" B SM ITH " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Off ender Details From Off ender N os ( any ())) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOff ender Booking ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Name ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" M DI ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . of ( 2 0 0 0 , Ġ 1 , Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 4 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Off ender Location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOff ender Booking ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 3 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 3 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Another ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Name ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" M DI ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . of ( 2 0 0 0 , Ġ 1 , Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 5 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Off ender Location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfiltered App ointments Ġ= ĊĠĠĠĠĠĠĠ Ġappointment Service . getApp ointments ( AG ENCY _ ID , ĠDATE , ĠTIME _ SLOT , ĠOFF ENDER _ LOCATION _ PREFIX , ĠLOC ATION _ ID ) ĊĊĠĠĠĠĠ ĠassertThat ( filtered App ointments ). isEqualTo ( ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠ ĠAppointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= Ġ 1 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġ" A Ġlocation ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġ" VL B ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġ" Video ĠLink ĠBook ing ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġfiltered Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" B ILL ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" BEN N ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġ" AS MIT H " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġgetting Ġapp ointments Ġit Ġhandles Ġminimal Ġinputs `() Ġ{ ĊĠĠĠĠĠ Ġval Ġexample Id Ġ= Ġ 1 L ĊĠĠĠĠĠ Ġval Ġexample Location Id Ġ= Ġ 3 L ĊĠĠĠĠĠ Ġval Ġexample Appointment Type Ġ= Ġ" VL B " ĊĠĠĠĠĠ Ġval Ġexample StartTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 2 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠ Ġval Ġexample EndTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 3 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠ Ġval Ġexample Off ender No Ġ= Ġ" A 1 2 3 4 AA " ĊĠĠĠĠĠ Ġval Ġexample Location Description Ġ= Ġ" A Ġlocation " ĊĠĠĠĠĠ Ġval Ġexample Appointment Type Description Ġ= Ġ" Video ĠLink ĠBook ing " ĊĠĠĠĠĠ Ġval Ġexample FirstName Ġ= Ġ" B ILL " ĊĠĠĠĠĠ Ġval Ġexample LastName Ġ= Ġ" BEN N " ĊĠĠĠĠĠ Ġval Ġexample Create UserId Ġ= Ġ" AS MIT H " ĊĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Scheduled App ointments ( any String (), Ġany (), Ġany OrNull (), Ġany OrNull ())) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Appointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexample Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= Ġexample Location Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġexample Location Description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġexample Appointment Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġexample Appointment Type Description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġexample StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= Ġexample EndTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġexample Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġexample FirstName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġexample LastName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġexample Create UserId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġfiltered App ointments Ġ= Ġappointment Service . getApp ointments ( AG ENCY _ ID , ĠDATE , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠĠĠ ĠassertThat ( filtered App ointments ). isEqualTo ( ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠ ĠAppointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexample Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= Ġexample Location Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġexample Location Description , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġexample Appointment Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġexample Appointment Type Description , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġexample StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= Ġexample EndTime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġexample Off ender No , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġexample FirstName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġexample LastName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġexample Create UserId ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġgetting Ġapp ointments Ġit Ġcalls Ġpr ison Ġapi Ġto Ġget Ġthe Ġlist Ġof Ġapp ointments `() Ġ{ ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Scheduled App ointments ( any String (), Ġany (), Ġany OrNull (), Ġany OrNull ())) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( emptyList ()) ĊĊĠĠĠĠĠ Ġappointment Service . getApp ointments ( AG ENCY _ ID , ĠDATE , ĠTIME _ SLOT , Ġnull , ĠLOC ATION _ ID ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ) ĊĠĠĠĠĠĠĠ Ġ. get Scheduled App ointments ( eq ( AG ENCY _ ID ), Ġeq ( DATE ), Ġeq ( TIME _ SLOT ), Ġeq ( LOCATION _ ID )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġgetting Ġapp ointments Ġit Ġcalls Ġpr ison Ġapi Ġto Ġget Ġthe Ġoff ender Ġbooking Ġdetails Ġwhen Ġan Ġoff ender Ġlocation Ġprefix Ġis Ġsupplied `() Ġ{ ĊĠĠĠĠĠ Ġval Ġoff ender Location Prefix Ġ= Ġ" W WI - 1 " ĊĠĠĠĠĠ Ġval Ġoff ender No 1 Ġ= Ġ" A 1 2 3 4 AA " ĊĠĠĠĠĠ Ġval Ġoff ender No 2 Ġ= Ġ" B 2 3 4 5 BB " ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Scheduled App ointments ( any String (), Ġany (), Ġany OrNull (), Ġany OrNull ())) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Appointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= ĠLOC ATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġ" A Ġlocation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġ" VL B ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġ" Video ĠLink ĠBook ing ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġoff ender No 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" B ILL ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" BEN N ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġ" AS MIT H " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduled Appointment Search Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagency Id Ġ= ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= ĠLOC ATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Description Ġ= Ġ" Another Ġlocation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment TypeCode Ġ= Ġ" VL B ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Type Description Ġ= Ġ" Video ĠLink ĠBook ing ĠAgain ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 2 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 1 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No Ġ= Ġoff ender No 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġ" BO B ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġ" B ABB ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate UserId Ġ= Ġ" B SM ITH " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġappointment Service . getApp ointments ( AG ENCY _ ID , ĠDATE , ĠTIME _ SLOT , Ġoff ender Location Prefix , ĠLOC ATION _ ID ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ) ĊĠĠĠĠĠĠĠ Ġ. get Off ender Details From Off ender N os ( ĊĠĠĠĠĠĠĠĠĠ Ġeq ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender No 1 , Ġoff ender No 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass ĠAppointment Details Ġ{ ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠbeforeEach () Ġ{ ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( any Long ())). thenReturn ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Pr ison Appointment ( booking Id Ġ= ĠBO OK ING _ ID , ĠstartTime Ġ= ĠSTART _ TIME , ĠendTime Ġ= ĠEND _ TIME ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Off ender No From Booking Id ( any ())). thenReturn ( OFF ENDER _ NO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` make Ġa Ġcall Ġto Ġthe Ġpr ison Ġapi Ġto Ġrequest Ġcore Ġappointment Ġdetails `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). get Pr ison Appointment ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġto Ġsee Ġif Ġthe Ġappointment Ġis Ġa Ġvideo Ġlink Ġbooking `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ Ġverify ( video Link Booking Repository ). findBy Appointment Ids And He aring Type ( listOf ( 1 ), ĠH ear ing Type . MAIN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġto Ġsee Ġif Ġthe Ġappointment Ġis Ġa Ġrecur ring Ġone `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ Ġverify ( recurring Appointment Repository ). find Recurring Appointment By Related App ointments Contains ( Related Appointment ( 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` make Ġa Ġrequest Ġto Ġget Ġthe Ġnom is Ġpr ison Ġnumber `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). get Off ender No From Booking Id ( BOOK ING _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` throws Ġentity Ġnot Ġfound Ġexception `() Ġ{ ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( any Long ())). then Throw ( Entity NotFoundException :: class . java ) ĊĊĠĠĠĠĠ ĠassertThrows ( Entity NotFoundException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappointment Service . get Appointment ( 1 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` transform Ġinto Ġappointment Ġdetails `() Ġ{ ĊĠĠĠĠĠ Ġval Ġappointment Details Ġ= Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . appointment ) ĊĠĠĠĠĠĠĠ Ġ. extract ing ( ĊĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠ Ġ" agency Id ", ĊĠĠĠĠĠĠĠĠĠ Ġ" location Id ", ĊĠĠĠĠĠĠĠĠĠ Ġ" appointment TypeCode ", ĊĠĠĠĠĠĠĠĠĠ Ġ" off ender No ", ĊĠĠĠĠĠĠĠĠĠ Ġ" startTime ", ĊĠĠĠĠĠĠĠĠĠ Ġ" endTime ", ĊĠĠĠĠĠĠĠĠĠ Ġ" comment " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. contains ( ĊĠĠĠĠĠĠĠĠĠĠ 1 L , ĊĠĠĠĠĠĠĠĠĠ ĠA GEN CY _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠEVENT _ LOCATION _ ID , ĊĠĠĠĠĠĠĠĠĠ Ġ" INTER V ", ĊĠĠĠĠĠĠĠĠĠ ĠOFF ENDER _ NO , ĊĠĠĠĠĠĠĠĠĠ ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠEND _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġ" test " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` transform Ġinto Ġvideo Ġlink Ġbooking `() Ġ{ ĊĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠ Ġvideo Link Booking Repository . findBy Appointment Ids And He aring Type ( ĊĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠ Ġeq ( He aring Type . MAIN ), ĊĠĠĠĠĠĠĠĠĠ Ġis Null (), ĊĠĠĠĠĠĠĠĠĠ Ġis Null () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). thenReturn ( ĊĠĠĠĠĠĠĠ ĠlistOf ( Data Helpers . make Video Link Booking ( 1 L )) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġappointment Details Ġ= Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . appointment ) ĊĠĠĠĠĠĠĠ Ġ. extract ing ( ĊĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠ Ġ" agency Id ", ĊĠĠĠĠĠĠĠĠĠ Ġ" location Id ", ĊĠĠĠĠĠĠĠĠĠ Ġ" appointment TypeCode ", ĊĠĠĠĠĠĠĠĠĠ Ġ" off ender No ", ĊĠĠĠĠĠĠĠĠĠ Ġ" startTime ", ĊĠĠĠĠĠĠĠĠĠ Ġ" endTime ", ĊĠĠĠĠĠĠĠĠĠ Ġ" create UserId " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. contains ( 1 L , ĠA GEN CY _ ID , ĠEVENT _ LOCATION _ ID , Ġ" INTER V ", ĠOFF ENDER _ NO , ĠSTART _ TIME , ĠEND _ TIME , Ġ" SA ") ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. id ). isEqualTo ( 1 L ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. main ) ĊĠĠĠĠĠĠĠ Ġ. extract ing (" id ", Ġ" booking Id ", Ġ" appointment Id ", Ġ" cour t ", Ġ" he aring Type ", Ġ" created By Username ", Ġ" made By The Cour t ") ĊĠĠĠĠĠĠĠ Ġ. contains ( 1 L , ĠBO OK ING _ ID , Ġ 1 L , Ġ" Cour t Ġ 1 ", ĠH ear ing Type . MAIN , Ġ" SA ", Ġtrue ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. pre ) ĊĠĠĠĠĠĠĠ Ġ. extract ing (" id ", Ġ" booking Id ", Ġ" appointment Id ", Ġ" cour t ", Ġ" he aring Type ", Ġ" created By Username ", Ġ" made By The Cour t ") ĊĠĠĠĠĠĠĠ Ġ. contains ( 2 L , ĠBO OK ING _ ID , Ġ 2 L , Ġ" Cour t Ġ 1 ", ĠH ear ing Type . PRE , Ġ" SA ", Ġtrue ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. post ) ĊĠĠĠĠĠĠĠ Ġ. extract ing (" id ", Ġ" booking Id ", Ġ" appointment Id ", Ġ" cour t ", Ġ" he aring Type ", Ġ" created By Username ", Ġ" made By The Cour t ") ĊĠĠĠĠĠĠĠ Ġ. contains ( 3 L , ĠBO OK ING _ ID , Ġ 3 L , Ġ" Cour t Ġ 1 ", ĠH ear ing Type . POST , Ġ" SA ", Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġtransform Ġinto Ġrecur ring Ġappointment `() Ġ{ ĊĠĠĠĠĠ Ġwhenever ( recurring Appointment Repository . find Recurring Appointment By Related App ointments Contains ( any ())). thenReturn ( ĊĠĠĠĠĠĠĠ ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠ ĠRe cur ring Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Period Ġ= ĠRepeat Period . F ORT N IGHT LY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġappointment Details Ġ= Ġappointment Service . get Appointment ( 1 ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . recurring ) ĊĠĠĠĠĠĠĠ Ġ. extract ing (" id ", Ġ" repeat Period ", Ġ" count ", Ġ" startTime ") ĊĠĠĠĠĠĠĠ Ġ. contains ( 1 L , ĠRepeat Period . F ORT N IGHT LY , Ġ 1 L , ĠSTART _ TIME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġmake Ġa Ġrequest Ġto Ġget Ġthe Ġappointment Ġdetails Ġrel ating Ġto Ġthe Ġvideo Ġlink Ġbook ings `() Ġ{ ĊĠĠĠĠĠ Ġreset ( pr ison ApiService ) ĊĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Off ender No From Booking Id ( any ())). thenReturn ( OFF ENDER _ NO ) ĊĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( 4 L )) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠData Helpers . make Pr ison Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Id Ġ= Ġ 4 L , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 2 T 2 0 : 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 2 T 2 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( 2 L )) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠData Helpers . make Pr ison Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Id Ġ= Ġ 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 3 T 2 0 : 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 3 T 2 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( 3 L )) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠData Helpers . make Pr ison Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Id Ġ= Ġ 3 L , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 4 T 2 0 : 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 4 T 2 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠ Ġvideo Link Booking Repository . findBy Appointment Ids And He aring Type ( ĊĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠ Ġeq ( He aring Type . MAIN ), ĊĠĠĠĠĠĠĠĠĠ Ġis Null (), ĊĠĠĠĠĠĠĠĠĠ Ġis Null () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). thenReturn ( ĊĠĠĠĠĠĠĠ ĠlistOf ( Data Helpers . make Video Link Booking ( 4 L )) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġval Ġappointment Details Ġ= Ġappointment Service . get Appointment ( 4 L ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). get Pr ison Appointment ( 2 L ) ĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). get Pr ison Appointment ( 3 L ) ĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). get Pr ison Appointment ( 4 L ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. main ). extract ing (" startTime ", Ġ" endTime ", Ġ" location Id ") ĊĠĠĠĠĠĠĠ Ġ. contains ( LocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 2 T 2 0 : 0 0 "), ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 2 T 2 1 : 0 0 "), Ġ 1 L ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. pre ). extract ing (" startTime ", Ġ" endTime ", Ġ" location Id ") ĊĠĠĠĠĠĠĠ Ġ. contains ( LocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 3 T 2 0 : 0 0 "), ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 3 T 2 1 : 0 0 "), Ġ 1 L ) ĊĊĠĠĠĠĠ ĠassertThat ( appointment Details . video Link Booking ?. post ). extract ing (" startTime ", Ġ" endTime ", Ġ" location Id ") ĊĠĠĠĠĠĠĠ Ġ. contains ( LocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 4 T 2 0 : 0 0 "), ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 4 T 2 1 : 0 0 "), Ġ 1 L ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass ĠCreate An Appointment Ġ{ ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠbeforeEach () Ġ{ ĊĠĠĠĠĠ Ġval Ġcreate Appointment Details Ġ= ĊĠĠĠĠĠĠĠ ĠCreated Appointment Details Dto ( ĊĠĠĠĠĠĠĠĠĠ Ġappointment EventId Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠ Ġlocation Id Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġappointment Type Ġ= Ġ" INST " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService Audit able . create App ointments ( any ())) ĊĠĠĠĠĠĠĠ Ġ. thenReturn ( ĊĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Appointment Details . copy ( appointment EventId Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Appointment Details . copy ( appointment EventId Ġ= Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Appointment Details . copy ( appointment EventId Ġ= Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Appointment Details . copy ( appointment EventId Ġ= Ġ 4 ), ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` calls Ġpr ison ĠAPI Ġto Ġcreate Ġa Ġnew Ġappointment `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . create Appointment ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Create Appointment Specification ( ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= ĠBO OK ING _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService Audit able ). create App ointments ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Create Pr ison Appointment ( ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= ĠBO OK ING _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` calls Ġpr ison ĠAPI Ġto Ġcreate Ġa Ġset Ġof Ġrepeat able Ġapp ointments `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . create Appointment ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Create Appointment Specification ( ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= ĠBO OK ING _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= ĠRepeat ( Repeat Period . DA IL Y , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService Audit able ). create App ointments ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Create Pr ison Appointment ( ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= ĠBO OK ING _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= ĠRepeat ( Repeat Period . DA IL Y , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġsave Ġthe Ġrecur ring Ġappointment Ġdata `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . create Appointment ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Create Appointment Specification ( ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= ĠBO OK ING _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= ĠRepeat ( Repeat Period . DA IL Y , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġverify ( recurring Appointment Repository ). save ( ĊĠĠĠĠĠĠĠ ĠRe cur ring Appointment ( ĊĠĠĠĠĠĠĠĠĠ Ġrepeat Period Ġ= ĠRepeat Period . DA IL Y , ĊĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġrelated App ointments Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelated Appointment ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelated Appointment ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelated Appointment ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRelated Appointment ( 4 ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġfire Ġan Ġevent Ġwhen Ġa Ġrecur ring Ġappointment Ġhas Ġbeen Ġcreated `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . create Appointment ( ĊĠĠĠĠĠĠĠ ĠData Helpers . make Create Appointment Specification ( ĊĠĠĠĠĠĠĠĠĠ Ġbooking Id Ġ= ĠBO OK ING _ ID , ĊĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= ĠEND _ TIME , ĊĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= ĠRepeat ( Repeat Period . DA IL Y , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġverify ( telemetry Client ). track Event ( ĊĠĠĠĠĠĠĠ Ġ" Recurring ĠAppointment Ġcreated Ġfor Ġa Ġpr isoner ", ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠ Ġ" appointment Type " Ġto Ġ" ABC ", ĊĠĠĠĠĠĠĠĠĠ Ġ" repeat Period " Ġto Ġ" DA IL Y ", ĊĠĠĠĠĠĠĠĠĠ Ġ" count " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" booking Id " Ġto ĠBO OK ING _ ID . toString (), ĊĠĠĠĠĠĠĠĠĠ Ġ" location Id " Ġto Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreturn Ġthe Ġdetails Ġof Ġthe Ġcreated Ġapp ointments `() Ġ{ ĊĠĠĠĠĠ Ġval Ġcreated Ġ= Ġappointment Service . create Appointment ( Data Helpers . make Create Appointment Specification ()) ĊĊĠĠĠĠĠ ĠassertThat ( created ). extract ing ( ĊĠĠĠĠĠĠĠ Ġ" booking Id ", ĊĠĠĠĠĠĠĠ Ġ" location Id ", ĊĠĠĠĠĠĠĠ Ġ" startTime ", ĊĠĠĠĠĠĠĠ Ġ" endTime ", ĊĠĠĠĠĠĠĠ Ġ" appointment Type ", ĊĠĠĠĠĠĠĠ Ġ" appointment EventId " ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. contains ( ĊĠĠĠĠĠĠĠĠĠ ĠTuple . tuple ( 1 L , Ġ 2 L , ĠSTART _ TIME , ĠEND _ TIME , Ġ" INST ", Ġ 1 L ), ĊĠĠĠĠĠĠĠĠĠ ĠTuple . tuple ( 1 L , Ġ 2 L , ĠSTART _ TIME , ĠEND _ TIME , Ġ" INST ", Ġ 2 L ), ĊĠĠĠĠĠĠĠĠĠ ĠTuple . tuple ( 1 L , Ġ 2 L , ĠSTART _ TIME , ĠEND _ TIME , Ġ" INST ", Ġ 3 L ), ĊĠĠĠĠĠĠĠĠĠ ĠTuple . tuple ( 1 L , Ġ 2 L , ĠSTART _ TIME , ĠEND _ TIME , Ġ" INST ", Ġ 4 L ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass ĠDelete Appointment Ġ{ ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠbeforeEach () Ġ{ ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( any Long ())). thenReturn ( Data Helpers . make Pr ison Appointment ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcheck Ġto Ġsee Ġif Ġthe Ġappointment Ġexists Ġin Ġnom is `() Ġ{ ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( 2 )). thenReturn ( null ) ĊĊĠĠĠĠĠ ĠassertThrows ( Entity NotFoundException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappointment Service . delete Appointment ( 2 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdelete Ġan Ġappointment `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . delete Appointment ( 1 L ) ĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). delete Appointment ( 1 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdelete Ġvideo Ġlink Ġbooking `() Ġ{ ĊĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠ Ġvideo Link Booking Repository . findBy Appointment Ids And He aring Type ( ĊĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠ Ġeq ( He aring Type . MAIN ), ĊĠĠĠĠĠĠĠĠĠ Ġis Null (), ĊĠĠĠĠĠĠĠĠĠ Ġis Null () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). thenReturn ( ĊĠĠĠĠĠĠĠ ĠlistOf ( Data Helpers . make Video Link Booking ( 2 L )) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġappointment Service . delete Appointment ( 1 L ) ĊĊĠĠĠĠĠ Ġverify ( video Link Booking Service ). delete Video Link Booking ( 2 L ) ĊĠĠĠĠĠ Ġverify ( pr ison ApiService , Ġnever ()). delete Appointment ( any Long ()) ĊĠĠĠĠĠ Ġverify ( recurring Appointment Repository , Ġnever ()). delete ById ( any Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdelete Ġthe Ġsingle Ġappointment Ġof Ġa Ġsequence Ġof Ġrecur ring Ġapp ointments Ġwhen Ġrequested `() Ġ{ ĊĊĠĠĠĠĠ Ġval Ġrelated App ointments Ġ= Ġmutable ListOf ( Related Appointment ( 2 L ), ĠRelated Appointment ( 3 L )) ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( 3 L )). thenReturn ( Data Helpers . make Pr ison Appointment ()) ĊĠĠĠĠĠ Ġwhenever ( recurring Appointment Repository . find Recurring Appointment By Related App ointments Contains ( any ())). thenReturn ( ĊĠĠĠĠĠĠĠ ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠ ĠRe cur ring Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Period Ġ= ĠRepeat Period . DA IL Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelated App ointments Ġ= Ġrelated App ointments ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġappointment Service . delete Appointment ( 3 L ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). delete Appointment ( 3 L ) ĊĠĠĠĠĠ Ġ// ĠJ PA Ġwill Ġremove Ġthe Ġitem Ġfrom Ġthe ĠDB Ġwhen Ġremoved Ġfrom Ġthe Ġlist Ġas Ġorphan Removal Ġ= Ġtrue ĊĠĠĠĠĠ ĠassertThat ( related App ointments ). has Size ( 1 ) ĊĠĠĠĠĠ ĠassertThat ( related App ointments [ 0 ]. id ). isEqualTo ( 2 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdelete Ġall Ġrecur ring Ġapp ointments Ġin Ġa Ġsequence Ġwhen Ġthe Ġonly Ġremaining Ġappointment Ġis Ġdeleted `() Ġ{ ĊĊĠĠĠĠĠ Ġval Ġrelated App ointments Ġ= Ġmutable ListOf ( Related Appointment ( 3 L )) ĊĠĠĠĠĠ Ġwhenever ( pr ison ApiService . get Pr ison Appointment ( 3 L )). thenReturn ( Data Helpers . make Pr ison Appointment ()) ĊĠĠĠĠĠ Ġwhenever ( recurring Appointment Repository . find Recurring Appointment By Related App ointments Contains ( any ())). thenReturn ( ĊĠĠĠĠĠĠĠ ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠ ĠRe cur ring Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Period Ġ= ĠRepeat Period . DA IL Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelated App ointments Ġ= Ġrelated App ointments ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġappointment Service . delete Appointment ( 3 L ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). delete Appointment ( 3 L ) ĊĠĠĠĠĠ Ġverify ( recurring Appointment Repository ). delete ById ( 1 0 0 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass ĠDelete Recurring Appointment Sequence Ġ{ ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠbeforeEach () Ġ{ ĊĠĠĠĠĠ Ġwhenever ( recurring Appointment Repository . findById ( any Long ())). thenReturn ( ĊĠĠĠĠĠĠĠ ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠ ĠRe cur ring Appointment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Period Ġ= ĠRepeat Period . DA IL Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSTART _ TIME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelated App ointments Ġ= Ġmutable ListOf ( Related Appointment ( 2 L ), ĠRelated Appointment ( 3 L )) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdelete Ġall Ġrecur ring Ġapp ointments `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . delete Recurring Appointment Sequence ( 1 0 0 ) ĊĊĠĠĠĠĠ Ġverify ( pr ison ApiService ). delete App ointments ( listOf ( 2 L , Ġ 3 L )) ĊĠĠĠĠĠ Ġverify ( recurring Appointment Repository ). delete ById ( 1 0 0 ) ĊĠĠĠĠĠ Ġverify ( video Link Booking Service , Ġnever ()). delete Video Link Booking ( any Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġraise Ġa Ġtracking Ġevent Ġwhen Ġdeleting Ġa Ġrecur ring Ġappointment `() Ġ{ ĊĠĠĠĠĠ Ġappointment Service . delete Recurring Appointment Sequence ( 1 0 0 ) ĊĊĠĠĠĠĠ Ġverify ( telemetry Client ). track Event ( ĊĠĠĠĠĠĠĠ Ġ" Recurring ĠAppointment Ġdeleted ", ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠ Ġ" app ointments Deleted " Ġto Ġ" 2 " ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠDATE Ġ= ĠLocalDate . of ( 2 0 2 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠ Ġprivate Ġval ĠTIME _ SLOT Ġ= ĠTime Period . ED ĊĠĠĠ Ġprivate Ġconst Ġval ĠOFF ENDER _ LOCATION _ PREFIX Ġ= Ġ" M DI - 1 " ĊĠĠĠ Ġprivate Ġconst Ġval ĠLOC ATION _ ID Ġ= Ġ 1 2 3 4 L ĊĊĠĠĠ Ġprivate Ġval ĠSTART _ TIME Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 0 T 2 0 : 0 1 ") ĊĠĠĠ Ġprivate Ġval ĠEND _ TIME Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 1 0 - 1 0 T 2 1 : 0 1 ") ĊĠĠĠ Ġprivate Ġconst Ġval ĠEVENT _ LOCATION _ ID Ġ= Ġ 1 L ĊĠĠĠ Ġprivate Ġconst Ġval ĠOFF ENDER _ NO Ġ= Ġ" A 1 2 3 4 5 " ĊĠĠĠ Ġprivate Ġconst Ġval ĠA GEN CY _ ID Ġ= Ġ" M DI " ĊĠĠĠ Ġprivate Ġconst Ġval ĠBO OK ING _ ID Ġ= Ġ- 1 L ĊĠ Ġ} Ċ } Ċ