package Ġwork . in ab aj un . ran ab aut s . domain . command Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġjava . net . URL Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ internal Ġclass ĠHTTP Command Test Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġweb Server : ĠMock WebServer ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Server Ġ= Ġsetup Mock Server () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Server ?. shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ No Command () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġroot Command Ġ= ĠHTTP Command ( URL (" http :// example . com "), Ġempty List ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexecute ĊĠĠĠĠĠĠĠ Ġroot Command . execute Commands () ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( web Server ?. request Count ). isEqualTo ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Single Command () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġchild Command Ġ= ĠHTTP Command ( assemble Mock Endpoint ( web Server !! ), Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġval Ġroot Command Ġ= ĠHTTP Command ( URL (" http :// example . com "), ĠlistOf ( child Command )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexecute ĊĠĠĠĠĠĠĠ Ġroot Command . execute Commands () ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( web Server ?. request Count ). isEqualTo ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġassertion Ġfor ĠHTTP Ġrequest Ġby Ġcommand ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġweb Server ?. take Request () ĊĠĠĠĠĠĠĠ ĠassertThat ( request ?. body ?. read Utf 8 ()). isEqualTo ( jackson ObjectMapper (). writeValue AsString ( child Command )) ĊĠĠĠĠĠĠĠ ĠassertThat ( request ?. method ). isEqualTo (" POST ") ĊĠĠĠĠĠĠĠ ĠassertThat ( request ?. path ). isEqualTo ("/ test ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ Multiple Command () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġchild Command 1 Ġ= ĠHTTP Command ( assemble Mock Endpoint ( web Server !! ), Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġval Ġchild Command 2 Ġ= ĠHTTP Command ( assemble Mock Endpoint ( web Server !! ), Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġval Ġroot Command Ġ= ĠHTTP Command ( URL (" http :// example . com "), ĠlistOf ( child Command 1 , Ġchild Command 2 )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexecute ĊĠĠĠĠĠĠĠ Ġroot Command . execute Commands () ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠassertThat ( web Server ?. request Count ). isEqualTo ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġassertion Ġfor ĠHTTP Ġrequest Ġby Ġcommand ĊĠĠĠĠĠĠĠ Ġval Ġrequest 1 Ġ= Ġweb Server ?. take Request () ĊĠĠĠĠĠĠĠ ĠassertThat ( request 1 ?. body ?. read Utf 8 ()). isEqualTo ( jackson ObjectMapper (). writeValue AsString ( child Command 1 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( request 1 ?. method ). isEqualTo (" POST ") ĊĠĠĠĠĠĠĠ ĠassertThat ( request 1 ?. path ). isEqualTo ("/ test ") ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest 2 Ġ= Ġweb Server ?. take Request () ĊĠĠĠĠĠĠĠ ĠassertThat ( request 2 ?. body ?. read Utf 8 ()). isEqualTo ( jackson ObjectMapper (). writeValue AsString ( child Command 2 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( request 2 ?. method ). isEqualTo (" POST ") ĊĠĠĠĠĠĠĠ ĠassertThat ( request 2 ?. path ). isEqualTo ("/ test ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassemble Mock Endpoint ( mock Server : ĠMock WebServer ): ĠURL Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠURL (" http ", Ġmock Server . host Name , Ġmock Server . port , Ġ"/ test ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġmock Ġserver Ġand Ġresponse Ġmock Ġurl ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Mock Server (): ĠMock WebServer Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinit Ġweb Ġmock ĊĠĠĠĠĠĠĠ Ġval Ġweb Server Ġ= ĠMock WebServer () ĊĠĠĠĠĠĠĠ Ġweb Server . start () ĊĠĠĠĠĠĠĠ Ġweb Server . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Response Code ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body (" this Ġis Ġfirst ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġweb Server . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Response Code ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body (" this Ġis Ġsecond ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġweb Server ĊĠĠĠ Ġ} Ċ } Ċ