package Ġspec . http Ċ Ċ import Ġcom . github . assertion . core . context . Context Ċ import Ġcom . github . assertion . core . dsl . Resolver Ċ import Ġcom . github . assertion . core . dsl . Spec Ċ import Ġcom . github . assertion . core . dsl . Specification Ċ import Ġcom . github . assertion . core . dsl . specification Ċ import Ġcom . github . assertion . samples . http . Card Info Rq Ċ import Ġcom . github . assertion . samples . http . Card Info Rs Ċ import Ġcom . github . assertion . samples . http . Card Issue Rs Ċ import Ġcom . github . assertion . samples . http . Card Status Rs Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ class ĠCard Info Rq Resolver Ġ: ĠResolver < Card Info Rq > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġresolve And Execute ( context : ĠContext , Ġexecute : Ġ( Card Info Rq ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissue : ĠCard Issue Rs Ġ= Ġcontext . try Get ( Card Issue Rs :: class ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġr q Ġ= ĠCard Info Rq ( issue . id , Ġissue . pan , Ġissue . ps n ) ĊĠĠĠĠĠĠĠ Ġcontext [ Card Info Rq :: class ] Ġ= Ġr q ĊĠĠĠĠĠĠĠ Ġexecute ( rq ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCard Status Resolver Ġ: ĠResolver < Card Info Rq > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġresolve And Execute ( context : ĠContext , Ġexecute : Ġ( Card Info Rq ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissue : ĠCard Status Rs Ġ= Ġcontext . try Get ( Card Status Rs :: class ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( issue . card Ġ== Ġnull ) Ġthrow ĠIllegalArgumentException (" Card Ġat Ġstatus Ġresponse Ġis Ġabsent ") ĊĠĠĠĠĠĠĠ Ġval Ġr q Ġ= ĠCard Info Rq ( issue . id , Ġissue . card !!. pan , Ġissue . card !!. ps n ) ĊĠĠĠĠĠĠĠ Ġcontext [ Card Info Rq :: class ] Ġ= Ġr q ĊĠĠĠĠĠĠĠ Ġexecute ( rq ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCard Info Spec ( ĊĠĠĠ Ġprivate Ġval Ġout Ctx Var Name : ĠAny Ġ= ĠCard Info Rs :: class , ĊĠĠĠ Ġprivate Ġval Ġresolver s : ĠList < Resolver < Card Info Rq >> Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠCard Info Rq Resolver (), ĊĠĠĠĠĠĠĠ ĠCard Status Resolver () ĊĠĠĠ Ġ) Ċ ) Ġ: ĠSpec Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġspec (): ĠSpecification Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġspecification Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolver s . first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . resolve And Execute ( context ) Ġ{ Ġr q Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecute Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecute Service (" http :// localhost : 8 0 8 0 / card / info /? id =${ rq . id }& pan =${ rq . pan }& ps n =${ rq . ps n }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute Service . get < Card Info Rs >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" card Ġinfo Ġresponse Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext [ out Ctx Var Name ] Ġ= Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ