package Ġcom . mi qu ido . rest mock Ċ Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ Ċ class ĠMock Interceptor ( ĊĠĠĠ Ġprivate Ġval Ġmocks : ĠMap < Request Filter , ĠMock Response > Ġ= Ġempty Map (), ĊĠĠĠ Ġprivate Ġval Ġmock Server : ĠMock WebServer Ġ= ĠMock WebServer (). configure () Ċ ) Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠInter ceptor . Chain . find Server (): ĠHttp Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġmock Response Ġ= Ġfind Mock Response ( request ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMock Response Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Response . add Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mock ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< -- ĠReal Ġrequest Ġ${ request (). url } Ġis Ġmocked Ġ--> " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Server . enqueue ( mock Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest (). url . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. host ( mock Server . host Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. port ( mock Server . port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequest (). url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwith ( chain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproceed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( find Server ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfind Mock Response ( request : ĠRequest ): ĠMock Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatched Filters Ġ= Ġmocks . keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġfilter Ġ-> Ġfilter . match Score ( request ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( score , Ġ_) Ġ-> Ġscore Ġ> Ġ 0 Ġ} Ġ// Ġfind Ġall Ġfilters Ġthat Ġmatch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By Ġ{ Ġ( score , Ġ_) Ġ-> Ġscore Ġ} Ġ// Ġget Ġlist Ġof Ġfilters Ġwith Ġhighest Ġmatch Ġscore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġ(_, Ġfilters ) Ġ-> Ġfilters Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġmatched Filters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . find Ġ{ Ġit . priority Ġ} Ġ// Ġget Ġpriorit ized Ġfilter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmatched Filters ?. first OrNull () Ġ// Ġor Ġfirst Ġmatched ĊĠĠĠĠĠĠĠ Ġreturn Ġmocks [ filter ] ĊĠĠĠ Ġ} Ċ } Ċ