package Ġfr . lem fi . reach it . test Ċ Ċ import Ġcom . github . lem fi . k est . core . cli .` assert Ġthat ` Ċ import Ġcom . github . lem fi . k est . core . cli .` true ` Ċ import Ġcom . github . lem fi . k est . core . cli . eq Ċ import Ġcom . github . lem fi . k est . core . cli . scenario Ċ import Ġcom . github . lem fi . k est . executor . http . cli .` given Ġhttp Ġcall ` Ċ import Ġcom . github . lem fi . k est . executor . http . model . file Part Ċ import Ġcom . github . lem fi . k est . executor . http . model . multipart Body Ċ import Ġcom . github . lem fi . k est . executor . http . model . parameter Part Ċ import Ġcom . github . lem fi . k est . json . model . Json Map Ċ import Ġcom . github . lem fi . k est . junit 5 . runner .` play Ġscenarios ` Ċ import Ġfr . lem fi . reach it . test . sample api . start Sample Api Ċ import Ġorg . junit . jupiter . api . Test Factory Ċ import Ġjava . io . File Ċ Ċ class ĠRe ach It Test Ġ{ ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġgo () Ġ= Ġ` play Ġscenarios `( ĊĊĠĠĠĠĠĠĠ Ġscenario Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ{ Ġ" say Ġhello " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ` given Ġhttp Ġcall `< String > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 0 1 / hello " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġ""" {" who ": Ġ" D arth ĠV ader "} """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġ" application / json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` given Ġhttp Ġcall `< String > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 8 0 / req / f lem ont re er / hello " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġ""" {" who ": Ġ" Han ĠSo lo "} """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġ" application / json " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ` assert Ġthat ` Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). status , Ġit . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" Hello ĠHan ĠSo lo !", Ġit . body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠ Ġscenario Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ{ Ġ" get Ġg reet ed Ġlist " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ` given Ġhttp Ġcall `< List < String >> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 0 1 / hello " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` given Ġhttp Ġcall `< List < String >> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 8 0 / req / f lem ont re er / hello " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ` assert Ġthat ` Ġ{ Ġstep Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). status , Ġstep . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). body , Ġstep . body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected (). headers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` true `( step . headers . containsKey ( it . key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( it . value , Ġstep . headers [ it . key ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠ Ġscenario Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ{ Ġ" status Ġcode Ġis Ġcorrectly Ġforwarded " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ` given Ġhttp Ġcall `< Json Map > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 0 1 / wh atever " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` given Ġhttp Ġcall `< Json Map > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 8 0 / req / f lem ont re er / wh atever " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ` assert Ġthat ` Ġ{ Ġstep Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). status , Ġstep . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). body , Ġstep . body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected (). headers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` true `( step . headers . containsKey ( it . key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( it . value , Ġstep . headers [ it . key ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠ Ġscenario Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ{ Ġ" multipart / form - data Ġis Ġcorrectly Ġhandled " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ` given Ġhttp Ġcall `< String > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 0 1 / send - letter " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġmultipart Body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Part Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile ( java Class . getResource ("/ s anta _ cla us . txt ") !!. to URI ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" letter " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Ġ= Ġ" my _ letter . txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Part Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" to " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" s anta Ġcla us " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` given Ġhttp Ġcall `< Json Map > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 8 0 / req / f lem ont re er / send - letter " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġmultipart Body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Part Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile ( java Class . getResource ("/ s anta _ cla us . txt ") !!. to URI ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" letter " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Ġ= Ġ" my _ letter . txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Part Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" to " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" s anta Ġcla us " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ` assert Ġthat ` Ġ{ Ġstep Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). status , Ġstep . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). body , Ġstep . body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected (). headers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` true `( step . headers . containsKey ( it . key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( it . value , Ġstep . headers [ it . key ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠ Ġscenario Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ{ Ġ" chunk ed Ġencoding Ġis Ġcorrectly Ġhandled " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ` given Ġhttp Ġcall `< String > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 0 1 / lo rem - ip sum " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` given Ġhttp Ġcall `< Json Map > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http :// localhost : 8 0 8 0 / req / f lem ont re er / lo rem - ip sum " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" GET " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ` assert Ġthat ` Ġ{ Ġstep Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). status , Ġstep . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( expected (). body , Ġstep . body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected (). headers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . key Ġ== Ġ" Transfer - Encoding " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` true `( step . headers . containsKey ( it . key )) Ġ{ Ġ" headers Ġshould Ġcontain Ġkey Ġ${ it . key }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( it . value , Ġstep . headers [ it . key ]) Ġ{ Ġ" header Ġ${ it . key } Ġshould Ġtake Ġvalue Ġ${ it . value }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠ ĠbeforeEach Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Sample Api () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ }