package Ġcom . app ham . mock in izer Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Method Source Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ internal Ġclass ĠMock in izer Interceptor Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġchain : ĠInter ceptor . Chain Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġval Ġsystem UnderTest : ĠMock in izer Interceptor Ġ= ĠMock in izer Interceptor ( mocks ) ĊĊĠĠĠ Ġprivate Ġval Ġreal Base url Ġ= Ġ" https :// foo . bar " ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Inv ocations ( chain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" args ") ĊĠĠĠ Ġfun Ġ` Should Ġmock Ġresponse ĠWhen ĠRequest Filter Ġcontains Ġrequest ĠOn Ġintercept `( args : ĠTest Data ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġbuild Ġa Ġrequest Ġfor Ġthe Ġchain Ġto Ġbe Ġintercept ed Ġby ĠMock in izer Interceptor ĊĠĠĠĠĠĠĠ Ġval Ġrequest Url Ġ= Ġ"$ real Base url ${ args . request Filter . path . or Empty () }" ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( request Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. method ( args . request Filter . method . name , Ġargs . request Filter . body ?. to RequestBody ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( args . request Filter . headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Ġplugin Ġthe Ġrequest Ġinto Ġthe ĠMock in izer Interceptor ĊĠĠĠĠĠĠĠ Ġwhenever ( chain . request ()). thenReturn ( request ) ĊĠĠĠĠĠĠĠ Ġsystem UnderTest . intercept ( chain ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcapture Ġthe Ġactual Ġrequest Ġafter ĠMock in izer Interceptor Ġis Ġdone Ġintercept ing Ġand Ġassert Ġit ĊĠĠĠĠĠĠĠ Ġargument Captor < Request > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( chain ). proceed ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Request Ġ= Ġthis . first Value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthere Ġis Ġno Ġmock Ġresponse Ġdefined Ġthen Ġurl Ġoriginal Ġone Ġor Ġlocalhost Ġotherwise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . mock Response Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual Request . url ). isEqualTo ( request . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual Request . url . host ). isEqualTo (" localhost ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual Request . method ). isEqualTo ( request . method ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual Request . headers ). isEqualTo ( request . headers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġargs () Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠ ĠTest Data ( Request Filter (), Ġnull ), ĊĠĠĠĠĠĠĠ ĠTest Data ( Request Filter ( path Ġ= Ġ" ban ana "), Ġnull ), ĊĠĠĠĠĠĠĠ ĠTest Data ( Request Filter ( method Ġ= ĠMethod . DELETE , Ġbody Ġ= Ġ""" {" type ":" apple "} "" "), Ġnull ), ĊĠĠĠĠĠĠĠ ĠTest Data ( Request Filter ( method Ġ= ĠMethod . PATCH , Ġbody Ġ= Ġ""" {" type ":" apple "} "" "), Ġnull ), ĊĠĠĠĠĠĠĠ ĠTest Data ( Request Filter ( method Ġ= ĠMethod . PUT , Ġpath Ġ= Ġ" ban ana ", Ġbody Ġ= Ġ""" {" type ":" apple "} "" "), Ġnull ), ĊĠĠĠĠĠĠĠ ĠTest Data ( Request Filter ( method Ġ= ĠMethod . POST , Ġpath Ġ= Ġ" ban ana ", Ġbody Ġ= Ġ""" {" type ":" apple "} "" "), Ġnull ) ĊĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd All ( mocks . map Ġ{ ĠTest Data ( it . key , Ġit . value ) Ġ}) ĊĠĠĠ Ġ}. stream () ĊĊĠĠĠ Ġdata Ġclass ĠTest Data ( ĊĠĠĠĠĠĠĠ Ġval Ġrequest Filter : ĠRequest Filter , ĊĠĠĠĠĠĠĠ Ġval Ġmock Response : ĠMock Response ? ĊĠĠĠ Ġ) Ċ Ċ } Ċ