package Ġuk . gov . just ice . digital . h mp ps . h mp ps inter vention ss ervice . reporting Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . batch . item . ExecutionContext Ċ import Ġorg . springframework . core . io . FileSystem Resource Ċ import Ġjava . io . File Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Month Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . util . Date Ċ import Ġjava . util . UUID Ċ import Ġkotlin . io . path . create TempFile Ċ Ċ internal Ġclass ĠBatch UtilsTest Ġ{ ĊĠ Ġprivate Ġval Ġbatch Utils Ġ= ĠBatch Utils () ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` parse LocalDate ToDate Ġconverts ĠLocalDate Ġobjects Ġto ĠDate Ġat Ġstart Ġof Ġday `() Ġ{ ĊĠĠĠ Ġvar Ġlocal Date Ġ= ĠLocalDate . of ( 2 0 2 4 , ĠMonth . FE BR U ARY , Ġ 2 9 ) ĊĠĠĠ Ġval Ġdate Ġ= Ġbatch Utils . parse LocalDate ToDate ( local Date ) ĊĊĠĠĠ ĠassertThat ( date . to Instant ()). isEqualTo ( Instant . parse (" 2 0 2 4 - 0 2 - 2 9 T 0 0 : 0 0 : 0 0 . 0 0 Z ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` parse Date To Offset DateTime Ġconverts ĠD ates Ġto ĠOffset DateTime s Ġin ĠUTC `() Ġ{ ĊĠĠĠ Ġ// Ġit Ġdoesn 't Ġreally Ġmatter Ġhow Ġwe Ġformat Ġthese Ġdates , Ġthey Ġare Ġall Ġequivalent ĊĠĠĠ Ġ// Ġ( Offset DateTime Ġis Ġjust Ġa Ġmore Ġmodern Ġrepresentation ) ĊĠĠĠ Ġvar Ġdate Ġ= ĠDate . from ( Instant . parse (" 1 9 9 9 - 1 2 - 3 1 T 2 3 : 5 9 : 5 9 . 9 9 Z ")) ĊĠĠĠ Ġvar Ġoffset DateTime Ġ= Ġbatch Utils . parse Date To Offset DateTime ( date ) ĊĠĠĠ ĠassertThat ( offset DateTime ). isEqualTo ( Offset DateTime . parse (" 2 0 0 0 - 0 1 - 0 1 T 0 0 : 5 9 : 5 9 . 9 9 + 0 1 : 0 0 ")) ĊĊĠĠĠ Ġdate Ġ= ĠDate . from ( Instant . parse (" 1 9 8 9 - 0 2 - 1 0 T 1 0 : 0 0 : 0 0 . 0 0 Z ")) ĊĠĠĠ Ġoffset DateTime Ġ= Ġbatch Utils . parse Date To Offset DateTime ( date ) ĊĠĠĠ ĠassertThat ( offset DateTime ). isEqualTo ( Offset DateTime . parse (" 1 9 8 9 - 0 2 - 1 0 T 1 0 : 0 0 : 0 0 . 0 0 Z ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` csv FileWriter Ġwrites Ġvalid Ġcsv `() Ġ{ ĊĠĠĠ Ġdata Ġclass ĠData ( ĊĠĠĠĠĠ Ġval Ġstring Val : ĠString , ĊĠĠĠĠĠ Ġval Ġuuid Val : ĠUUID , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtmp File Ġ= ĠFile ( create TempFile (). toString ()) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġwriter Ġ= Ġbatch Utils . csv FileWriter < Data >( ĊĠĠĠĠĠĠĠ Ġ" data Writer ", ĊĠĠĠĠĠĠĠ ĠFileSystem Resource ( tmp File ), ĊĠĠĠĠĠĠĠ Ġheaders Ġ= ĠlistOf (" string Ġvalue ", Ġ" uuid Ġvalue "), ĊĠĠĠĠĠĠĠ Ġfields Ġ= ĠlistOf (" string Val ", Ġ" uuid Val "), ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġwriter . open ( mock < ExecutionContext >()) ĊĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠ ĠData (" tom ", ĠUUID . fromString (" 5 8 6 3 b 3 2 b - bb 6 0 - 4 bad - a eee - a 1 5 ff 6 1 abf 3 a ")), ĊĠĠĠĠĠĠĠĠĠ ĠData (" and rew ", ĠUUID . fromString (" cec 6 b 5 5 f - b 3 2 f - 4 3 af - 8 2 8 b - c 7 2 a 4 c 1 a ade 7 ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( tmp File . read Text ()). isEqualTo ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġstring Ġvalue , uuid Ġvalue ĊĠĠĠĠĠ Ġtom , 5 8 6 3 b 3 2 b - bb 6 0 - 4 bad - a eee - a 1 5 ff 6 1 abf 3 a ĊĠĠĠĠĠ Ġand rew , cec 6 b 5 5 f - b 3 2 f - 4 3 af - 8 2 8 b - c 7 2 a 4 c 1 a ade 7 ĊĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġtmp File . delete () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ