package Ġcom . ust ad mobile . retrie ver . responder Ċ Ċ import Ġcom . ust ad mobile . door . Database Builder Ċ import Ġcom . ust ad mobile . door . ext . write ToFile Ċ import Ġcom . ust ad mobile . retrie ver . db . entities . Loc ally Stored File Ċ import Ġcom . ust ad mobile . retrie ver . db . Retriever Database Ċ import Ġcom . ust ad mobile . retrie ver . db . callback . NODE _ STATUS _ CHANGE _ TRIGGER _ CALLBACK Ċ import Ġcom . ust ad mobile . retrie ver . ext . as Loc ally Stored File Ċ import Ġcom . ust ad mobile . retrie ver . ext . crc 3 2 Ċ import Ġfi . iki . el onen . Nano HTTP D Ċ import Ġfi . iki . el onen . router . Router Nano HTTP D Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . json . JsonArray Ċ import Ġkotlinx . serialization . json . Json Primitive Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġorg . mockito . kotlin . any Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . File Ċ import Ġjava . util . zip . Zip InputStream Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ class ĠZ ipped Items Responder Test Ġ{ ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġvar Ġtemporary Folder Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġlateinit Ġvar Ġcat Pic File : ĠFile ĊĊĠĠĠ Ġlateinit Ġvar Ġoverlay File : ĠFile ĊĊĠĠĠ Ġlateinit Ġvar Ġdb : ĠRetrie ver Database ĊĊĠĠĠ Ġlateinit Ġvar Ġmock Uri Resource : ĠRouter Nano HTTP D . Uri Resource ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġcat Pic File Ġ= Ġtemporary Folder . new File () ĊĠĠĠĠĠĠĠ Ġthis :: class . java . getResource AsStream ("/ cat - pic 0 . jpg ") !!. write ToFile ( cat Pic File ) ĊĊĠĠĠĠĠĠĠ Ġoverlay File Ġ= Ġtemporary Folder . new File () ĊĠĠĠĠĠĠĠ Ġthis :: class . java . getResource AsStream ("/ animated - overlay . gif ") !!. write ToFile ( overlay File ) ĊĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠDatabase Builder . database Builder ( Any (), ĠRetrie ver Database :: class , Ġ" Retriever Database ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( NODE _ STATUS _ CHANGE _ TRIGGER _ CALLBACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . clear All Tables () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdb . loc ally Stored File Dao . insert List ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcat Pic File . as Loc ally Stored File (" http :// cats . com / cat - pic 0 . jpg "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay File . as Loc ally Stored File (" http :// cats . com / overlay . gif "))) ĊĊĊĠĠĠĠĠĠĠ Ġmock Uri Resource Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġinit Parameter ( Retriever Database :: class . java ) Ġ}. thenReturn ( db ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ", Ġ" Red undant Unit Expression ") ĊĠĠĠ Ġprivate Ġfun Ġmake Mock Uri Session ( urls To Retrieve : ĠList < String >) Ġ: ĠN ano HTTP D . I HTTP Session Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġuri Ġ}. thenReturn ("/ retrie ver /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġparse Body ( any ()) Ġ}. then Answer Ġ{ Ġinvocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġinvocation . arguments [ 0 ] Ġas ĠMutable Map < String , ĠString > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Json Ġ= ĠJson Array ( urls To Retrieve . map Ġ{ ĠJson Primitive ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" post Data "] Ġ= ĠJson . encode ToString ( JsonArray . serializer (), Ġfiles Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ method }. thenReturn ( Nano HTTP D . Method . POST ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Valid Request Where All Files Available _ when Post Called _ then Should Return Zip In Order () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponder Ġ= ĠZ ipped Items Responder () ĊĊĠĠĠĠĠĠĠ Ġval Ġurls To Retrieve Ġ= ĠlistOf (" http :// cats . com / cat - pic 0 . jpg ", Ġ" http :// cats . com / overlay . gif ") ĊĠĠĠĠĠĠĠ Ġval Ġmock Uri Session Ġ= Ġmake Mock Uri Session ( urls To Retrieve ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponder . post ( mock Uri Resource , Ġmutable Map Of (), Ġmock Uri Session ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Response Ġstatus Ġis Ġ 2 0 0 ĠOK ", ĠN ano HTTP D . Response . Status . OK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Bytes Ġ= Ġresponse . data . read Bytes () ĊĠĠĠĠĠĠĠ Ġval Ġzip In Ġ= ĠZip InputStream ( ByteArray InputStream ( response Bytes )) ĊĠĠĠĠĠĠĠ Ġval Ġentry 1 Ġ= Ġzip In . next Entry !! ĊĠĠĠĠĠĠĠ Ġval Ġentry 1 Data Ġ= Ġzip In . read Bytes () ĊĠĠĠĠĠĠĠ Ġval Ġentry 2 Ġ= Ġzip In . next Entry !! ĊĠĠĠĠĠĠĠ Ġval Ġentry 2 Data Ġ= Ġ Ġzip In . read Bytes () ĊĠĠĠĠĠĠĠ Ġzip In . close () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals (" First Ġentry Ġdata Ġis Ġequal Ġto Ġoriginal Ġcontent ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcat Pic File . read Bytes (), Ġentry 1 Data ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Name Ġfor Ġentry 1 Ġis Ġthe Ġorigin Ġurl ", Ġ" http :// cats . com / cat - pic 0 . jpg ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry 1 . name ) ĊĠĠĠĠĠĠĠ ĠAssert . assertArrayEquals (" Second Ġentry Ġdata Ġis Ġequal Ġto Ġoriginal Ġcontent ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay File . read Bytes (), Ġentry 2 Data ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Name Ġfor Ġentry 2 Ġis Ġthe Ġorigin Ġurl ", Ġ" http :// cats . com / overlay . gif ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry 2 . name ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Content - length Ġheader Ġmatches Ġactual Ġlength ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Bytes . size , Ġresponse . getHeader (" Content - Length "). toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Invalid Request With A File Not Available _ when Post Called _ then Should Respond BadRequest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponder Ġ= ĠZ ipped Items Responder () ĊĊĠĠĠĠĠĠĠ Ġval Ġurls To Retrieve Ġ= ĠlistOf (" http :// cats . com / cat - pic 0 . jpg ", Ġ" http :// others ite . com / other file . gif ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Uri Session Ġ= Ġmake Mock Uri Session ( urls To Retrieve ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponder . post ( mock Uri Resource , Ġmutable Map Of (), Ġmock Uri Session ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Invalid Ġrequest Ġwhere Ġone Ġfile Ġis Ġnot Ġavailable Ġreturns Ġbad Ġrequest ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN ano HTTP D . Response . Status . BAD _ REQUEST , Ġresponse . status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Invalid Request With No Files Requested _ when Post Called _ then Should Respond BadRequest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponder Ġ= ĠZ ipped Items Responder () ĊĊĠĠĠĠĠĠĠ Ġval Ġurls To Retrieve Ġ= ĠlistOf < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Uri Session Ġ= Ġmake Mock Uri Session ( urls To Retrieve ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponder . post ( mock Uri Resource , Ġmutable Map Of (), Ġmock Uri Session ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Invalid Ġrequest Ġwhere Ġone Ġfile Ġis Ġnot Ġavailable Ġreturns Ġbad Ġrequest ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN ano HTTP D . Response . Status . BAD _ REQUEST , Ġresponse . status ) ĊĠĠĠ Ġ} Ċ Ċ }