package Ġbr . u fs . n ub ank challenge . core . tests . domain Ċ Ċ import Ġbr . u fs . n ub ank challenge . core . domain . charge back . CreditCard Security Ċ import Ġbr . u fs . n ub ank challenge . core . domain . charge back . Prevent ive Card Blocking Ċ import Ġbr . u fs . n ub ank challenge . core . domain . errors . Infrastructure Error . Remote System Down Ċ import Ġbr . u fs . n ub ank challenge . core . domain . errors . Networking Issue .* Ċ import Ġbr . u fs . n ub ank challenge . core . tests . util . Fixtures Ċ import Ġcom . n ha ar man . mockito _ kotlin .* Ċ import Ġio . reactivex . Observable Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠCreated Ġby Ġ@ ub ir atan f so ares Ċ Ġ* Ċ Ġ*/ ĊĊ Ċ class ĠPrevent ive Card Blocking Tests Ġ{ ĊĊĠĠĠ Ġval Ġblock Not For ced Ġ= ĠFix tures . charge back Options ( block Card Ġ= Ġfalse ) ĊĊĠĠĠ Ġval Ġblock Needed Ġ= ĠFix tures . charge back Options ( block Card Ġ= Ġtrue ) ĊĊĠĠĠ Ġlateinit Ġvar Ġblock Prevent ively : ĠPrevent ive Card Blocking ĊĠĠĠ Ġlateinit Ġvar Ġcredit card Security : ĠCredit Card Security ĊĊĠĠĠ Ġ@ Before Ġfun Ġ` before Ġeach Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcredit card Security Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġblock Prevent ively Ġ= ĠPrevent ive Card Blocking ( credit card Security ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġnot Ġblock Ġwhen Ġnot Ġasked Ġto Ġby Ġserver `() Ġ{ ĊĊĠĠĠĠĠĠĠ ĠObservable . just ( block Not For ced ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( block Prevent ively ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĊĠĠĠĠĠĠĠ Ġverify Zero Interactions ( credit card Security ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġblock Ġprevent ively Ġwhen Ġasked Ġby Ġserver `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhenever ( credit card Security . block S olic itation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( blocked With Success ()) ĊĊĠĠĠĠĠĠĠ ĠObservable . just ( block Needed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( block Prevent ively ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĊĠĠĠĠĠĠĠ Ġ` verify Ġblock Ġsol it ic itation Ġonly Ġand Ġonce `() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġignore Ġaut ob lock ing , Ġgiven Ġinternet Ġunreachable Ġat Ġblocking Ġoperation `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhenever ( credit card Security . block S olic itation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( internet Un reachable ()) ĊĊĠĠĠĠĠĠĠ Ġ` should Ġcomplete Ġswitching Ġcharge back Ġoptions Ġto Ġcard Ġnot Ġblocked `() ĊĠĠĠĠĠĠĠ Ġ` verify Ġblock Ġsol it ic itation Ġonly Ġand Ġonce `() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġignore Ġaut ob lock ing , Ġgiven Ġinfrastructure Ġerror Ġat Ġblocking Ġoperation `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhenever ( credit card Security . block S olic itation ()). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthen Return ( infrastructure Error ()) ĊĊĠĠĠĠĠĠĠ Ġ` should Ġcomplete Ġswitching Ġcharge back Ġoptions Ġto Ġcard Ġnot Ġblocked `() ĊĠĠĠĠĠĠĠ Ġ` verify Ġblock Ġsol it ic itation Ġonly Ġand Ġonce `() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġfail , Ġgiven Ġtimeout Ġerror Ġat Ġblocking Ġoperation `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhenever ( credit card Security . block S olic itation ()). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthen Return ( timeout ()) ĊĊĠĠĠĠĠĠĠ Ġ` verify Ġerror Ġf ow arded Ġand Ġcharge back Ġoptions Ġignored `( Operation Timeout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` should Ġfail , Ġgiven Ġconnection Ġerror Ġat Ġblocking Ġoperation `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhenever ( credit card Security . block S olic itation ()). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthen Return ( connection Broken ()) ĊĊĠĠĠĠĠĠĠ Ġ` verify Ġerror Ġf ow arded Ġand Ġcharge back Ġoptions Ġignored `( Connection Spi ke ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ` verify Ġerror Ġf ow arded Ġand Ġcharge back Ġoptions Ġignored `( error : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠObservable . just ( block Needed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( block Prevent ively ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Error Ġ{ Ġit Ġ== Ġerror Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ` should Ġcomplete Ġswitching Ġcharge back Ġoptions Ġto Ġcard Ġnot Ġblocked `() Ġ{ ĊĊĠĠĠĠĠĠĠ ĠObservable . just ( block Needed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( block Prevent ively ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value Ġ{ Ġit Ġ== Ġblock Not For ced Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ` verify Ġblock Ġsol it ic itation Ġonly Ġand Ġonce `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġverify ( credit card Security , Ġtimes ( 1 )). block S olic itation () ĊĠĠĠĠĠĠĠ Ġverify ( credit card Security , Ġnever ()). un block S olic itation () ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( credit card Security ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġblocked With Success () Ġ= ĠObservable . just ( Unit ) ĊĠĠĠ Ġfun Ġinternet Un reachable () Ġ= ĠObservable . error < Unit >( Internet Un reachable ) ĊĠĠĠ Ġfun Ġtimeout () Ġ= ĠObservable . error < Unit >( Operation Timeout ) ĊĠĠĠ Ġfun Ġconnection Broken () Ġ= ĠObservable . error < Unit >( Connection Spi ke ) ĊĠĠĠ Ġfun Ġinfrastructure Error () Ġ= ĠObservable . error < Unit >( Remote System Down ) Ċ Ċ } ĊĊĊ