package Ġcom . kar h oo . sdk . api . service . payments Ċ Ċ import Ġcom . kar h oo . sdk . api . Kar h oo Error Ċ import Ġcom . kar h oo . sdk . api . network . response . Resource Ċ import Ġcom . kar h oo . sdk . api . test runner . base . Base Kar h oo User Interactor Test Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . never Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġorg . json . JSONObject Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠAd yen Payments Details Interactor Test Ġ: ĠBase Kar h oo User Interactor Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġad yen Payments Details : ĠString Ġ= Ġ"{\" field 1 \":\" some Ġtext \", Ġ\" field 2 \":\" some Ġmore Ġtext \" }" ĊĠĠĠ Ġprivate Ġval Ġad yen Payments Response : ĠResponse Body Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinter actor : ĠAd yen Payments Details Interactor ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĠĠĠĠĠĠĠ Ġwhenever ( credentials Manager . isValid Token ). thenReturn ( true ) ĊĠĠĠĠĠĠĠ Ġinter actor Ġ= ĠAd yen Payments Details Interactor ( credentials Manager , Ġapi Template , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven : ĠĠ ĠA Ġrequest Ġis Ġmade Ġto Ġget ĠAd yen Ġpayments Ġdetails ĊĠĠĠĠ Ġ* ĠWhen : ĠĠĠ ĠThe Ġcall Ġis Ġnot Ġsuccessful ĊĠĠĠĠ Ġ* ĠThen : ĠĠĠ ĠAn ĠInternal SDK Error Ġis Ġreturned ĊĠĠĠĠ Ġ**/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get ĠAd yen Ġpayments Ġdetails Ġcall Ġfailure Ġnot Ġmade Ġif Ġrequest Ġis Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠshouldBe Null : ĠJSONObject ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġerror : ĠKar h oo Error ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinter actor . execute Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> ĠshouldBe Null Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failure Ġ-> Ġerror Ġ= Ġresult . error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Kar h oo Error . Internal SDK Error , Ġerror ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( shouldBe Null ) ĊĠĠĠĠĠĠĠ Ġverify ( api Template , Ġnever ()). get Ad yen Payment Details ( ady en Payments Details ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven : ĠĠ ĠA Ġrequest Ġis Ġmade Ġto Ġget ĠAd yen Ġpayments Ġdetails ĊĠĠĠĠ Ġ* ĠWhen : ĠĠĠ ĠThe Ġcall Ġis Ġnot Ġsuccessful ĊĠĠĠĠ Ġ* ĠThen : ĠĠĠ ĠAn ĠInternal SDK Error Ġis Ġreturned ĊĠĠĠĠ Ġ**/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get ĠAd yen Ġpayments Ġdetails Ġcall Ġfailure Ġreturns Ġan Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠshouldBe Null : ĠJSONObject ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġerror : ĠKar h oo Error ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhenever ( api Template . get Ad yen Payment Details ( ady en Payments Details )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Comp letable Deferred ( Resource . Failure ( Kar h oo Error . Internal SDK Error ))) ĊĊĠĠĠĠĠĠĠ Ġinter actor . ady en Payments Details Ġ= Ġad yen Payments Details ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinter actor . execute Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> ĠshouldBe Null Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failure Ġ-> Ġerror Ġ= Ġresult . error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Kar h oo Error . Internal SDK Error , Ġerror ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( shouldBe Null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven : ĠĠ ĠA Ġrequest Ġis Ġmade Ġto Ġget ĠAd yen Ġpayments Ġdetails ĊĠĠĠĠ Ġ* ĠWhen : ĠĠĠ ĠThe Ġcall Ġis Ġsuccessful ĊĠĠĠĠ Ġ* ĠThen : ĠĠĠ ĠThe Ġcorrect Ġresponse Ġis Ġreturned ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` successful Ġget ĠAd yen Ġpayments Ġdetails Ġresponse Ġreturns ĠAd yen Ġpayments Ġdetails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( api Template . get Ad yen Payment Details ( any ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Comp letable Deferred ( Resource . Success ( ady en Payments Response ))) ĊĊĠĠĠĠĠĠĠ Ġvar Ġad yen Payments Response : ĠJSONObject ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinter actor . ady en Payments Details Ġ= Ġad yen Payments Details ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinter actor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġad yen Payments Response Ġ= Ġit . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ady en Payments Response , Ġad yen Payments Response ) ĊĠĠĠ Ġ} Ċ } Ċ