package Ġcom . file stack . internal Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json ParseException Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠNetwork Client Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġserver Ġ= ĠMock WebServer () ĊĠĠĠ Ġval Ġserver Url Ġ= Ġserver . url ("/") ĊĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( server Url ). build () ĊĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient () ĊĊĠĠĠ Ġval Ġnetwork Client Ġ= ĠNetwork Client ( ok HttpClient , ĠGson ()) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġsuccessful Ġresults `() Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġnetwork Client . call ( request ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( response . is Successful ) ĊĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). set Body (""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text ": Ġ" some _ text ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" number ": Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnetwork Client . call ( request , ĠFoo :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . is Successful ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 2 , Ġresult . data !!. number ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" some _ text ", Ġresult . data !!. text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġinvalid Ġresponses `() Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). set Response Code ( 4 0 3 ). set Body (" Invalid ĠRequest ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġnetwork Client . call ( request , ĠFoo :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( response . is Successful ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 0 3 , Ġresponse . code ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠJson ParseException :: class ) ĊĠĠĠ Ġfun Ġ` does Ġnot Ġcatch ĠJson Parse Exceptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). set Body ("- 1 _ not _ a _ json ")) ĊĊĠĠĠĠĠĠĠ Ġnetwork Client . call ( request , ĠFoo :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠFoo ( val Ġtext : ĠString , Ġval Ġnumber : ĠInt ) Ċ }