package Ġio . dot an uki . networking . tests Ċ Ċ import Ġio . dot an uki . block ked . domain . Remote Integration Issue Ċ import Ġio . dot an uki . block ked . domain . Remote Integration Issue .* Ċ import Ġio . dot an uki . bur ster . using Ċ import Ġio . dot an uki . networking . Handle Error By HttpStatus Ċ import Ġio . reactivex . Observable Ċ import Ġkotlinx . serialization . Serialization Exception Ċ import Ġl abs . dot an uki . t ite . checks . broken Ċ import Ġl abs . dot an uki . t ite . checks . completed Ċ import Ġl abs . dot an uki . t ite . checks . terminated Ċ import Ġl abs . dot an uki . t ite . given Ċ import Ġokhttp 3 . MediaType Ċ Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġorg . junit . Test Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Response Ċ Ċ class ĠHandle Error By HttpStatus Tests Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġhandle Ġerror Ġwhen Ġmapped Ġfrom Ġproper ĠHTTP Ġstatus Ġcode `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġusing < Int , ĠString , ĠRemote Integration Issue > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġburst Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues ( 4 1 8 , Ġ" Te ap ot ", ĠClient Origin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues ( 5 0 3 , Ġ" Internal ĠServer ĠError ", ĠRemote System ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthen With Ġ{ Ġhttp Status , ĠerrorMessage , Ġmapped Error Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Cause Ġ= Ġhttp Exception < Any >( http Status , ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandle Error By HttpStatus < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecution Ġ= ĠObservable . error < Any >( http Cause ). compose ( handler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Handling ( execution , Ġmapped Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġnot Ġhandle Ġany Ġother Ġerrors `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror ToBe Propag ated Ġ= ĠSerialization Exception (" Cannot Ġparse ĠData Ġobject ") ĊĠĠĠĠĠĠĠ Ġval Ġexecution Ġ= ĠObservable . error < Any >( error ToBe Propag ated ) ĊĊĠĠĠĠĠĠĠ Ġassert Handling ( execution , Ġerror ToBe Propag ated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġassert Handling ( target : ĠObservable < T >, Ġexpected Error : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandle Error By HttpStatus < T >() ĊĠĠĠĠĠĠĠ Ġval Ġexecution Ġ= Ġtarget . compose ( handler ) ĊĊĠĠĠĠĠĠĠ Ġgiven ( execution ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Ġnot Be Ġcompleted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Ġbe Ġbroken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Ġbe Ġterminated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify When Error Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails Ġby Error Ġexpected Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġhttp Exception ( statusCode : ĠInt , ĠerrorMessage : ĠString ): ĠHttp Exception Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson MediaType Ġ= ĠMediaType . parse (" application / json ") ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠResponse Body . create ( json MediaType , ĠerrorMessage ) ĊĠĠĠĠĠĠĠ Ġreturn ĠHttp Exception ( Response . error < T >( statusCode , Ġbody )) ĊĠĠĠ Ġ} Ċ }