package Ġcom . th omas fl ad . covid 1 9 radar . test double s Ċ Ċ import Ġco . touch lab . state ly . concurrency . Atomic Reference Ċ import Ġco . touch lab . state ly . freeze Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . engine . HttpClient Engine Ċ import Ġio . ktor . client . engine . mock . Mock Engine Ċ import Ġio . ktor . client . engine . mock . respond Ċ import Ġio . ktor . client . plugins . Content Neg otiation Ċ import Ġio . ktor . http . ContentType . Application Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . http . headers Of Ċ import Ġio . ktor . serialization . kotlin x . json . json Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Ċ Ċ class ĠMock Client Helper Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġresponse List Ref : ĠAtomic Reference < List < Mock Response >> Ġ= ĊĠĠĠĠĠĠĠ ĠAtomic Reference ( emptyList < Mock Response >(). freeze ()) ĊĊĠĠĠ Ġfun Ġclient Engine () Ġ= Ġclient (). engine ĊĊĠĠĠ Ġfun Ġenqueue Response ( mock Response : ĠMock Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġresponse List Ref . get (). plus ( mock Response ) ĊĠĠĠĠĠĠĠ Ġresponse List Ref . set ( new . freeze ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclient () Ġ= ĠHttpClient ( Mock Engine ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresponse List Ref . consume Response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġheaders Of (" Content - Type " Ġto ĠlistOf ( Application . Json . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrespond ( response . body , Ġresponse . statusCode , Ġheaders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAtomic Reference < List < Mock Response >> . consume Response (): ĠMock Response Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( get (). isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Please Ġenqueue Ġthe Ġmissing Ġresponses ") ĊĠĠĠĠĠĠĠ Ġelse Ġget (). first (). also Ġ{ Ġset ( get (). drop ( 1 )) Ġ} Ċ } Ċ Ċ internal Ġfun Ġcreate Test HttpClient ( client Engine : ĠHttpClient Engine ) Ġ= ĠHttpClient ( client Engine ) Ġ{ ĊĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Len ient Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġjson ( json ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMock Response ( val Ġbody : ĠString Ġ= Ġ"", Ġval ĠstatusCode : ĠHttpStatusCode Ġ= ĠHttpStatusCode . OK ) Ċ Ċ internal Ġinline Ġfun Ġ< re ified ĠT > Ġrespond OK ( content : ĠT ) Ġ= ĊĠĠĠ ĠMock Response ( Json . encode ToString ( content ), ĠHttpStatusCode . OK ) Ċ Ċ internal Ġfun Ġrespond Error ( statusCode : ĠHttpStatusCode Ġ= ĠHttpStatusCode . Forbidden ) Ġ= ĊĠĠĠ ĠMock Response ("", ĠstatusCode ) Ċ