package Ġio . re monic . server Ċ Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġio . re monic . server . config . Database Config Ċ import Ġio . re monic . server . config . Database Type Ċ import Ġorg . eclipse . jetty . client . HttpClient Ċ import Ġorg . eclipse . jetty . client . util . String Content Provider Ċ import Ġorg . eclipse . jetty . http . HttpMethod Ċ import Ġkotlin . reflect . K Class Ċ Ċ val Ġtest Client Ġ= ĠHttpClient () Ċ val Ġm oshi Ġ= ĠM oshi . Builder () ĊĠĠĠĠĠĠĠ Ġ. add ( Kotlin Json Adapter Factory ()) ĊĠĠĠĠĠĠĠ Ġ. build () Ċ var Ġtest Port Ġ= Ġ 0 Ċ Ċ class ĠTest Init Ġ{ ĊĠĠĠ Ġ@ org . junit . jupiter . api . Test Ġfun Ġtest Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġload Database ( Database Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Type Ġ= ĠDatabase Type . H 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Data Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" path ", Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" options ", Ġ" DB _ CLOSE _ DELAY =- 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġtest Port Ġ= Ġinit Server ( 0 ). port () ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" Successfully Ġinitialized Ġfor Ġtests ") ĊĊĠĠĠĠĠĠĠ Ġtest Client . start () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTest ( private Ġval Ġmethod : ĠHttpMethod , Ġprivate Ġval Ġpath : ĠString ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" Testing Ġ$ method Ġ/ $ path ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< T Ġ: ĠAny > Ġcase ( body : ĠString , Ġresponse : ĠK Class < T >, Ġassertions : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassertions ( case ( body , Ġresponse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġcase ( body : ĠString , Ġresponse : ĠK Class < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" Testing Ġwith Ġ$ body Ġto Ġexpect Ġ${ response . simple Name }") ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġtest Client . new Request (" http :// localhost :$ test Port /$ path ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. method ( method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( String Content Provider ( body . replace (" '", Ġ"\"" ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send () ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġres . content AsString ĊĊĠĠĠĠĠĠĠ ĠSystem . out . println (" Response : Ġ$ content ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm oshi . adapter ( response . java ). fromJson ( content ) !! ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Response Ġ$ content Ġcould Ġnot Ġbe Ġparsed Ġto Ġ${ response . simple Name }", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġtest ( method : ĠHttpMethod , Ġpath : ĠString , Ġinit : ĠTest . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠTest ( method , Ġpath ). init () Ċ }