package Ġorg . ev om aster . experiments . objects . writer Ċ Ċ import Ġorg . apache . commons . lang 3 . String Escape Utils Ċ import Ġorg . ev om aster . core . database . Db Action Ċ import Ġorg . ev om aster . core . output . formatter . Output Formatter Ċ import Ġorg . ev om aster . core . problem . rest . Rest Call Result Ċ import Ġorg . ev om aster . core . search . Evalu ated Action Ċ import Ġorg . ev om aster . core . search . gene .* Ċ import Ġorg . ev om aster . core . output .* Ċ import Ġorg . ev om aster . core . search . gene . sql . Sql ForeignKey Gene Ċ import Ġorg . ev om aster . core . search . gene . sql . Sql PrimaryKey Gene Ċ import Ġorg . ev om aster . experiments . objects . Obj Individual Ċ import Ġorg . ev om aster . experiments . objects . Obj Rest Call Action Ċ import Ġorg . ev om aster . experiments . objects . param . Body Param Ċ import Ġorg . ev om aster . experiments . objects . param . Header Param ĊĊ Ċ class ĠObj TestCase Writer Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcounter Ġ= Ġ 0 ĊĊĠĠĠ Ġfun ĠconvertTo Comp il able Test Code ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat : ĠOutput Format , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest : ĠTestCase , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Of S ut : ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠLines Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcounter Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġlines Ġ= ĠLines () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( format . is JUnit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("@ Test ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Java () Ġ-> Ġlines . add (" public Ġvoid Ġ${ test . name }() Ġthrows ĠException Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Kotlin () Ġ-> Ġlines . add (" fun Ġ${ test . name }() Ġ Ġ{ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlines . indent () ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġif Ġ( test . test . individual Ġis ĠObj Individual ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! test . test . individual . db Initialization . isEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Db Initialization ( format , Ġtest . test . individual . db Initialization , Ġlines ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( test . has Chain ed Locations ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add Empty () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest . test . evalu ated Actions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . action Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance ( Obj Rest Call Action :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . location Id Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . location Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġlocation Var ( id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Java () Ġ-> Ġlines . add (" String Ġ$ name Ġ= Ġ\" \"; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Kotlin () Ġ-> Ġlines . add (" var Ġ$ name Ġ= Ġ\" \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġtest . test . evalu ated Actions (). forEach Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( a . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠObj Rest Call Action Ġ-> Ġhandle Rest Call ( a , Ġlines , ĠbaseUrl Of S ut ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Cannot Ġhandle Ġ" Ġ+ Ġa . action . getName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlines . de indent () ĊĠĠĠĠĠĠĠ Ġlines . add (" }") ĊĊĠĠĠĠĠĠĠ Ġ// TODO : ĠRemove Ġthis ĠAS AP Ġ: D Ġit 's Ġjust Ġmeant Ġto Ġbe Ġa Ġtest Ġof Ġthe Ġused Obj Ġand Ġpotential Ġadding Ġto ĠTC ĊĊĠĠĠĠĠĠĠ Ġprintln (" Individual : Ġ${ test . test . individual } Ġuses Ġ=> Ġ${ ( test . test . individual Ġas ĠObj Individual ). used Object . display Inline ()} Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġgood gets Ġ= Ġtest . test . results . filter Ġ{ result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( result Ġas ĠRest Call Result ). getStatusCode () Ġ== Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgood puts Ġ= Ġtest . test . results . filter Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( result Ġas ĠRest Call Result ). getStatusCode () Ġ== Ġ 2 0 1 ĊĠĠĠĠĠĠĠ Ġ}. forEach { Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgood put Ġ= Ġ( res Ġas ĠRest Call Result ). getBody () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgood gets . forEach Ġ{ Ġres Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġte Ġ= Ġ( res Ġas ĠRest Call Result ). getBody () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġlines ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġfun Ġhandle Db Initialization ( format : ĠOutput Format , Ġdb Initialization : ĠMutable List < Db Action >, Ġlines : ĠLines ) Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġdb Initialization . forEach Indexed Ġ{ Ġindex , Ġdb Action Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ== Ġ 0 Ġ&& Ġformat . is Java () Ġ-> Ġ" List < Insertion Dto > Ġinsert ions Ġ= Ġsql ()" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ== Ġ 0 Ġ&& Ġformat . is Kotlin () Ġ-> Ġ" val Ġinsert ions Ġ= Ġsql ()" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ". and ()" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ Ġ". insert Into (\" ${ db Action . table . name }\ ", Ġ${ db Action . ge Insertion Id ()} L )") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Action . see Gen es (). forEach Ġ{ Ġg Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g . is Print able ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġis ĠSql ForeignKey Gene Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġhandle FK ( g , Ġdb Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( g Ġis ĠSql PrimaryKey Gene ) Ġ&& Ġ( g . gene Ġis ĠSql ForeignKey Gene ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO : Ġthis Ġwill Ġneed Ġto Ġbe Ġref actored Ġwhen ĠGene Ġsystem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwill Ġhave Ġ" previous Gen es "- based Ġmethods Ġon Ġall Ġgenes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġhandle FK ( g . gene , Ġdb Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Name Ġ= Ġg . get Variable Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprint able Value Ġ= Ġget Print able Value ( g ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". d (\" $ variable Name \", Ġ\"$ print able Value \") ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġdb Initialization . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". d tos ()" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Java () Ġ-> Ġ";" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Kotlin () Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . de indent () ĊĊĠĠĠĠĠĠĠ Ġvar Ġexec Insert ions Line Ġ= Ġ" controller . exec Insert ions Into Database ( insert ions )" ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Java () Ġ-> Ġexec Insert ions Line Ġ+= Ġ";" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat . is Kotlin () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . add ( exec Insert ions Line ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġget Print able Value ( g : ĠGene ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( g Ġis ĠSql PrimaryKey Gene ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Print able Value ( g . gene ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString Escape Utils . escape Java ( g . getValue As Print able String ( target Format Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle FK ( g : ĠSql ForeignKey Gene , Ġaction : ĠDb Action ): ĠString Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO : Ġwhy Ġthe Ġcode Ġhere Ġis Ġnot Ġrelying Ġon ĠSql ForeignKey Gene # getValue As Print able String Ġ??? ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġvariable Name Ġ= Ġg . get Variable Name () ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAt Ġthis Ġpoint Ġall Ġpk ĠI ds Ġshould Ġbe Ġvalid ĊĠĠĠĠĠĠĠĠ Ġ* Ġ( de sp ite Ġthey Ġbeing ĠNULL Ġor Ġnot ) ĊĠĠĠĠĠĠĠĠ Ġ**/ ĊĠĠĠĠĠĠĠ Ġassert ( g . has Valid UniqueId Of PrimaryKey ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( g . isNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". d (\" $ variable Name \", Ġ\" NULL \") " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeep Auto GeneratedValue Ġ= Ġaction . selected Columns . filter Ġ{ Ġit . name Ġ== Ġg . name Ġ}. first (). foreign Key To Auto Increment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunique Id Ġ= Ġg . unique Id Of PrimaryKey Ġ// g . unique Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keep Auto GeneratedValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". r (\" $ variable Name \", Ġ${ unique Id } L , Ġtrue )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". r (\" $ variable Name \", Ġ${ unique Id } L )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġlocation Var ( id : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġmake Ġsure Ġname Ġis Ġsynt act ically Ġvalid ĊĠĠĠĠĠĠĠ Ġ// TODO Ġuse Ġcounters Ġto Ġmake Ġthem Ġunique ĊĠĠĠĠĠĠĠ Ġreturn Ġ" location _${ id . trim (). replace (" Ġ", Ġ"_ ") }" ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġhandle Rest Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Action : ĠEvalu ated Action , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines : ĠLines , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Of S ut : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlines . add Empty () ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġevaluated Action . action Ġas ĠObj Rest Call Action ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġevaluated Action . result Ġas ĠRest Call Result ĊĊĠĠĠĠĠĠĠ Ġif Ġ( res . failed Call ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rest Call In Try Catch ( call , Ġlines , Ġres , ĠbaseUrl Of S ut ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rest Call Lines ( call , Ġlines , Ġres , ĠbaseUrl Of S ut ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Rest Call In Try Catch ( call : ĠObj Rest Call Action , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines : ĠLines , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres : ĠRest Call Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Of S ut : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlines . add (" try { ") ĊĠĠĠĠĠĠĠ Ġlines . indent () ĊĊĠĠĠĠĠĠĠ Ġadd Rest Call Lines ( call , Ġlines , Ġres , ĠbaseUrl Of S ut ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! res . getTime d out ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFail Ġtest Ġif Ġexception Ġis Ġnot Ġthrown , Ġbut Ġnot Ġif Ġit Ġwas Ġa Ġtimeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġotherwise Ġthe Ġtest Ġwould Ġbecome Ġflaky ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" fail (\" Expected Ġexception \ "); ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . de indent () ĊĊĠĠĠĠĠĠĠ Ġlines . add (" } Ġcatch ( Exception Ġe ){ ") ĊĠĠĠĠĠĠĠ Ġres . get ErrorMessage ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" //$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . add (" }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Rest Call Lines ( call : ĠObj Rest Call Action , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines : ĠLines , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres : ĠRest Call Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Of S ut : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// first Ġhandle Ġthe Ġfirst Ġline ĊĠĠĠĠĠĠĠ Ġhandle First Line ( call , Ġlines , Ġres ) ĊĠĠĠĠĠĠĠ Ġlines . indent ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġhandle Headers ( call , Ġlines ) ĊĊĠĠĠĠĠĠĠ Ġhandle Body ( call , Ġlines ) ĊĊĠĠĠĠĠĠĠ Ġhandle Verb ( baseUrl Of S ut , Ġcall , Ġlines ) ĊĊĠĠĠĠĠĠĠ Ġhandle Response ( lines , Ġres ) ĊĊĠĠĠĠĠĠĠ Ġ// finally , Ġhandle Ġthe Ġlast Ġline ( s ) ĊĠĠĠĠĠĠĠ Ġhandle Last Line ( call , Ġres , Ġlines ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Last Line ( call : ĠObj Rest Call Action , Ġres : ĠRest Call Result , Ġlines : ĠLines ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( call . save Location Ġ&& Ġ! res . stopping ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! res . get He ur istics For Chain ed Location ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". extract (). header (\" location \ "); ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" assertTrue ( isValid URI or Empty (${ location Var ( call . path . last Element ()) })); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". extract (). body (). path (\" ${ res . getResource Id Name ()} \" ). toString (); ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Uri : ĠString Ġ= Ġif Ġ( call . location Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Var ( call . location Id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . path . resolve Only Path ( call . parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("${ location Var ( call . path . last Element ()) } Ġ= Ġ\"$ base Uri / \" Ġ+ Ġid _$ counter ; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append ("; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle First Line ( call : ĠObj Rest Call Action , Ġlines : ĠLines , Ġres : ĠRest Call Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlines . add Empty () ĊĠĠĠĠĠĠĠ Ġif Ġ( call . save Location Ġ&& Ġ! res . stopping ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! res . get He ur istics For Chain ed Location ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append ("${ location Var ( call . path . last Element ()) } Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append (" String Ġid _$ counter Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . append (" given ()" Ġ+ Ġget Accept Header ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Verb ( baseUrl Of S ut : ĠString , Ġcall : ĠObj Rest Call Action , Ġlines : ĠLines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġverb Ġ= Ġcall . verb . name . toLowerCase () ĊĠĠĠĠĠĠĠ Ġlines . add (" .$ verb (" ) ĊĠĠĠĠĠĠĠ Ġif Ġ( call . location Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append (" resolve Location (${ location Var ( call . location Id !! )}, Ġ$ baseUrl Of S ut Ġ+ Ġ\" ${ call . resolved Path () }\ ") ") ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append ("$ baseUrl Of S ut Ġ+ Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call . path . numberOf Us able QueryParams ( call . parameters ) Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcall . path . resolve ( call . parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append ("\" $ uri \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// se veral Ġquery Ġparameters . Ġlets Ġhave Ġthem Ġone Ġper Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġcall . path . resolve Only Path ( call . parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġcall . path . resolve Only Query ( call . parameters ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . append ("\" $ path ? \" Ġ+ Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġelements . last Index ). forEach Ġ{ Ġi Ġ-> Ġlines . add ("\" ${ elements [ i ]} & \" Ġ+ Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("\" ${ elements . last ()} \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . append (" )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Response ( lines : ĠLines , Ġres : ĠRest Call Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . failed Call ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". then () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". statusCode (${ res . getStatusCode () }) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// assert Return Simple ( lines , Ġres ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġcheck Ġon Ġbody ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Body ( call : ĠObj Rest Call Action , Ġlines : ĠLines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Body ( call , Ġlines , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Body ( call : ĠObj Rest Call Action , Ġlines : ĠLines , Ġreadable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall . parameters . find Ġ{ Ġp Ġ-> Ġp Ġis ĠBody Param Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". contentType (\" application / json \") ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġif Ġ( readable ) ĠOutput Formatter . JSON _ FORMAT TER . get Formatted ( it . gene . getValue As Print able String ( target Format Ġ= Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit . gene . getValue As Print able String ( target Format Ġ= Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// needed Ġas ĠJSON Ġuses Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Lines Ġ= Ġbody . split ("\ n "). map Ġ{ Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\"" Ġ+ Ġs . trim (). replace (" \"", Ġ"\\ \" ") Ġ+ Ġ"\"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Lines . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". body (${ body Lines . first () }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". body (${ body Lines . first ()} Ġ+ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 Ġuntil Ġbody Lines . last Index ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("${ body Lines [ i ]} Ġ+ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("${ body Lines . last () }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . de indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġform Ġ= Ġcall . getBody FormData () ĊĠĠĠĠĠĠĠ Ġif Ġ(! form . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". contentType (\" application / x - www - form - urlencoded \") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". body (\" $ form \") ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Headers ( call : ĠObj Rest Call Action , Ġlines : ĠLines ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpre chosen Auth Headers Ġ= Ġcall . auth . headers . map Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠ Ġcall . auth . headers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". header (\" ${ it . name }\ ", Ġ\" ${ it . value }\ ") Ġ// Ġ${ call . auth . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcall . parameters . filter Is Instance < Header Param >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! pre chosen Auth Headers . contains ( it . name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (". header (\" ${ it . name }\ ", Ġ${ it . gene . getValue As Print able String ( target Format Ġ= Ġnull )}) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Accept Header (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠNote : Ġusing Ġthe Ġtype Ġin Ġresult Ġbody Ġis Ġwrong : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġif Ġyou Ġrequest Ġa ĠJSON Ġbut Ġmake Ġan Ġerror , Ġyou Ġmight ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġget Ġback Ġa Ġtext / plain Ġwith Ġan Ġexplanation ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠTODO : Ġget Ġthe Ġtype Ġfrom Ġthe ĠREST Ġcall ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn Ġ". accept (\" * /* \") " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Return Simple ( lines : ĠLines , Ġresult : ĠRest Call Result ){ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ. body (" empty ", equalTo ( false )) ĊĊĠĠĠĠĠĠĠ Ġlines . add (". assertThat () ") ĊĠĠĠĠĠĠĠ Ġlines . indent ( 1 ) ĊĠĠĠĠĠĠĠ Ġ// if Ġ( result . failed Call () Ġ|| Ġresult . getStatusCode () Ġ!= Ġ 2 0 0 ){ ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġlines . add (". body (\" empty \", ĠequalTo ( true )") ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠ Ġ// else { ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġlines . add (". body (\" type \", ĠequalTo (\" ${ result . getBody Type () }\ ") ") ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠ Ġ// TODO : Ġnote Ġthe Ġcode Ġbelow Ġis Ġnot Ġactually Ġokay . ĠTest Ġpurposes Ġonly ĊĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( result . getStatusCode () Ġ== Ġ 2 0 0 ) Ġ-> Ġlines . add (". body (\" type \", ĠequalTo (\" ${ result . getBody Type () }\ ") ") ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġ( result . getStatusCode () Ġ!= Ġ 2 0 0 ) Ġ-> Ġlines . add (". body (\" empty \", ĠequalTo ( true )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines . de indent ( 1 ) ĊĠĠĠ Ġ} Ċ }