package Ġcom . s ama . meeting . infrastructure Ċ Ċ import Ġcom . s ama . common . Base Persistence IT Ċ import Ġcom . s ama . common . NotFoundException Ċ import Ġcom . s ama . meeting . domain . Actor Ċ import Ġcom . s ama . meeting . domain . Confirmed Meeting Ċ import Ġcom . s ama . meeting . domain . Expired Meeting Ċ import Ġcom . s ama . meeting . domain . Meeting Code Ċ import Ġcom . s ama . meeting . domain . Meeting Id Ċ import Ġcom . s ama . meeting . domain . Meeting Intent Id Ċ import Ġcom . s ama . meeting . domain . Meeting Preferences Ċ import Ġcom . s ama . meeting . domain . Meeting Repository Ċ import Ġcom . s ama . meeting . domain . Meeting Slot Ċ import Ġcom . s ama . meeting . domain . Meeting Status Ċ import Ġcom . s ama . meeting . domain . S ama Non S ama Pro posed Meeting Ċ import Ġcom . s ama . meeting . domain . S ama S ama Pro posed Meeting Ċ import Ġcom . s ama . meeting . domain . User Recipient Ċ import Ġcom . s ama . meeting . infrastructure . jpa . Meeting Intent Entity Ċ import Ġcom . s ama . meeting . infrastructure . jpa . Meeting Intent Jpa Repository Ċ import Ġcom . s ama . users . domain . UserId Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Offset . UTC Ċ import Ġjava . time . Z onedDateTime Ċ import Ġkotlin . test . assertNot Equals Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . test . context . Context Configuration Ċ Ċ @ Context Configuration ( classes Ġ= Ġ[ Meeting Repository Impl :: class ]) Ċ class ĠMeeting Repository IT Ġ: ĠBase Persistence IT < Meeting Repository >() Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmeeting Intent Repository : ĠMeeting Intent Jpa Repository ĊĊĠĠĠ Ġ// Ġcommon ĊĠĠĠ Ġprivate Ġval Ġmeeting Intent Id Ġ= ĠMeeting Intent Id ( 1 1 ) ĊĠĠĠ Ġprivate Ġval Ġmeeting Intent Entity Ġ= ĠMeeting Intent Entity (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġmeeting Intent Id . id ĊĠĠĠĠĠĠĠ Ġthis . init iator Id Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġthis . duration Minutes Ġ= Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġthis . timezone Ġ= ĠUTC ĊĠĠĠĠĠĠĠ Ġthis . createdAt Ġ= ĠInstant . now () ĊĠĠĠĠĠĠĠ Ġthis . updatedAt Ġ= ĠInstant . now () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup Meeting Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġmeeting Intent Repository . save ( meeting Intent Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` next Ġidentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġunder Test . next Identity () ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġunder Test . next Identity () ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( one , Ġtwo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pro posed Ġmeeting Ġpersistence `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġproposed Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Code (" VG s UT G no "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġunder Test . save ( pro posed Meeting ) ĊĠĠĠĠĠĠĠ Ġval Ġpersisted Ġ= Ġunder Test . findById OrThrow ( pro posed Meeting . meeting Id ) Ġas ĠS ama Non S ama Pro posed Meeting ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. using Recursive Comparison () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ign oring Fields (" createdAt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( pro posed Meeting ) ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted . createdAt ). isNotNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` s ama - s ama Ġproposed Ġmeeting Ġpersistence `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġproposed Meeting Ġ= ĠS ama S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor . RE CI PI ENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Code (" VG s UT G no "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġunder Test . save ( pro posed Meeting ) ĊĠĠĠĠĠĠĠ Ġval Ġpersisted Ġ= Ġunder Test . findById OrThrow ( pro posed Meeting . meeting Id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted ). using Recursive Comparison () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( pro posed Meeting ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` confirmed Ġmeeting Ġpersistence `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Code Ġ= ĠMeeting Code (" VG s UT G no ") ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Title Ġ= Ġ" Meeting Ġtitle " ĊĠĠĠĠĠĠĠ Ġval Ġinit iator Id Ġ= ĠUserId ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġproposed Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit iator Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Title , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġunder Test . save ( pro posed Meeting ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconfirmed Meeting Ġ= ĠConf irmed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Id , Ġmeeting Code , Ġinit iator Id , ĠUser Recipient . of ( UserId ( 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Title ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġunder Test . save ( confirmed Meeting ) ĊĠĠĠĠĠĠĠ Ġval Ġpersisted Ġ= Ġunder Test . findById OrThrow ( confirmed Meeting . meeting Id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted ). using Recursive Comparison () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( confirmed Meeting ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Ġby Ġcode `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Code Ġ= ĠMeeting Code (" VG s UT G no ") ĊĠĠĠĠĠĠĠ Ġval Ġinit iator Id Ġ= ĠUserId ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġproposed Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit iator Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġunder Test . save ( pro posed Meeting ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġpersisted Ġ= Ġunder Test . findBy Code OrThrow ( meeting Code ) Ġas ĠS ama Non S ama Pro posed Meeting ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. using Recursive Comparison () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ign oring Fields (" createdAt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( pro posed Meeting ) ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted . createdAt ). isNotNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Ġs ama - s ama Ġby Ġcode `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmeeting Code Ġ= ĠMeeting Code (" VG s UT G no ") ĊĠĠĠĠĠĠĠ Ġval Ġinit iator Id Ġ= ĠUserId ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġrecipient Id Ġ= ĠUserId ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġproposed Meeting Ġ= ĠS ama S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit iator Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor . RE CI PI ENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Hours ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġunder Test . save ( pro posed Meeting ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġpersisted Ġ= Ġunder Test . findBy Code OrThrow ( meeting Code ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( pers isted ). isEqualTo ( pro posed Meeting ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Ġby Ġcode Ġnot Ġfound `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . findBy Code OrThrow ( Meeting Code (" non Ġexist ant ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThrows < NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunder Test . findBy Code OrThrow ( Meeting Code (" non Ġexist ant "), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Ġfuture Ġproposed Ġslots `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalid Meeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġinit iator Id Ġ= ĠUserId ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Days ( 1 ). plus Minutes ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Days ( 1 ). plus Minutes ( 6 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproposed Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Meeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit iator Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Minutes ( 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Minutes ( 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Code (" VG s UT G no "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . save ( pro posed Meeting ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġunder Test . findAll Pro posed Slots ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit iator Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Days ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Days ( 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( actual ). contains Exactly ( expected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Ġexp iring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalid Meeting Id Ġ= ĠMeeting Id ( 2 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalid Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Meeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Hours ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Hours ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Minutes ( 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). plus Minutes ( 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Code (" one "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexp iring Meeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġexp iring Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexp iring Meeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Hours ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Hours ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Minutes ( 6 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Minutes ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Code (" two "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . save ( valid Meeting ) ĊĠĠĠĠĠĠĠ Ġunder Test . save ( exp iring Meeting ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġunder Test . findAll Exp iring ( Z onedDateTime . now ( clock )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). contains Exactly ( Expired Meeting ( exp iring Meeting Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` save Ġall Ġexpired `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexp iring Meeting Id Ġ= ĠMeeting Id ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġexp iring Meeting Ġ= ĠS ama Non S ama Pro posed Meeting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexp iring Meeting Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeeting Intent Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Minutes ( 6 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Slot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Hours ( 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now ( clock ). minus Hours ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Code (" VG s UT G no "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Meeting Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeeting Preferences . default (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . save ( exp iring Meeting ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġunder Test . save All Expired ( listOf ( Expired Meeting ( exp iring Meeting Id ))) ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġunder Test . findById OrThrow ( exp iring Meeting Id ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . status ). isEqualTo ( Meeting Status . EXPI RED ) ĊĠĠĠ Ġ} Ċ }