package Ġcom . exp edia . graphql . execution Ċ Ċ import Ġcom . exp edia . graphql . annotations . GraphQL Context Ċ import Ġcom . exp edia . graphql . exceptions . Could Not Cast ArgumentException Ċ import Ġgraphql . schema . Data Fetching Environment Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ internal Ġclass ĠFunction Data Fetcher Test Ġ{ ĊĊĠĠĠ Ġinternal Ġclass ĠMy Class Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġprint ( string : ĠString ) Ġ= Ġstring ĊĊĠĠĠĠĠĠĠ Ġfun Ġprint Array ( items : ĠArray < String >) Ġ= Ġitems . join ToString ( separator Ġ= Ġ": ") ĊĊĠĠĠĠĠĠĠ Ġfun Ġprint List ( items : ĠList < String >) Ġ= Ġitems . join ToString ( separator Ġ= Ġ": ") ĊĊĠĠĠĠĠĠĠ Ġfun Ġcontext (@ GraphQL Context Ġstring : ĠString ) Ġ= Ġstring ĊĊĠĠĠĠĠĠĠ Ġfun Ġdata Fetching Environment ( environment : ĠData Fetching Environment ) Ġ= Ġenvironment . field . name ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġsuspend Print ( string : ĠString ): ĠString Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` null Ġtarget Ġand Ġnull Ġsource Ġreturns Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= Ġnull , Ġfn Ġ= ĠMy Class :: print ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . getSource < Any >() Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ ĠassertNull ( data Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` null Ġtarget Ġand Ġvalid Ġsource Ġreturns Ġthe Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= Ġnull , Ġfn Ġ= ĠMy Class :: print ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . getSource < Any >() Ġ} Ġreturns ĠMy Class () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" string " Ġto Ġ" hello ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" hello ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` valid Ġtarget Ġand Ġnull Ġsource Ġreturns Ġthe Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: print ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" string " Ġto Ġ" hello ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" hello ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` valid Ġtarget Ġwith Ġcontext `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: context ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . getContext < String >() Ġ} Ġreturns Ġ" foo " ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" foo ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` valid Ġtarget Ġand Ġvalue Ġfrom Ġpredicate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Predicate : ĠData Fetcher Execution Predicate Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Predicate . evaluate < String >( any (), Ġany (), Ġany ()) Ġ} Ġreturns Ġ" baz " ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: print , Ġexecution Predicate Ġ= Ġmock Predicate ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" string " Ġto Ġ" hello ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" baz ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` valid Ġtarget Ġand Ġnull Ġfrom Ġpredicate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Predicate : ĠData Fetcher Execution Predicate Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Predicate . evaluate < String ? >( any (), Ġany (), Ġany ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: print , Ġexecution Predicate Ġ= Ġmock Predicate ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" string " Ġto Ġ" hello ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" hello ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` array Ġinputs Ġcan Ġbe Ġconverted Ġby Ġthe Ġobject Ġmapper `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: print Array , Ġexecution Predicate Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" items " Ġto ĠarrayOf (" foo ", Ġ" bar ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" foo : bar ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` list Ġinputs Ġthrows Ġexception `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: print List , Ġexecution Predicate Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" items " Ġto ĠlistOf (" foo ", Ġ" bar ")) ĊĊĠĠĠĠĠĠĠ Ġassert Fails With ( Could Not Cast ArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Fetcher . get ( mock En viron met ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` data Fetching En viron ement Ġis Ġpassed Ġas Ġan Ġargument `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: data Fetching Environment ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . field Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġname Ġ} Ġreturns Ġ" foo Bar B az " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" foo Bar B az ", Ġactual Ġ= Ġdata Fetcher . get ( mock En viron met )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` suspend Ġfunctions Ġreturn Ġvalue Ġwrapped Ġin ĠCompletableFuture `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Fetcher Ġ= ĠFunction Data Fetcher ( target Ġ= ĠMy Class (), Ġfn Ġ= ĠMy Class :: suspend Print ) ĊĠĠĠĠĠĠĠ Ġval Ġmock En viron met : ĠData Fetching Environment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock En viron met . arguments Ġ} Ġreturns Ġmap Of (" string " Ġto Ġ" hello ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata Fetcher . get ( mock En viron met ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠCompletableFuture <* >) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ" hello ", Ġactual Ġ= Ġresult . get ()) ĊĠĠĠ Ġ} Ċ } Ċ