33import android .content .Context ;
44
55import com .flutterwave .raveandroid .DeviceIdGetter ;
6+ import com .flutterwave .raveandroid .GetEncryptedData ;
67import com .flutterwave .raveandroid .Meta ;
78import com .flutterwave .raveandroid .Payload ;
9+ import com .flutterwave .raveandroid .PayloadBuilder ;
10+ import com .flutterwave .raveandroid .PayloadToJson ;
811import com .flutterwave .raveandroid .RaveConstants ;
912import com .flutterwave .raveandroid .RavePayInitializer ;
1013import com .flutterwave .raveandroid .TransactionStatusChecker ;
3538
3639import javax .inject .Inject ;
3740
41+ import static org .junit .Assert .assertEquals ;
3842import static org .mockito .ArgumentMatchers .any ;
3943import static org .mockito .ArgumentMatchers .anyObject ;
4044import static org .mockito .ArgumentMatchers .anyString ;
@@ -51,18 +55,30 @@ public class AchPresenterTest {
5155 AmountValidator amountValidator ;
5256 @ Inject
5357 RavePayInitializer ravePayInitializer ;
58+ @ Mock
59+ RavePayInitializer ravePayInitializerMock ;
5460 @ Inject
5561 DeviceIdGetter deviceIdGetter ;
5662 @ Inject
63+ PayloadToJson payloadToJson ;
64+ @ Inject
65+ GetEncryptedData getEncryptedData ;
66+ @ Inject
5767 NetworkRequestImpl networkRequest ;
5868 @ Inject
5969 SharedPrefsRequestImpl sharedPrefsRequest ;
6070 @ Inject
6171 TransactionStatusChecker transactionStatusChecker ;
72+
6273 private AchPresenter achPresenter ;
74+ @ Mock
75+ AchPresenter achPresenterMock ;
76+ @ Mock
77+ PayloadBuilder payloadBuilderMock ;
6378
6479 @ Before
6580 public void setUp () {
81+
6682 MockitoAnnotations .initMocks (this );
6783 achPresenter = new AchPresenter (context , view );
6884
@@ -85,6 +101,7 @@ public void init_validAmount_showRedirectMessageTrue() {
85101
86102 achPresenter .init (ravePayInitializer );
87103
104+ verify (view ).showAmountField (false );
88105 verify (view ).showRedirectMessage (true );
89106
90107 }
@@ -96,32 +113,119 @@ public void init_inValidAmount_showRedirectMessageFalse() {
96113 when (amountValidator .isAmountValid (amount )).thenReturn (false );
97114
98115 achPresenter .init (ravePayInitializer );
116+
117+ verify (view ).showAmountField (true );
99118 verify (view ).showRedirectMessage (false );
100119
101120 }
102121
103122
104123 @ Test
105- public void processTransaction_chargeAccountCalled () {
124+ public void processTransaction_chargeAccountCalled_createBankPayloadCalled_assertParameters () {
106125 //arrange
107126 String amount = generateRandomString ();
108127 when (deviceIdGetter .getDeviceId ()).thenReturn (generateRandomString ());
128+
109129 Payload payload = generatePayload ();
110130 payload .setPBFPubKey (generateRandomString ());
131+ String encryptionKey = generateRandomString ();
132+ boolean isDisplayFee = true ;
133+
111134 //act
112135 achPresenter .processTransaction (amount , ravePayInitializer );
136+
137+ achPresenterMock .chargeAccount (payload , encryptionKey , isDisplayFee );
138+
139+ ArgumentCaptor <Payload > captorPayload = ArgumentCaptor .forClass (Payload .class );
140+ ArgumentCaptor <String > captorEncryptionKey = ArgumentCaptor .forClass (String .class );
141+ ArgumentCaptor <Boolean > captorIsDisplayFee = ArgumentCaptor .forClass (Boolean .class );
142+
143+ verify (achPresenterMock ).chargeAccount (captorPayload .capture (), captorEncryptionKey .capture (), captorIsDisplayFee .capture ());
144+
113145 //assert
146+ assertEquals (payload , captorPayload .getValue ());
147+ assertEquals (encryptionKey , captorEncryptionKey .getValue ());
148+ assertEquals (isDisplayFee , captorIsDisplayFee .getValue ());
149+
150+ }
151+
152+
153+ @ Test
154+ public void processTransaction_setAmountCalled_assertParameters () {
155+ //arrange
156+ String amount = generateRandomString ();
157+ when (deviceIdGetter .getDeviceId ()).thenReturn (generateRandomString ());
158+ Payload payload = generatePayload ();
159+ payload .setPBFPubKey (generateRandomString ());
160+
161+ Double amountDouble = 10.0 ;
162+ //act
163+ achPresenter .processTransaction (amount , ravePayInitializer );
164+
165+ ravePayInitializerMock .setAmount (amountDouble );
166+
167+ ArgumentCaptor <Double > captorAmount = ArgumentCaptor .forClass (Double .class );
168+
169+ verify (ravePayInitializerMock ).setAmount (captorAmount .capture ());
170+ assertEquals (amountDouble , captorAmount .getValue ());
171+ }
172+
173+ @ Test
174+ public void processTransaction_createBankPayloadCalled_assertParameters () {
175+ //arrange
176+ String amount = generateRandomString ();
177+ when (deviceIdGetter .getDeviceId ()).thenReturn (generateRandomString ());
178+ Payload payload = generatePayload ();
179+ payload .setPBFPubKey (generateRandomString ());
180+
181+ //act
182+ achPresenter .processTransaction (amount , ravePayInitializer );
183+
184+ payloadBuilderMock .createBankPayload ();
185+
186+
187+ verify (payloadBuilderMock ).createBankPayload ();
188+ }
189+
190+
191+ @ Test
192+ public void processTransaction_setPaymentPlanCalled_assertPaymentPlan () {
193+ //arrange
194+ String amount = generateRandomString ();
195+
196+ ravePayInitializer .setPayment_plan (generateRandomString ());
197+ when (deviceIdGetter .getDeviceId ()).thenReturn (generateRandomString ());
198+ Payload payload = generatePayload ();
199+ payload .setPBFPubKey (generateRandomString ());
200+
201+ String paymentPlan = generateRandomString ();
202+ //act
203+ achPresenter .processTransaction (amount , ravePayInitializer );
204+
205+ PayloadBuilder payloadBuilder = generatePayloadBuilder ();
206+ payloadBuilder .setPaymentPlan (ravePayInitializer .getPayment_plan ());
207+
208+ payloadBuilderMock .setPaymentPlan (paymentPlan );
209+
210+ ArgumentCaptor <String > captorString = ArgumentCaptor .forClass (String .class );
114211
115- achPresenter
116- .chargeAccount (payload , generateRandomString (), false );
212+ verify (payloadBuilderMock ).setPaymentPlan (captorString .capture ());
213+
214+ //assert
215+ assertEquals (paymentPlan , captorString .getValue ());
117216 }
118217
119218 @ Test
120219 public void chargeAccount_noDisplayFee_onSuccess_validResponseReturned_showWebViewCalled () {
121220
122221 Payload payload = generatePayload ();
222+
123223 payload .setPBFPubKey (generateRandomString ());
124224
225+ when (payloadToJson .convertChargeRequestPayloadToJson (any (Payload .class ))).thenReturn (generateRandomString ());
226+ when (getEncryptedData .getEncryptedData (any (String .class ), any (String .class ))).thenReturn (generateRandomString ());
227+
228+
125229 achPresenter .chargeAccount (payload , generateRandomString (), false );
126230 verify (view ).showProgressIndicator (true );
127231
@@ -143,7 +247,11 @@ public void chargeAccount_displayFee_chargeCard_onSuccess_saveFlwRef_validRespon
143247 Payload payload = generatePayload ();
144248 payload .setPBFPubKey (generateRandomString ());
145249
250+ when (payloadToJson .convertChargeRequestPayloadToJson (any (Payload .class ))).thenReturn (generateRandomString ());
251+ when (getEncryptedData .getEncryptedData (any (String .class ), any (String .class ))).thenReturn (generateRandomString ());
252+
146253 achPresenter .chargeAccount (payload , generateRandomString (), true );
254+
147255 verify (view ).showProgressIndicator (true );
148256
149257 ArgumentCaptor <Callbacks .OnChargeRequestComplete > captor = ArgumentCaptor .forClass (Callbacks .OnChargeRequestComplete .class );
@@ -165,7 +273,11 @@ public void chargeAccount_onSuccess_nullChargeResponseReturned_onPaymentErrorCal
165273 Payload payload = generatePayload ();
166274 payload .setPBFPubKey (generateRandomString ());
167275
276+ when (payloadToJson .convertChargeRequestPayloadToJson (any (Payload .class ))).thenReturn (generateRandomString ());
277+ when (getEncryptedData .getEncryptedData (any (String .class ), any (String .class ))).thenReturn (generateRandomString ());
278+
168279 achPresenter .chargeAccount (payload , generateRandomString (), true );
280+
169281 verify (view ).showProgressIndicator (true );
170282 ArgumentCaptor <Callbacks .OnChargeRequestComplete > captor = ArgumentCaptor .forClass (Callbacks .OnChargeRequestComplete .class );
171283
@@ -183,8 +295,14 @@ public void chargeAccount_onSuccess_inValidResponseReturned_onPaymentErrorCalled
183295
184296 Payload payload = generatePayload ();
185297 payload .setPBFPubKey (generateRandomString ());
298+
299+ when (payloadToJson .convertChargeRequestPayloadToJson (any (Payload .class ))).thenReturn (generateRandomString ());
300+ when (getEncryptedData .getEncryptedData (any (String .class ), any (String .class ))).thenReturn (generateRandomString ());
301+
186302 achPresenter .chargeAccount (payload , generateRandomString (), true );
303+
187304 verify (view ).showProgressIndicator (true );
305+
188306 ArgumentCaptor <Callbacks .OnChargeRequestComplete > captor = ArgumentCaptor .forClass (Callbacks .OnChargeRequestComplete .class );
189307
190308 verify (networkRequest ).chargeCard (any (ChargeRequestBody .class ), captor .capture ());
@@ -196,6 +314,30 @@ public void chargeAccount_onSuccess_inValidResponseReturned_onPaymentErrorCalled
196314
197315 }
198316
317+ @ Test
318+ public void chargeAccount_onError_onPaymentErrorCalled_messageReturned () {
319+
320+ Payload payload = generatePayload ();
321+ payload .setPBFPubKey (generateRandomString ());
322+
323+ String message = generateRandomString ();
324+
325+ when (payloadToJson .convertChargeRequestPayloadToJson (any (Payload .class ))).thenReturn (generateRandomString ());
326+ when (getEncryptedData .getEncryptedData (any (String .class ), any (String .class ))).thenReturn (generateRandomString ());
327+
328+ achPresenter .chargeAccount (payload , generateRandomString (), true );
329+ verify (view ).showProgressIndicator (true );
330+ ArgumentCaptor <Callbacks .OnChargeRequestComplete > captor = ArgumentCaptor .forClass (Callbacks .OnChargeRequestComplete .class );
331+
332+ verify (networkRequest ).chargeCard (any (ChargeRequestBody .class ), captor .capture ());
333+
334+ captor .getAllValues ().get (0 ).onError (message , generateRandomString ());
335+
336+ verify (view ).showProgressIndicator (false );
337+ verify (view ).onPaymentError (message );
338+
339+ }
340+
199341 @ Test
200342 public void onFeeConfirmed_showWebViewCalled () {
201343 achPresenter .onFeeConfirmed (anyString (), anyString ());
@@ -206,10 +348,13 @@ public void onFeeConfirmed_showWebViewCalled() {
206348 public void requeryTx_onSuccess_onRequerySuccessfulCalled () {
207349 when (sharedPrefsRequest .fetchFlwRef ()).thenReturn (generateRandomString ());
208350 achPresenter .requeryTx (generateRandomString ());
351+
209352 verify (view ).showProgressIndicator (true );
210353 ArgumentCaptor <Callbacks .OnRequeryRequestComplete > captor = ArgumentCaptor .forClass (Callbacks .OnRequeryRequestComplete .class );
211354 verify (networkRequest ).requeryTx (any (RequeryRequestBody .class ), captor .capture ());
212355 captor .getAllValues ().get (0 ).onSuccess (generateRequerySuccessful (), generateRandomString ());
356+
357+ verify (view ).showProgressIndicator (false );
213358 verify (view ).onRequerySuccessful (any (RequeryResponse .class ), anyString (), anyString ());
214359
215360 }
@@ -288,6 +433,12 @@ private ChargeResponse generateNullChargeResponse() {
288433 return chargeResponse ;
289434 }
290435
436+ private PayloadBuilder generatePayloadBuilder () {
437+ PayloadBuilder payloadBuilder = new PayloadBuilder ();
438+ payloadBuilder .setPaymentPlan (generateRandomString ());
439+ return payloadBuilder ;
440+ }
441+
291442 private ChargeResponse generateRandomChargeResponse () {
292443 ChargeResponse chargeResponse = new ChargeResponse ();
293444 chargeResponse .setData (new ChargeResponse .Data ());
0 commit comments