package Ġpd . sensor . reactive . server . repository Ċ Ċ import Ġapp . cash . tur bine . test Ċ import Ġkotlinx . coroutines . flow . toList Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . data . r 2 dbc . Data R 2 dbc Test Ċ import Ġorg . springframework . core . io . Class Path Resource Ċ import Ġorg . springframework . data . r 2 dbc . core . R 2 dbc Entity Template Ċ import Ġorg . springframework . util . Stream Utils Ċ import Ġpd . sensor . reactive . server . no Millis Ċ import Ġpd . sensor . reactive . server . test Version Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . time . Instant Ċ import Ġkotlin . time . Experimental Time ĊĊ Ċ @ Experimental Time Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ @ Data R 2 dbc Test Ċ class ĠSensor Data R 2 dbc Repository Test Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġsensor Data R 2 dbc Repository : ĠSensor Data R 2 dbc Repository , ĊĠĠĠ Ġprivate Ġval Ġr 2 dbc Entity Template : ĠR 2 dbc Entity Template Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġnow : ĠInstant Ġ= ĠInstant . now () ĊĊĠĠĠ Ġ@ Before All ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= ĠStream Utils . copy ToString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClass Path Resource (" sql / schema . sql "). inputStream , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCharset . default Charset () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġr 2 dbc Entity Template . database Client . sql ( schema ). fetch (). rows Updated (). block () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Data R 2 dbc Repository . delete All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġfind Latest Ġthen Ġreturn ĠSensor Data `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġsensor Data R 2 dbc Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Data Entity ( 1 5 . 6 , Ġ" room ", Ġnow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Data R 2 dbc Repository . find Latest () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( expect Item (). test Version ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( expected . test Version ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġfind Latest Ġthen Ġreturn Ġmultiple ĠSensor Data Ġsorted `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Data R 2 dbc Repository . save All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Data Entity ( 5 . 7 8 , Ġ" gar age ", Ġnow . minus Seconds ( 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Data Entity ( 6 . 8 9 , Ġ" gar age ", Ġnow ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Data R 2 dbc Repository . find Latest () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( expect Item (). test Version ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Sensor Data Entity ( 5 . 7 8 , Ġ" gar age ", Ġnow . minus Seconds ( 1 ). no Millis ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( expect Item (). test Version ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Sensor Data Entity ( 6 . 8 9 , Ġ" gar age ", Ġnow . no Millis ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }