package Ġcom . stripe . android . payments . wechat pay Ċ Ċ import Ġcom . stripe . android . core . networking . ApiRequest Ċ import Ġcom . stripe . android . model . We Chat Ċ import Ġcom . stripe . android . payments . wechat pay . reflection . We Chat Pay Reflection Helper Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Test Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . kotlin . arg Where Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . verify Ċ import Ġorg . mockito . kotlin . wh enever Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Experimental Cor outines Api Ċ class ĠWe Chat Pay Authenticator Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmock We Chat Pay Auth Starter : ĠWe Chat Pay Auth Starter Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġmock Reflection Helper : ĠWe Chat Pay Reflection Helper Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġauth enticator Ġ= ĠWe Chat Pay Authenticator (). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . we Chat Auth Launcher Factory Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġmock We Chat Pay Auth Starter Ġ} ĊĠĠĠĠĠĠĠ Ġit . reflection Helper Ġ= Ġmock Reflection Helper ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp Mocks () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Reflection Helper . is We Chat Pay Available ()). thenReturn ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` authenticate Ġshould Ġthrow Ġexception Ġwhen Ġwe Chat Pay Ġdependency Ġis Ġnot Ġavailable `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( mock Reflection Helper . is We Chat Pay Available ()). thenReturn ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With Message < IllegalArgumentException >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" We Chat Pay Ġdependency Ġis Ġnot Ġfound , Ġadd Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ We Chat Pay Reflection Helper . WE CHAT _ PAY _ GRAD LE _ DEP } Ġin Ġapp 's Ġbuild . gradle " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Intent Fixtures . PI _ REQ UIRES _ B LIK _ AUTHOR IZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ OPTIONS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` authenticate Ġshould Ġthrow Ġexception Ġwhen Ġstripe Intent Ġis Ġnot ĠWe Chat Pay `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With Message < IllegalArgumentException >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stripe Intent . next Action Data Ġshould Ġbe ĠWe Chat Pay Redirect , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" instead Ġit Ġis ĠB lik Authorize " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Intent Fixtures . PI _ REQ UIRES _ B LIK _ AUTHOR IZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ OPTIONS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` authenticate Ġshould Ġthrow Ġexception Ġwhen Ġstripe Intent # next Action Data Ġis Ġnull `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With Message < IllegalArgumentException >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stripe Intent . next Action Data Ġshould Ġbe ĠWe Chat Pay Redirect , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" instead Ġit Ġis Ġnull " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Intent Fixtures . PI _ NO _ NEXT _ ACTION _ DATA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ OPTIONS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Ignore (" Fl aky Ġmock ito Ġbehavior : Ġhttps :// github . com / mockito / mockito / issues / 2 0 2 6 ") ĊĠĠĠ Ġfun Ġ` wechat Pay Auth Starter Ġshould Ġstart Ġwhen Ġstripe Intent Ġis ĠWe Chat Pay `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Intent Fixtures . PI _ REQ UIRES _ WE CHAT _ PAY _ AUTHOR IZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ OPTIONS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock We Chat Pay Auth Starter ). start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg Where Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . we Chat Ġ== ĠWe Chat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappId Ġ= Ġ" wx 6 5 9 9 7 d 6 3 0 7 c 3 8 2 7 d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnonce Ġ= Ġ" some _ random _ string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Value Ġ= Ġ" Sign = WX Pay ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartner Id Ġ= Ġ" wx 6 5 9 9 7 d 6 3 0 7 c 3 8 2 7 d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre pay Id Ġ= Ġ" test _ transaction ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign Ġ= Ġ" 8 B 2 6 1 2 4 B ABC 8 1 6 D 7 1 4 0 0 3 4 DD DC 7 D 3 B 2 F 1 0 3 6 CC B 2 D 9 1 0 E 5 2 5 9 2 6 8 7 F 6 A 4 4 7 9 0 D 5 E ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġ" 1 6 1 9 6 3 8 9 4 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . client Secret Ġ== Ġ" pi _ 1 Il JH 7 BN J 0 2 Er VO jm 3 7 T 3 OU t _ secret _ vg M Ex m jv ES dt Pq dd HO SS SD ip 2 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠThrowable > Ġassert Fails With Message ( ĊĠĠĠĠĠĠĠ Ġthrowable Msg : ĠString , ĊĠĠĠĠĠĠĠ Ġblock : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthrowable Ġ= Ġassert Fails With < T > Ġ{ Ġblock () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( throwable Msg , Ġthrowable . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ OPTIONS Ġ= ĠApi Request . Options ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠapiKey Ġ= Ġ" Test Key ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Account Ġ= Ġ" Test AccountId " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ