package Ġcom . merc ad op ago . android . px . internal . use cases Ċ Ċ import Ġcom . merc ad op ago . android . px . Callback Test Ċ import Ġcom . merc ad op ago . android . px . TestContext Provider Ċ import Ġcom . merc ad op ago . android . px . internal . features . validation _ program . Authenticate UseCase Ċ import Ġcom . merc ad op ago . android . px . internal . features . validation _ program . Validation Program UseCase Ċ import Ġcom . merc ad op ago . android . px . internal . repository . Application Selection Repository Ċ import Ġcom . merc ad op ago . android . px . model .* Ċ import Ġcom . merc ad op ago . android . px . model . exceptions . M erc ado Pago Error Ċ import Ġcom . merc ad op ago . android . px . model . internal . Application Ċ import Ġcom . merc ad op ago . android . px . tracking . internal . MP Tracker Ċ import Ġcom . merc ad op ago . android . px . tracking . internal . events . F riction Event Tracker Ċ import Ġcom . merc ad op ago . android . px . tracking . internal . events . Program Validation Event Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ import Ġorg . mockito . kotlin .* Ċ import Ġjava . math . BigDecimal Ċ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠValidation Program UseCase Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsuccess : ĠCallback Test < String ?> ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfailure : ĠCallback Test < M erc ado Pago Error > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapplication Selection Repository : ĠApplication Selection Repository ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauthenticate UseCase : ĠAuth enticate UseCase ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtracker : ĠMP Tracker ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvalidation Program UseCase : ĠValidation Program UseCase ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidation Program UseCase Ġ= ĠValidation Program UseCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Selection Repository , Ġauthenticate UseCase , Ġtracker , ĠTest Context Provider ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Payment DataList IsNull () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidation Program UseCase . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess :: invoke , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure :: invoke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( success ) ĊĠĠĠĠĠĠĠ Ġverify ( tracker ). track ( any < F riction Event Tracker >()) ĊĠĠĠĠĠĠĠ Ġverify ( failure ). invoke ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Payment DataList IsEmpty () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidation Program UseCase . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess :: invoke , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure :: invoke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( success ) ĊĠĠĠĠĠĠĠ Ġverify ( tracker ). track ( any < F riction Event Tracker >()) ĊĠĠĠĠĠĠĠ Ġverify ( failure ). invoke ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen IsNot Known Validation Program () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( application Selection Repository [ any < String >() ]). thenReturn ( mock ()) ĊĊĠĠĠĠĠĠĠ Ġvalidation Program UseCase . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( create Payment Data ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess :: invoke , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure :: invoke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify ( success ). invoke ( null ) ĊĠĠĠĠĠĠĠ Ġverify ( tracker ). track ( any < Program Validation Event >()) ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( failure ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Is ST P Validation Program () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidation Program : ĠApplication . Validation Program Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġid Ġ}. thenReturn (" ST P ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġapplication : ĠApplication Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġvalidation Programs Ġ}. thenReturn ( listOf ( validation Program )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhenever ( application Selection Repository [ any < String >() ]). thenReturn ( application ) ĊĊĠĠĠĠĠĠĠ Ġvalidation Program UseCase . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( create Payment Data ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess :: invoke , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure :: invoke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify ( authenticate UseCase ). execute ( any (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( success ). invoke (" stp ") ĊĠĠĠĠĠĠĠ Ġverify ( tracker ). track ( any ()) ĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( failure ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Payment Data (): ĠPayment Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiscount Ġ= Ġmock < Discount >() ĊĠĠĠĠĠĠĠ Ġval Ġpayment Method Ġ= Ġmock < PaymentMethod > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġid Ġ}. thenReturn (" visa ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġmock < Token >() ĊĠĠĠĠĠĠĠ Ġreturn ĠPayment Data . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Token ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Discount ( discount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Raw Amount ( BigDecimal . TEN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set PaymentMethod ( payment Method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Payment Data () ĊĠĠĠ Ġ} Ċ Ċ }