package Ġorg . ion project . integration . infrastructure . file Ċ Ċ import Ġorg . ion project . integration . application . config . App Properties Ċ import Ġorg . ion project . integration . application . dto . Calendar Term Dto Ċ import Ġorg . ion project . integration . application . dto . Inst itution Metadata Ċ import Ġorg . ion project . integration . application . dto . Program me Metadata Ċ import Ġorg . ion project . integration . application . dto . Time table Data Ċ import Ġorg . ion project . integration . domain . common . Term Ċ import Ġorg . ion project . integration . domain . common . dto . Program me Dto Ċ import Ġorg . ion project . integration . domain . common . dto . School Dto Ċ import Ġorg . ion project . integration . domain . timetable . dto . Class Dto Ċ import Ġorg . ion project . integration . domain . timetable . dto . Event Dto Ċ import Ġorg . ion project . integration . domain . timetable . dto . In structor Dto Ċ import Ġorg . ion project . integration . domain . timetable . dto . Section Dto Ċ import Ġorg . ion project . integration . domain . timetable . dto . Time table Dto Ċ import Ġorg . ion project . integration . infrastructure . Date Utils Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ SpringBootTest Ċ class ĠFile Writer Tests Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġwriter : ĠFile Writer ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġprops : ĠApp Properties ĊĊĠĠĠ Ġval Ġstaging Ġby Ġlazy Ġ{ Ġprops . staging Files Dir Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġgiven Ġa Ġtime table ĠD TO Ġthen Ġwrite Ġthe Ġfile Ġto ĠJSON `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġwriter . write ( meta , ĠOutput Format . JSON , Ġ" test ", Ġstaging ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( file . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected JSON , Ġfile . read Text ()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġgiven Ġa Ġtime table ĠD TO Ġthen Ġwrite Ġthe Ġfile Ġto ĠYAML `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġwriter . write ( meta , ĠOutput Format . YAML , Ġ" test ", Ġstaging ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( file . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected YAML , Ġfile . read Text ()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġexpected YAML Ġ= ĊĠĠĠ Ġ" --- \ n creation DateTime : Ġ\" 2 0 2 1 - 0 4 - 2 1 T 1 9 : 4 9 : 1 6 Z \"\ n retrie val DateTime : Ġ\" 2 0 2 1 - 0 4 - 2 1 T 1 9 : 4 9 : 1 6 Z \"\ ns ch ool :\ n Ġ Ġname : Ġ\" INST IT UTO ĠSUP ER IOR ĠDE ĠEN GEN H AR IA ĠDE ĠL IS BO A \"\ n Ġ Ġac r : Ġ\" I SEL \"\ n program me :\ n Ġ Ġname : Ġ\" Lic enci atura Ġem ĠEng en har ia ĠInform Ã¡t ica Ġe Ġde ĠComput adores \"\ n Ġ Ġac r : Ġ\" LE IC \"\ n calendar Term : Ġ\" 2 0 2 0 - 2 0 2 1 - 2 \"\ n classes :\ n - Ġac r : Ġ\" E \"\ n Ġ Ġsections :\ n Ġ Ġ- Ġsection : Ġ\" LE IC 1 1 Da \"\ n ĠĠĠ Ġcur ric ular Term : Ġ 1 \ n ĠĠĠ Ġevents :\ n ĠĠĠ Ġ- Ġcategory : Ġ\" LECT URE \"\ n ĠĠĠĠĠ Ġlocation :\ n ĠĠĠĠĠ Ġ- Ġ\" L _ H 2 \"\ n ĠĠĠĠĠ Ġbegin Time : Ġ\" 1 4 : 0 0 \"\ n ĠĠĠĠĠ Ġduration : Ġ\" 0 1 : 3 0 \"\ n ĠĠĠĠĠ Ġweek days : Ġ\" MO \"\ n ĠĠĠ Ġ- Ġcategory : Ġ\" LECT URE \"\ n ĠĠĠĠĠ Ġbegin Time : Ġ\" 1 4 : 0 0 \"\ n ĠĠĠĠĠ Ġduration : Ġ\" 0 1 : 3 0 \"\ n ĠĠĠĠĠ Ġweek days : Ġ\" WE \"\ n ĠĠĠ Ġ- Ġcategory : Ġ\" LECT URE \"\ n ĠĠĠĠĠ Ġbegin Time : Ġ\" 1 4 : 0 0 \"\ n ĠĠĠĠĠ Ġduration : Ġ\" 0 1 : 3 0 \"\ n ĠĠĠĠĠ Ġweek days : Ġ\" TH \"\ n ĠĠĠ Ġinstruct ors :\ n ĠĠĠ Ġ- Ġname : Ġ\" Jo Ã£o ĠMan uel ĠF er re ira ĠMart ins \"\ n ĠĠĠĠĠ Ġcategory : Ġ\" PR ACT ICE \"\ n ĠĠĠ Ġ- Ġname : Ġ\" Jo Ã£o ĠMan uel ĠF er re ira ĠMart ins \"\ n ĠĠĠĠĠ Ġcategory : Ġ\" LECT URE \"\ n " Ċ private Ġval Ġexpected JSON Ġ= ĊĠĠĠ Ġ""" {" creation DateTime ":" 2 0 2 1 - 0 4 - 2 1 T 1 9 : 4 9 : 1 6 Z "," retrie val DateTime ":" 2 0 2 1 - 0 4 - 2 1 T 1 9 : 4 9 : 1 6 Z "," school ":{" name ":" INST IT UTO ĠSUP ER IOR ĠDE ĠEN GEN H AR IA ĠDE ĠL IS BO A "," acr ":" I SEL "}," program me ":{" name ":" Lic enci atura Ġem ĠEng en har ia ĠInform Ã¡t ica Ġe Ġde ĠComput adores "," acr ":" LE IC "}," calendar Term ":" 2 0 2 0 - 2 0 2 1 - 2 "," classes ":[{" acr ":" E "," sections ":[{" section ":" LE IC 1 1 Da "," cur ric ular Term ": 1 ," events ":[{" category ":" LECT URE "," location ":[" L _ H 2 "]," begin Time ":" 1 4 : 0 0 "," duration ":" 0 1 : 3 0 "," week days ":" MO "},{" category ":" LECT URE "," begin Time ":" 1 4 : 0 0 "," duration ":" 0 1 : 3 0 "," week days ":" WE "},{" category ":" LECT URE "," begin Time ":" 1 4 : 0 0 "," duration ":" 0 1 : 3 0 "," week days ":" TH "}], " in struct ors ":[{" name ":" Jo Ã£o ĠMan uel ĠF er re ira ĠMart ins "," category ":" PR ACT ICE "},{" name ":" Jo Ã£o ĠMan uel ĠF er re ira ĠMart ins "," category ":" LECT URE "}]} ]} ]} """ Ċ Ċ private Ġconst Ġval ĠEU RO PE _ L IS B ON _ TIME ZONE Ġ= Ġ" Europe / L is bon " Ċ Ċ private Ġval Ġdate Formatted Ġ= ĠLocalDateTime . of ( ĊĠĠĠĠ 2 0 2 1 , ĊĠĠĠĠ 4 , ĊĠĠĠĠ 2 1 , ĊĠĠĠĠ 2 0 , ĊĠĠĠĠ 4 9 , ĊĠĠĠĠ 1 6 , Ċ ). let Ġ{ Ġdate Ġ-> ĊĠĠĠ ĠDate Utils . format To ISO 8 6 0 1 ( Date Utils . convert Date To UTC ( date , ĠEU RO PE _ L IS B ON _ TIME ZONE )) Ċ } Ċ Ċ private Ġval Ġtime table Ġ= ĠTime table Dto ( ĊĠĠĠ Ġdate Formatted , ĊĠĠĠ Ġdate Formatted , ĊĠĠĠ ĠSchool Dto ( ĊĠĠĠĠĠĠĠ Ġ" INST IT UTO ĠSUP ER IOR ĠDE ĠEN GEN H AR IA ĠDE ĠL IS BO A ", ĊĠĠĠĠĠĠĠ Ġ" I SEL " ĊĠĠĠ Ġ), ĊĠĠĠ ĠProgram me Dto ( ĊĠĠĠĠĠĠĠ Ġ" Lic enci atura Ġem ĠEng en har ia ĠInform Ã¡t ica Ġe Ġde ĠComput adores ", ĊĠĠĠĠĠĠĠ Ġ" LE IC " ĊĠĠĠ Ġ), ĊĠĠĠ Ġ" 2 0 2 0 - 2 0 2 1 - 2 ", ĊĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠClass Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" E ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSection Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LE IC 1 1 Da ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LECT URE ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" L _ H 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 4 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 : 3 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" MO " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LECT URE ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 4 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 : 3 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LECT URE ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 4 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 : 3 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" TH " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn structor Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Jo Ã£o ĠMan uel ĠF er re ira ĠMart ins ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PR ACT ICE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn structor Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Jo Ã£o ĠMan uel ĠF er re ira ĠMart ins ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LECT URE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ ) Ċ Ċ private Ġval Ġinstitution Ġ= ĠInst itution Metadata (" Inst it uto ĠSuper ior Ġde ĠEng en har ia Ġde ĠL is bo a ", Ġ" I SEL ", Ġ" pt . i pl . ise l ") Ċ private Ġval Ġprogram me Metadata Ġ= ĠProgram me Metadata ( institution , Ġ" Eng . ĠInform Ã¡t ica Ġe Ġde ĠComput adores ", Ġ" LE IC ") Ċ val Ġmeta Ġ= ĠTime table Data ( program me Metadata , ĠCalendar Term Dto ( 2 0 2 0 , ĠTerm . SPR ING . number ), Ġtime table ) Ċ