package Ġcom . rag in . bdd . cucumber . glue Ċ Ċ import Ġcom . rag in . bdd . cucumber . config . B dd Properties Ċ import Ġcom . rag in . bdd . cucumber . core . Scenario State Context Ċ import Ġcom . rag in . bdd . cucumber . core . Scenario State Context . editable Body Ċ import Ġcom . rag in . bdd . cucumber . core . Scenario State Context . uri Path Ċ import Ġcom . rag in . bdd . cucumber . utils . Json Utils Ċ import Ġio . cucumber . datatable . DataTable Ċ import Ġio . cucumber . java . ParameterType Ċ import Ġio . cucumber . java . en . Then Ċ import Ġio . cucumber . java . en . When Ċ import Ġorg . apache . commons . logging . Log Factory Ċ import Ġorg . junit . Assert Ċ import Ġorg . springframework . boot . test . web . client . Test Rest Template Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġcontains Ġcommon Ġ` When ` Ġexecution Ġof ĠREST Ġrelated Ġsteps . Ċ Ġ*/ Ċ class ĠWhen REST Execution Gl ue ( ĊĠĠĠ Ġjson Utils : ĠJson Utils , ĊĠĠĠ Ġb dd Properties : ĠB dd Properties , ĊĠĠĠ Ġrest Template : ĠTest Rest Template Ċ ) Ġ: ĠBase REST Execution Gl ue ( json Utils , Ġb dd Properties , Ġrest Template ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLog Factory . getLog ( Then REST Validation Gl ue :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI Ġand Ġbody ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI Ġand Ġbody ") ĊĠĠĠ Ġfun Ġwhen Executing Call With Previous ly Given Uri And Body ( http Method : ĠHttpMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI Ġand Ġbody ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI Ġand Ġbody ") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call With Previous ly Given Uri And Body ( http Method : ĠHttpMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġto Ġan ĠURL Ġwith Ġpreviously Ġgiven Ġbody ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġuri Ġto Ġthe Ġendpoint ĠURI ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġto Ġ{ string } Ġwith Ġpreviously Ġgiven Ġbody ") ĊĠĠĠ Ġfun Ġwhen Executing Call To Uri And Previous ly Given Body ( http Method : ĠHttpMethod , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġan ĠURL Ġwith Ġpreviously Ġgiven Ġbody ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġuri Ġto Ġthe Ġendpoint ĠURI ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġ{ string } Ġwith Ġpreviously Ġgiven Ġbody ") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call To Uri With Previous ly Given Body ( http Method : ĠHttpMethod , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Executing Authorized Call To Uri ( http Method , Ġuri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġto Ġthe Ġdefined ĠURL Ġwith Ġbody Ġfrom Ġfile ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġuri Ġto Ġthe Ġendpoint ĠURI ĊĠĠĠĠ Ġ* Ġ@ param Ġpath ToFile Ġpath Ġto Ġfile Ġto Ġread ĊĠĠĠĠ Ġ* Ġ@ throws Ġjava . io . IOException Ġerror Ġwhile Ġreading Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġto Ġ{ string } Ġwith Ġthe Ġbody Ġfrom Ġfile Ġ{ string }") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwhen Executing Call To Uri And Body FromFile ( http Method : ĠHttpMethod , Ġuri : ĠString , Ġpath ToFile : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠreadFile AsString ( path ToFile ) ĊĠĠĠĠĠĠĠ Ġeditable Body Ġ= Ġbody ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġthe Ġdefined ĠURL Ġwith Ġbody Ġfrom Ġfile ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġuri Ġto Ġthe Ġendpoint ĠURI ĊĠĠĠĠ Ġ* Ġ@ param Ġpath ToFile Ġpath Ġto Ġfile Ġto Ġread ĊĠĠĠĠ Ġ* Ġ@ throws Ġjava . io . IOException Ġerror Ġwhile Ġreading Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġ{ string } Ġwith Ġthe Ġbody Ġfrom Ġfile Ġ{ string }") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call To Uri With Body FromFile ( http Method : ĠHttpMethod , Ġuri : ĠString , Ġpath ToFile : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠreadFile AsString ( path ToFile ) ĊĠĠĠĠĠĠĠ Ġeditable Body Ġ= Ġbody ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġwithout Ġauthentication Ġto Ġthe Ġdefined ĠURL Ġwith Ġbody Ġfrom Ġfile Ġand Ġdynamic ĠURL Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġbetter Ġseparation Ġuse Ġthe Ġdatabase Ġinitializer Ġand Ġuse Ġstatic Ġvalues Ġinstead Ġof Ġtransport ing Ġthem Ġbetween Ġscenarios ! ĊĠĠĠĠ Ġ* Ġ< br ></ br > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDataTable Ġlooks Ġlike : ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ| ĠURI ĠElements Ġ Ġ| ĠURI ĠValues Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġresource Id ĠĠĠ Ġ| Ġabc - def - gh Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġsub ResourceId Ġ| Ġz yx - w vu - ts Ġ| ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠStructure : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ* ĠFirst Ġline Ġis Ġthe Ġheader . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠElements ' Ġis Ġthe Ġelement Ġname Ġof Ġthe Ġdynamic ĠURI Ġpath Ġwithout Ġ{} . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠValues ' Ġwill Ġbe Ġevaluated Ġfirst Ġfrom Ġthe Ġscenario Ġcontext . ĊĠĠĠĠ Ġ* ĠIf Ġcontext Ġvar Ġwas Ġnot Ġfound Ġuse Ġvalue Ġdirectly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ!!! ATT ENT ION !!! ĠThis Ġis Ġan ĠAnt i - Pattern Ġif Ġyou Ġreuse Ġpreviously Ġstored Ġelements , Ġbut Ġsometimes Ġit Ġcan Ġbe Ġnecessary Ġif ĠC ucumber Ġshould Ġwork Ġas ĠTest - Suite . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Table ĠDataTable Ġwhich Ġcontains Ġthe Ġmapping Ġof Ġdynamic Ġelements Ġand Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠAPI Ġpath , Ġbody Ġand Ġthese Ġdynamic Ġ' URI ĠElements ' Ġreplaced Ġwith Ġthe Ġ' URI ĠValues '") ĊĠĠĠ Ġfun Ġwhen Executing Call To Uri With Body And Dynamic UR LE lement ( http Method : ĠHttpMethod , Ġdata Table : ĠDataTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( dataTable , Ġhttp Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġthe Ġdefined ĠURL Ġwith Ġbody Ġfrom Ġfile Ġand Ġdynamic ĠURL Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġbetter Ġseparation Ġuse Ġthe Ġdatabase Ġinitializer Ġand Ġuse Ġstatic Ġvalues Ġinstead Ġof Ġtransport ing Ġthem Ġbetween Ġscenarios ! ĊĠĠĠĠ Ġ* Ġ< br ></ br > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDataTable Ġlooks Ġlike : ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ| ĠURI ĠElements Ġ Ġ| ĠURI ĠValues Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġresource Id ĠĠĠ Ġ| Ġabc - def - gh Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġsub ResourceId Ġ| Ġz yx - w vu - ts Ġ| ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠStructure : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ* ĠFirst Ġline Ġis Ġthe Ġheader . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠElements ' Ġis Ġthe Ġelement Ġname Ġof Ġthe Ġdynamic ĠURI Ġpath Ġwithout Ġ{} . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠValues ' Ġwill Ġbe Ġevaluated Ġfirst Ġfrom Ġthe Ġscenario Ġcontext . ĊĠĠĠĠ Ġ* ĠIf Ġcontext Ġvar Ġwas Ġnot Ġfound Ġuse Ġvalue Ġdirectly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ!!! ATT ENT ION !!! ĠThis Ġis Ġan ĠAnt i - Pattern Ġif Ġyou Ġreuse Ġpreviously Ġstored Ġelements , Ġbut Ġsometimes Ġit Ġcan Ġbe Ġnecessary Ġif ĠC ucumber Ġshould Ġwork Ġas ĠTest - Suite . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Table ĠDataTable Ġwhich Ġcontains Ġthe Ġmapping Ġof Ġdynamic Ġelements Ġand Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠAPI Ġpath , Ġbody Ġand Ġthese Ġdynamic Ġ' URI ĠElements ' Ġreplaced Ġwith Ġthe Ġ' URI ĠValues '") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call To Uri With Body And Dynamic UR LE lement ( http Method : ĠHttpMethod , Ġdata Table : ĠDataTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( dataTable , Ġhttp Method , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI Ġ( short Ġsentence ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI ") ĊĠĠĠ Ġfun Ġwhen Executing Call ( http Method : ĠHttpMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI Ġ( short Ġsentence ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠURI ") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call ( http Method : ĠHttpMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġto Ġthe Ġdefined ĠREST ĠURL ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġuri ĠĠ ĠURI Ġpath Ġto Ġcall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġto Ġ{ string }") ĊĠĠĠ Ġfun Ġwhen Executing Call To Uri ( http Method : ĠHttpMethod , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġthe Ġdefined ĠURL ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġuri Ġto Ġthe Ġendpoint ĠURI ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġ{ string }") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call To Uri ( http Method : ĠHttpMethod , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġ{ http Method } Ġcall Ġto Ġthe Ġdefined ĠURL Ġand Ġdynamic ĠURL Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġbetter Ġseparation Ġuse Ġthe Ġdatabase Ġinitializer Ġand Ġuse Ġstatic Ġvalues Ġinstead Ġof Ġtransport ing Ġthem Ġbetween Ġscenarios ! ĊĠĠĠĠ Ġ* Ġ< br ></ br > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDataTable Ġlooks Ġlike : ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ| ĠURI ĠElements Ġ Ġ| ĠURI ĠValues Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġresource Id ĠĠĠ Ġ| Ġabc - def - gh Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġsub ResourceId Ġ| Ġz yx - w vu - ts Ġ| ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠStructure : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ* ĠFirst Ġline Ġis Ġthe Ġheader . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠElements ' Ġis Ġthe Ġelement Ġname Ġof Ġthe Ġdynamic ĠURI Ġpath Ġwithout Ġ{} . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠValues ' Ġwill Ġbe Ġevaluated Ġfirst Ġfrom Ġthe Ġscenario Ġcontext . ĊĠĠĠĠ Ġ* ĠIf Ġcontext Ġvar Ġwas Ġnot Ġfound Ġuse Ġvalue Ġdirectly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ!!! ATT ENT ION !!! ĠThis Ġis Ġan ĠAnt i - Pattern Ġif Ġyou Ġreuse Ġpreviously Ġstored Ġelements , Ġbut Ġsometimes Ġit Ġcan Ġbe Ġnecessary Ġif ĠC ucumber Ġshould Ġwork Ġas ĠTest - Suite . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Table ĠDataTable Ġwhich Ġcontains Ġthe Ġmapping Ġof Ġdynamic Ġelements Ġand Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠAPI Ġpath Ġand Ġthese Ġdynamic Ġ' URI ĠElements ' Ġreplaced Ġwith Ġthe Ġ' URI ĠValues '") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Call To Uri With Dynamic UR LE lement ( http Method : ĠHttpMethod , Ġdata Table : ĠDataTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( dataTable , Ġhttp Method , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġ{ http Method } Ġcall Ġwithout Ġauthentication Ġto Ġthe Ġdefined ĠURL Ġwith Ġdynamic ĠURL Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġbetter Ġseparation Ġuse Ġthe Ġdatabase Ġinitializer Ġand Ġuse Ġstatic Ġvalues Ġinstead Ġof Ġtransport ing Ġthem Ġbetween Ġscenarios ! ĊĠĠĠĠ Ġ* Ġ< br ></ br > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDataTable Ġlooks Ġlike : ĊĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠ Ġ* Ġ| ĠURI ĠElements Ġ Ġ| ĠURI ĠValues Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġresource Id ĠĠĠ Ġ| Ġabc - def - gh Ġ| ĊĠĠĠĠ Ġ* Ġ| Ġsub ResourceId Ġ| Ġz yx - w vu - ts Ġ| ĊĠĠĠĠ Ġ* Ġ</ pre > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠStructure : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ* ĠFirst Ġline Ġis Ġthe Ġheader . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠElements ' Ġis Ġthe Ġelement Ġname Ġof Ġthe Ġdynamic ĠURI Ġpath Ġwithout Ġ{} . ĊĠĠĠĠ Ġ* Ġ Ġ* Ġ' URI ĠValues ' Ġwill Ġbe Ġevaluated Ġfirst Ġfrom Ġthe Ġscenario Ġcontext . ĊĠĠĠĠ Ġ* ĠIf Ġcontext Ġvar Ġwas Ġnot Ġfound Ġuse Ġvalue Ġdirectly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ!!! ATT ENT ION !!! ĠThis Ġis Ġan ĠAnt i - Pattern Ġif Ġyou Ġreuse Ġpreviously Ġstored Ġelements , Ġbut Ġsometimes Ġit Ġcan Ġbe Ġnecessary Ġif ĠC ucumber Ġshould Ġwork Ġas ĠTest - Suite . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Table ĠDataTable Ġwhich Ġcontains Ġthe Ġmapping Ġof Ġdynamic Ġelements Ġand Ġvalues ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġ{ http Method } Ġcall Ġwith Ġpreviously Ġgiven ĠAPI Ġpath Ġand Ġthe Ġdynamic Ġ' URI ĠElements ' Ġreplaced Ġwith Ġthe Ġ' URI ĠValues '") ĊĠĠĠ Ġfun Ġwhen Executing Call To Uri With Dynamic UR LE lement ( http Method : ĠHttpMethod , Ġdata Table : ĠDataTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Request ( dataTable , Ġhttp Method , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġpoll Ġrequest , Ġwhich Ġhas Ġto Ġbe Ġpre configured Ġuntil Ġthe Ġresponse Ġcontains ĊĠĠĠĠ Ġ* Ġthe Ġstatus Ġand Ġresponse Ġmessage Ġfrom Ġa Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected StatusCode Ġthe Ġexpected ĠHTTP Ġstatus Ġcode ĊĠĠĠĠ Ġ* Ġ@ param Ġpath ToFile Ġdescribes Ġthe Ġpath Ġto Ġthe Ġexpected ĠJSON Ġresponse Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Then (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġpoll Ġrequest Ġuntil Ġthe Ġresponse Ġcode Ġis Ġ{ int } Ġand Ġthe Ġbody Ġis Ġequal Ġto Ġfile Ġ{ string }") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwhen Executing Authorized Polling Until Response Is EqualTo File ( http Method : ĠHttpMethod , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected StatusCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ToFile : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Body Ġ= ĠreadFile AsString ( path ToFile ) ĊĠĠĠĠĠĠĠ Ġexecute Poll Request Until Response Is Equal ( http Method , Ġexpected StatusCode , Ġexpected Body , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġpoll Ġrequest , Ġwhich Ġhas Ġto Ġbe Ġpre configured Ġuntil Ġthe Ġresponse Ġcontains ĊĠĠĠĠ Ġ* Ġthe Ġstatus Ġand Ġresponse Ġmessage Ġfrom Ġa Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected StatusCode Ġthe Ġexpected ĠHTTP Ġstatus Ġcode ĊĠĠĠĠ Ġ* Ġ@ param Ġpath ToFile Ġdescribes Ġthe Ġpath Ġto Ġthe Ġexpected ĠJSON Ġresponse Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Then (" exec uting Ġa Ġ{ http Method } Ġpoll Ġrequest Ġuntil Ġthe Ġresponse Ġcode Ġis Ġ{ int } Ġand Ġthe Ġbody Ġis Ġequal Ġto Ġfile Ġ{ string }") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwhen Executing Polling Until Response Is EqualTo File ( http Method : ĠHttpMethod , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected StatusCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ToFile : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Body Ġ= ĠreadFile AsString ( path ToFile ) ĊĠĠĠĠĠĠĠ Ġexecute Poll Request Until Response Is Equal ( http Method , Ġexpected StatusCode , Ġexpected Body , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġpoll Ġrequest , Ġwhich Ġhas Ġto Ġbe Ġpre configured Ġuntil Ġthe Ġresponse Ġcontains ĊĠĠĠĠ Ġ* Ġthe Ġstatus . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected StatusCode Ġthe Ġexpected ĠHTTP Ġstatus Ġcode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Then (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġpoll Ġrequest Ġuntil Ġthe Ġresponse Ġcode Ġis Ġ{ int }") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwhen Executing Authorized Polling Until Response Code Is Equal ( http Method : ĠHttpMethod , Ġ Ġexpected StatusCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Poll Request Until Response Is Equal ( http Method Ġ= Ġhttp Method , Ġexpected StatusCode Ġ= Ġexpected StatusCode , Ġauthorized Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġpoll Ġrequest , Ġwhich Ġhas Ġto Ġbe Ġpre configured Ġuntil Ġthe Ġresponse Ġcontains ĊĠĠĠĠ Ġ* Ġthe Ġstatus . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected StatusCode Ġthe Ġexpected ĠHTTP Ġstatus Ġcode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Then (" exec uting Ġa Ġ{ http Method } Ġpoll Ġrequest Ġuntil Ġthe Ġresponse Ġcode Ġis Ġ{ int }") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwhen Executing Polling Until Response Code Is Equal ( http Method : ĠHttpMethod , Ġexpected StatusCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Poll Request Until Response Is Equal ( http Method Ġ= Ġhttp Method , Ġexpected StatusCode Ġ= Ġexpected StatusCode , Ġauthorized Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġan Ġauthorized Ġpoll Ġrequest , Ġwhich Ġhas Ġto Ġbe Ġpre configured Ġuntil Ġthe Ġresponse Ġcontains ĊĠĠĠĠ Ġ* Ġthe Ġstatus Ġand ĠJSON Ġresponse Ġmessage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected StatusCode Ġthe Ġexpected ĠHTTP Ġstatus Ġcode ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Body Ġdescribes Ġthe Ġexpected ĠJSON Ġbody ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Then (" exec uting Ġan Ġauthorized Ġ{ http Method } Ġpoll Ġrequest Ġuntil Ġthe Ġresponse Ġcode Ġis Ġ{ int } Ġand Ġthe Ġbody Ġis Ġequal Ġto ") ĊĠĠĠ Ġfun Ġwhen Executing Authorized Polling Until Response Is Equal ( http Method : ĠHttpMethod , Ġexpected StatusCode : ĠInt , Ġexpected Body : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Poll Request Until Response Is Equal ( http Method , Ġexpected StatusCode , Ġexpected Body , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġa Ġpoll Ġrequest , Ġwhich Ġhas Ġto Ġbe Ġpre configured Ġuntil Ġthe Ġresponse Ġcontains ĊĠĠĠĠ Ġ* Ġthe Ġstatus Ġand ĠJSON Ġresponse Ġmessage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method ĠHTTP ĠMethod ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected StatusCode Ġthe Ġexpected ĠHTTP Ġstatus Ġcode ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Body Ġdescribes Ġthe Ġexpected ĠJSON Ġbody ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Then (" exec uting Ġa Ġ{ http Method } Ġpoll Ġrequest Ġuntil Ġthe Ġresponse Ġcode Ġis Ġ{ int } Ġand Ġthe Ġbody Ġis Ġequal Ġto ") ĊĠĠĠ Ġfun Ġwhen Executing Polling Until Response Is Equal ( http Method : ĠHttpMethod , Ġexpected StatusCode : ĠInt , Ġexpected Body : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute Poll Request Until Response Is Equal ( http Method , Ġexpected StatusCode , Ġexpected Body , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġa Ġform - data Ġmultipart ĠPOST Ġrequest . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġdat atable Ġcontains Ġthe Ġfields Ġof Ġthe Ġrequest Ġas Ġkey / value Ġpair . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġa Ġform - data ĠPOST Ġcall Ġto Ġ{ string } Ġwith Ġthe Ġfields ") ĊĠĠĠ Ġfun Ġwhen Executing FormData Request ( uri : ĠString , Ġdata Table : ĠDataTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġexecute FormData Request ( dataTable , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġan Ġauthorized Ġform - data Ġmultipart ĠPOST Ġrequest . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġdat atable Ġcontains Ġthe Ġfields Ġof Ġthe Ġrequest Ġas Ġkey / value Ġpair . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ When (" exec uting Ġan Ġauthorized Ġform - data ĠPOST Ġcall Ġto Ġ{ string } Ġwith Ġthe Ġfields ") ĊĠĠĠ Ġfun Ġwhen Executing Authorized FormData Request ( uri : ĠString , Ġdata Table : ĠDataTable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Path Ġ= Ġuri ĊĠĠĠĠĠĠĠ Ġexecute FormData Request ( dataTable , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Poll Request Until Response Is Equal ( http Method : ĠHttpMethod , Ġexpected StatusCode : ĠInt , Ġexpected Body : ĠString ? Ġ= Ġnull , Ġauthorized : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals (" Please Ġconfigure Ġmax Ġnumber Ġof Ġpol ls !", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScenario State Context . polling . numberOf Pol ls ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġrepeat Loop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. Scenario State Context . polling . numberOf Pol ls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Request ( http Method , Ġauthorized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevaluate Body ( expected Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( expected StatusCode , ĠScenario State Context . latest Response !!. statusCode . value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Loop Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠAssertionError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS . sleep ( Scenario State Context . polling . poll Every Seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevaluate Body ( expected Body ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( expected StatusCode , ĠScenario State Context . latest Response !!. statusCode . value ()) ĊĠĠĠĠĠĠĠ Ġlog . info (" Polling Ġfinished Ġafter Ġ$ repeat Loop Ġrepe ats ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompare Ġmessage Ġbody Ġwith Ġexpected Ġresult , Ġif Ġbody Ġis Ġpresent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Body Ġbody ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġevaluate Body ( expected Body : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! expected Body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert JSON isEqual ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Body , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScenario State Context . latest Response !!. body ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefinition Ġof Ġ{ http Method } Ġto Ġoffer Ġconcrete Ġbut Ġdynamic Ġparameter Ġtype ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġhttp Method Ġ ĠString Ġvalue Ġof ĠHttpMethod ĊĠĠĠĠ Ġ* Ġ@ return ĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod Ġenum ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ ParameterType (" GET | POST | PUT | PATCH | DELETE ") ĊĠĠĠ Ġfun Ġhttp Method ( http Method : ĠString ): ĠHttpMethod Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHttpMethod . valueOf ( http Method ) ĊĠĠĠ Ġ} Ċ } Ċ