diff --git a/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListPrepaidCardReceiptsTest.java b/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListPrepaidCardReceiptsTest.java index e9076ea1e..20802be1c 100644 --- a/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListPrepaidCardReceiptsTest.java +++ b/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListPrepaidCardReceiptsTest.java @@ -1,8 +1,19 @@ package com.hyperwallet.android.ui.receipt; +import static android.text.format.DateUtils.FORMAT_ABBREV_WEEKDAY; +import static android.text.format.DateUtils.FORMAT_SHOW_DATE; +import static android.text.format.DateUtils.FORMAT_SHOW_TIME; +import static android.text.format.DateUtils.FORMAT_SHOW_WEEKDAY; +import static android.text.format.DateUtils.FORMAT_SHOW_YEAR; +import static android.text.format.DateUtils.formatDateTime; + import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withParent; import static androidx.test.espresso.matcher.ViewMatchers.withText; @@ -13,6 +24,7 @@ import static java.net.HttpURLConnection.HTTP_NO_CONTENT; import static java.net.HttpURLConnection.HTTP_OK; +import static com.hyperwallet.android.ui.receipt.util.EspressoUtils.atPosition; import static com.hyperwallet.android.ui.receipt.view.ListPrepaidCardReceiptActivity.EXTRA_PREPAID_CARD_TOKEN; import android.content.Context; @@ -23,13 +35,17 @@ import androidx.test.core.app.ApplicationProvider; import androidx.test.espresso.IdlingRegistry; +import androidx.test.espresso.contrib.RecyclerViewActions; +import androidx.test.espresso.matcher.ViewMatchers; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.rule.ActivityTestRule; import com.hyperwallet.android.Hyperwallet; +import com.hyperwallet.android.ui.common.util.DateUtils; import com.hyperwallet.android.ui.common.util.EspressoIdlingResource; import com.hyperwallet.android.ui.receipt.rule.HyperwalletExternalResourceManager; import com.hyperwallet.android.ui.receipt.rule.HyperwalletMockWebServer; +import com.hyperwallet.android.ui.receipt.util.RecyclerViewCountAssertion; import com.hyperwallet.android.ui.receipt.util.TestAuthenticationProvider; import com.hyperwallet.android.ui.receipt.view.ListPrepaidCardReceiptActivity; @@ -40,7 +56,11 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Date; import java.util.Locale; +import java.util.concurrent.TimeUnit; + +import okhttp3.mockwebserver.MockResponse; @RunWith(AndroidJUnit4.class) public class ListPrepaidCardReceiptsTest { @@ -78,18 +98,374 @@ public void unregisterIdlingResource() { } @Test - public void testListReceipt_userHasMultipleTransactions() { + public void testListPrepaidCardReceipt_userHasMultipleTransactions() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_list_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + // assert + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(0, hasDescendant(withText("June 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, + hasDescendant(withText(R.string.debit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText(R.string.prepaid_card_sale))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("- 10.00"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("June 6, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(matches(atPosition(1, + hasDescendant(withText(R.string.credit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(1, hasDescendant(withText(R.string.deposit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(1, hasDescendant(withText("+ 5.00"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(1, hasDescendant(withText("June 6, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(1, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(matches(atPosition(2, + hasDescendant(withText(R.string.debit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(2, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(2, hasDescendant(withText("- 8.90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(2, hasDescendant(withText("June 1, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(2, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(3, hasDescendant(withText("March 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(3, + hasDescendant(withText(R.string.debit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(3, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(3, hasDescendant(withText("- 7.90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(3, hasDescendant(withText("March 31, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(3, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(matches(atPosition(4, + hasDescendant(withText(R.string.credit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(4, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(4, hasDescendant(withText("+ 6.90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(4, hasDescendant(withText("February 28, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(4, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(matches(atPosition(5, + hasDescendant(withText(R.string.credit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(5, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(5, hasDescendant(withText("+ 3.90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(5, hasDescendant(withText("February 23, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(5, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(matches(atPosition(6, + hasDescendant(withText(R.string.credit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(6, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(6, hasDescendant(withText("+ 9.92"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(6, hasDescendant(withText("February 21, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(6, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(new RecyclerViewCountAssertion(7)); + } + + @Test + public void testListPrepaidCardReceipt_userHasCreditTransaction() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_credit_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + // assert + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(0, hasDescendant(withText("June 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, + hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.credit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText(R.string.deposit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("+ 15.00"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("June 6, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, hasDescendant(withText("CAD"))))); + + onView(withId(R.id.list_receipts)).check(new RecyclerViewCountAssertion(1)); + } + + @Test + public void testListPrepaidCardReceipt_userHasDebitTransaction() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_debit_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + // assert + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(0, hasDescendant(withText("June 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, + hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.debit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("- 8.90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("June 1, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(new RecyclerViewCountAssertion(1)); + } + + @Test + public void testListPrepaidCardReceipt_userHasUnknownTransactionType() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_unknown_type_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + // assert + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(0, hasDescendant(withText("June 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, + hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.credit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText(R.string.unknown_type))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("+ 15.00"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("June 6, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, hasDescendant(withText("CAD"))))); + + onView(withId(R.id.list_receipts)).check(new RecyclerViewCountAssertion(1)); + } + + @Test + public void testListPrepaidCardReceipt_userHasNoTransactions() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + onView(withId(R.id.toolbar)).check(matches(isDisplayed())); + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + //todo: check empty view when it will be ready + } + + @Test + public void testListPrepaidCardReceipt_checkDateTextOnLocaleChange() { mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager - .getResourceContent("prepaid_card_receipt_list.json")).mock(); + .getResourceContent("prepaid_card_receipt_debit_response.json")).mock(); mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + setLocale(Locale.GERMAN); // run test mActivityTestRule.launchActivity(null); + // assert + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(0, hasDescendant(withText("Juni 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, + hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.debit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("- 8,90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("1. Juni 2019"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(new RecyclerViewCountAssertion(1)); + } + + @Test + public void testListPrepaidCardReceipt_displaysNetworkErrorDialogOnConnectionTimeout() { + mMockWebServer.getServer().enqueue(new MockResponse().setResponseCode(HTTP_OK).setBody(sResourceManager + .getResourceContent("prepaid_card_receipt_debit_response.json")).throttleBody(512, 10, + TimeUnit.SECONDS)); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_debit_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + mActivityTestRule.launchActivity(null); + + // assert error dialog information exist in portrait mode + onView(withText(R.string.error_dialog_connectivity_title)).check(matches(isDisplayed())); + onView(withText(R.string.io_exception)).check(matches(isDisplayed())); + onView(withId(android.R.id.button1)).check(matches(withText(R.string.try_again_button_label))); + onView(withId(android.R.id.button2)).check(matches(withText(R.string.cancel_button_label))); + + // retry button clicked + onView(withId(android.R.id.button1)).perform(click()); + onView(withText(R.string.error_dialog_connectivity_title)).check(doesNotExist()); // assert onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) .check(matches(withText(R.string.title_activity_receipt_list))); onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)) + .check(matches(atPosition(0, hasDescendant(withText("June 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, + hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.debit))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText(R.string.adjustment))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("- 8.90"))))); + onView(withId(R.id.list_receipts)).check( + matches(atPosition(0, hasDescendant(withText("June 1, 2019"))))); + onView(withId(R.id.list_receipts)).check(matches(atPosition(0, hasDescendant(withText("USD"))))); + + onView(withId(R.id.list_receipts)).check(new RecyclerViewCountAssertion(1)); + } + + @Test + public void testListPrepaidCardReceipt_clickTransactionDisplaysDetails() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_list_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + // assert + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click())); + + onView(withId(R.id.transaction_header_text)).check(matches(withText(R.string.transaction_header_text))); + onView(withId(R.id.transaction_type_icon)).check(matches(withText(R.string.debit))); + onView(withId(R.id.transaction_title)).check(matches(withText(R.string.prepaid_card_sale))); + onView(withId(R.id.transaction_amount)).check(matches(withText("- 10.00"))); + onView(withId(R.id.transaction_currency)).check(matches(withText("USD"))); + onView(withId(R.id.transaction_date)).check(matches(withText("June 6, 2019"))); + + onView(withId(R.id.receipt_details_header_label)).check(matches(withText(R.string.receipt_header_label))); + onView(withId(R.id.receipt_id_label)).check(matches(withText(R.string.journalId))); + onView(withId(R.id.receipt_id_value)).check(matches(withText("FISVL_5240220"))); + onView(withId(R.id.date_label)).check(matches(withText(R.string.createdOn))); + + Date date = DateUtils.fromDateTimeString("2019-06-06T22:48:41"); + String timezone = DateUtils.toDateFormat(date, "zzz"); + String text = mActivityTestRule.getActivity().getApplicationContext().getString( + R.string.concat_string_view_format, + formatDateTime(mActivityTestRule.getActivity().getApplicationContext(), date.getTime(), + FORMAT_SHOW_DATE | FORMAT_SHOW_TIME | FORMAT_SHOW_YEAR + | FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_WEEKDAY), timezone); + onView(withId(R.id.date_value)).check(matches(withText(text))); + + onView(withId(R.id.client_id_label)).check(matches(withText(R.string.clientPaymentId))); + onView(withId(R.id.client_id_value)).check(matches(withText("AOxXefx9"))); + onView(withId(R.id.charity_label)).check(matches(withText(R.string.charityName))); + onView(withId(R.id.charity_value)).check(matches(withText("Sample Charity"))); + onView(withId(R.id.check_number_label)).check(matches(withText(R.string.checkNumber))); + onView(withId(R.id.check_number_value)).check(matches(withText("Sample Check Number"))); + onView(withId(R.id.website_label)).check(matches(withText(R.string.website))); + onView(withId(R.id.website_value)).check(matches(withText("https://api.sandbox.hyperwallet.com"))); + onView(withText("A Person")).check(doesNotExist()); + + onView(withId(R.id.receipt_notes_header_label)).check(matches(withText(R.string.notes))); + onView(withId(R.id.notes_value)).check( + matches(withText("Sample prepaid card payment for the period of June 15th, 2019 to July 23, 2019"))); + + onView(withId(R.id.details_header_text)).check(matches(withText(R.string.fee_details_header_text))); + onView(withId(R.id.details_amount_label)).check(matches(withText(R.string.details_amount_label))); + onView(withId(R.id.details_amount_value)).check(matches(withText("10.00 USD"))); + onView(withId(R.id.details_fee_label)).check(matches(withText(R.string.fee_label))); + onView(withId(R.id.details_fee_value)).check(matches(withText("3.00 USD"))); + onView(withId(R.id.details_transfer_amount_label)).check(matches(withText(R.string.transfer_amount_label))); + onView(withId(R.id.details_transfer_amount_value)).check(matches(withText("7.00 USD"))); + } + + @Test + public void testListPrepaidCardReceipt_clickTransactionDisplaysDetailsWithoutFees() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("prepaid_card_receipt_list_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); + + // run test + mActivityTestRule.launchActivity(null); + + // assert + onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar)))) + .check(matches(withText(R.string.title_activity_receipt_list))); + onView(withId(R.id.list_receipts)).check(matches(isDisplayed())); + + onView(withId(R.id.list_receipts)).perform(RecyclerViewActions.actionOnItemAtPosition(1, click())); + + onView(withId(R.id.transaction_header_text)).check(matches(withText(R.string.transaction_header_text))); + onView(withId(R.id.transaction_type_icon)).check(matches(withText(R.string.credit))); + onView(withId(R.id.transaction_title)).check(matches(withText(R.string.deposit))); + onView(withId(R.id.transaction_amount)).check(matches(withText("+ 5.00"))); + onView(withId(R.id.transaction_currency)).check(matches(withText("USD"))); + onView(withId(R.id.transaction_date)).check(matches(withText("June 6, 2019"))); + + onView(withId(R.id.receipt_details_header_label)).check(matches(withText(R.string.receipt_header_label))); + onView(withId(R.id.receipt_id_label)).check(matches(withText(R.string.journalId))); + onView(withId(R.id.receipt_id_value)).check(matches(withText("FISVL_5240221"))); + onView(withId(R.id.date_label)).check(matches(withText(R.string.createdOn))); + + Date date = DateUtils.fromDateTimeString("2019-06-06T22:48:51"); + String timezone = DateUtils.toDateFormat(date, "zzz"); + String text = mActivityTestRule.getActivity().getApplicationContext().getString( + R.string.concat_string_view_format, + formatDateTime(mActivityTestRule.getActivity().getApplicationContext(), date.getTime(), + FORMAT_SHOW_DATE | FORMAT_SHOW_TIME | FORMAT_SHOW_YEAR + | FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_WEEKDAY), timezone); + onView(withId(R.id.date_value)).check(matches(withText(text))); + + onView(withId(R.id.client_id_label)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.client_id_value)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.charity_label)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.charity_value)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.check_number_label)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.check_number_value)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.website_label)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.website_value)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + + onView(withId(R.id.receipt_notes_information)).check( + matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.receipt_notes_header_label)).check( + matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withId(R.id.notes_value)).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); } private void setLocale(Locale locale) { diff --git a/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListUserReceiptsTest.java b/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListUserReceiptsTest.java index f510302c4..0bb97d2ff 100644 --- a/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListUserReceiptsTest.java +++ b/receipt/src/androidTest/java/com/hyperwallet/android/ui/receipt/ListUserReceiptsTest.java @@ -110,7 +110,7 @@ public void testListReceipt_userHasMultipleTransactions() { onView(withId(R.id.list_receipts)).check(matches(atPosition(0, hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.credit))))); onView(withId(R.id.list_receipts)).check( - matches(atPosition(0, hasDescendant(withText("Payment"))))); + matches(atPosition(0, hasDescendant(withText(R.string.payment))))); onView(withId(R.id.list_receipts)).check( matches(atPosition(0, hasDescendant(withText("+ 20.00"))))); onView(withId(R.id.list_receipts)).check( @@ -120,7 +120,7 @@ public void testListReceipt_userHasMultipleTransactions() { onView(withId(R.id.list_receipts)).check(matches(atPosition(1, hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.credit))))); onView(withId(R.id.list_receipts)).check( - matches(atPosition(1, hasDescendant(withText("Payment"))))); + matches(atPosition(1, hasDescendant(withText(R.string.payment))))); onView(withId(R.id.list_receipts)).check( matches(atPosition(1, hasDescendant(withText("+ 25.00"))))); onView(withId(R.id.list_receipts)).check( @@ -130,7 +130,7 @@ public void testListReceipt_userHasMultipleTransactions() { onView(withId(R.id.list_receipts)).check(matches(atPosition(2, hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.debit))))); onView(withId(R.id.list_receipts)).check( - matches(atPosition(2, hasDescendant(withText("Card Activation Fee"))))); + matches(atPosition(2, hasDescendant(withText(R.string.card_activation_fee))))); onView(withId(R.id.list_receipts)).check( matches(atPosition(2, hasDescendant(withText("- 1.95"))))); onView(withId(R.id.list_receipts)).check( @@ -142,7 +142,7 @@ public void testListReceipt_userHasMultipleTransactions() { onView(withId(R.id.list_receipts)).check(matches(atPosition(3, hasDescendant(withText(com.hyperwallet.android.ui.receipt.R.string.debit))))); onView(withId(R.id.list_receipts)).check( - matches(atPosition(3, hasDescendant(withText("Card Load"))))); + matches(atPosition(3, hasDescendant(withText(R.string.transfer_to_prepaid_card))))); onView(withId(R.id.list_receipts)).check( matches(atPosition(3, hasDescendant(withText("- 18.05"))))); onView(withId(R.id.list_receipts)).check( @@ -417,7 +417,7 @@ public void testListReceipt_checkDateTextOnLocaleChange() { @Test public void testListReceipt_displaysNetworkErrorDialogOnConnectionTimeout() { mMockWebServer.getServer().enqueue(new MockResponse().setResponseCode(HTTP_OK).setBody(sResourceManager - .getResourceContent("receipt_debit_response.json")).throttleBody(512, 15, TimeUnit.SECONDS)); + .getResourceContent("receipt_debit_response.json")).throttleBody(512, 10, TimeUnit.SECONDS)); mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager .getResourceContent("receipt_debit_response.json")).mock(); mMockWebServer.mockResponse().withHttpResponseCode(HTTP_NO_CONTENT).withBody("").mock(); diff --git a/receipt/src/main/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSource.java b/receipt/src/main/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSource.java index 352ae0913..7f4ca4ca4 100644 --- a/receipt/src/main/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSource.java +++ b/receipt/src/main/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSource.java @@ -31,6 +31,7 @@ import com.hyperwallet.android.model.paging.HyperwalletPageList; import com.hyperwallet.android.model.receipt.Receipt; import com.hyperwallet.android.model.receipt.ReceiptQueryParam; +import com.hyperwallet.android.ui.common.util.EspressoIdlingResource; import com.hyperwallet.android.ui.common.viewmodel.Event; import com.hyperwallet.android.util.DateUtil; @@ -79,6 +80,7 @@ public void loadInitial(@NonNull final LoadInitialParams params, .createdAfter(mCalendarYearBeforeNow.getTime()) .sortByCreatedOnDesc().build(); + EspressoIdlingResource.increment(); getHyperwallet().listPrepaidCardReceipts(mToken, queryParam, new HyperwalletListener>() { @Override @@ -93,12 +95,14 @@ public void onSuccess(@Nullable HyperwalletPageList result) { // reset mLoadInitialCallback = null; mLoadInitialParams = null; + EspressoIdlingResource.decrement(); } @Override public void onFailure(HyperwalletException exception) { mIsFetchingData.postValue(Boolean.FALSE); mErrors.postValue(new Event<>(exception.getHyperwalletErrors())); + EspressoIdlingResource.decrement(); } @Override @@ -130,6 +134,7 @@ public void loadAfter(@NonNull final LoadParams params, @NonNull final Loa .limit(params.requestedLoadSize) .sortByCreatedOnDesc().build(); + EspressoIdlingResource.increment(); getHyperwallet().listPrepaidCardReceipts(mToken, queryParam, new HyperwalletListener>() { @Override @@ -144,12 +149,14 @@ public void onSuccess(@Nullable HyperwalletPageList result) { // reset mLoadAfterCallback = null; mLoadAfterParams = null; + EspressoIdlingResource.decrement(); } @Override public void onFailure(HyperwalletException exception) { mIsFetchingData.postValue(Boolean.FALSE); mErrors.postValue(new Event<>(exception.getHyperwalletErrors())); + EspressoIdlingResource.decrement(); } @Override diff --git a/receipt/src/test/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSourceTest.java b/receipt/src/test/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSourceTest.java index f703e7810..acffd2881 100644 --- a/receipt/src/test/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSourceTest.java +++ b/receipt/src/test/java/com/hyperwallet/android/ui/receipt/repository/PrepaidCardReceiptDataSourceTest.java @@ -14,8 +14,10 @@ import static org.mockito.Mockito.verify; import static com.hyperwallet.android.model.receipt.Receipt.Entries.CREDIT; +import static com.hyperwallet.android.model.receipt.Receipt.Entries.DEBIT; import static com.hyperwallet.android.model.receipt.Receipt.ReceiptTypes.ADJUSTMENT; import static com.hyperwallet.android.model.receipt.Receipt.ReceiptTypes.DEPOSIT; +import static com.hyperwallet.android.model.receipt.Receipt.ReceiptTypes.PREPAID_CARD_SALE; import androidx.paging.PageKeyedDataSource; @@ -88,7 +90,7 @@ public void setUp() { @Test public void testLoadInitial_returnsReceipts() throws Exception { - String json = mExternalResourceManager.getResourceContent("prepaid_card_receipt_list.json"); + String json = mExternalResourceManager.getResourceContent("prepaid_card_receipt_list_response.json"); JSONObject jsonObject = new JSONObject(json); final HyperwalletPageList response = new HyperwalletPageList<>(jsonObject, Receipt.class); @@ -118,9 +120,9 @@ public Object answer(InvocationOnMock invocation) { List receipts = mListArgumentCaptor.getValue(); assertThat(receipts, Matchers.hasSize(7)); assertThat(receipts.get(0).getJournalId(), is("FISVL_5240220")); - assertThat(receipts.get(0).getType(), is(DEPOSIT)); + assertThat(receipts.get(0).getType(), is(PREPAID_CARD_SALE)); assertThat(receipts.get(0).getCreatedOn(), is("2019-06-06T22:48:41")); - assertThat(receipts.get(0).getEntry(), is(CREDIT)); + assertThat(receipts.get(0).getEntry(), is(DEBIT)); assertThat(receipts.get(0).getDestinationToken(), is("trm-2e02da75-a36c-4723-b613-0b64e6f582d9")); assertThat(receipts.get(0).getAmount(), is("10.00")); assertThat(receipts.get(0).getCurrency(), is("USD")); @@ -245,7 +247,7 @@ public Object answer(InvocationOnMock invocation) { @Test public void testLoadAfter_returnsReceipts() throws Exception { - String json = mExternalResourceManager.getResourceContent("prepaid_card_receipt_list.json"); + String json = mExternalResourceManager.getResourceContent("prepaid_card_receipt_list_response.json"); JSONObject jsonObject = new JSONObject(json); final HyperwalletPageList response = new HyperwalletPageList<>(jsonObject, Receipt.class); diff --git a/receipt/src/test/resources/prepaid_card_receipt_credit_response.json b/receipt/src/test/resources/prepaid_card_receipt_credit_response.json new file mode 100644 index 000000000..152d482ba --- /dev/null +++ b/receipt/src/test/resources/prepaid_card_receipt_credit_response.json @@ -0,0 +1,24 @@ +{ + "data": [ + { + "journalId": "FISVL_5240220", + "type": "DEPOSIT", + "createdOn": "2019-06-06T22:48:41", + "entry": "CREDIT", + "destinationToken": "trm-2e02da75-a36c-4723-b613-0b64e6f582d9", + "amount": "15.00", + "currency": "CAD", + "details": { + "cardNumber": "************0673" + } + } + ], + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://qamaster-hyperwallet.aws.paylution.net/rest/v3/users/usr-e17ae43b-284d-4198-9585-f417943c624f/prepaid-cards/trm-2e02da75-a36c-4723-b613-0b64e6f582d9/receipts" + } + ] +} \ No newline at end of file diff --git a/receipt/src/test/resources/prepaid_card_receipt_debit_response.json b/receipt/src/test/resources/prepaid_card_receipt_debit_response.json new file mode 100644 index 000000000..d26f5276c --- /dev/null +++ b/receipt/src/test/resources/prepaid_card_receipt_debit_response.json @@ -0,0 +1,24 @@ +{ + "data": [ + { + "journalId": "FISA_5240222", + "type": "ADJUSTMENT", + "createdOn": "2019-06-01T22:49:17", + "entry": "DEBIT", + "sourceToken": "trm-2e02da75-a36c-4723-b613-0b64e6f582d9", + "amount": "8.90", + "currency": "USD", + "details": { + "cardNumber": "************0673" + } + } + ], + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://qamaster-hyperwallet.aws.paylution.net/rest/v3/users/usr-e17ae43b-284d-4198-9585-f417943c624f/prepaid-cards/trm-2e02da75-a36c-4723-b613-0b64e6f582d9/receipts" + } + ] +} \ No newline at end of file diff --git a/receipt/src/test/resources/prepaid_card_receipt_list.json b/receipt/src/test/resources/prepaid_card_receipt_list_response.json similarity index 83% rename from receipt/src/test/resources/prepaid_card_receipt_list.json rename to receipt/src/test/resources/prepaid_card_receipt_list_response.json index 95715bb7a..e6539804c 100644 --- a/receipt/src/test/resources/prepaid_card_receipt_list.json +++ b/receipt/src/test/resources/prepaid_card_receipt_list_response.json @@ -2,14 +2,21 @@ "data": [ { "journalId": "FISVL_5240220", - "type": "DEPOSIT", + "type": "PREPAID_CARD_SALE", "createdOn": "2019-06-06T22:48:41", - "entry": "CREDIT", + "entry": "DEBIT", "destinationToken": "trm-2e02da75-a36c-4723-b613-0b64e6f582d9", "amount": "10.00", + "fee": "3.00", "currency": "USD", "details": { - "cardNumber": "************0673" + "cardNumber": "************0673", + "clientPaymentId": "AOxXefx9", + "payeeName": "A Person", + "website": "https://api.sandbox.hyperwallet.com", + "notes": "Sample prepaid card payment for the period of June 15th, 2019 to July 23, 2019", + "charityName": "Sample Charity", + "checkNumber": "Sample Check Number" } }, { @@ -27,7 +34,7 @@ { "journalId": "FISA_5240222", "type": "ADJUSTMENT", - "createdOn": "2019-06-06T22:49:17", + "createdOn": "2019-06-01T22:49:17", "entry": "DEBIT", "sourceToken": "trm-2e02da75-a36c-4723-b613-0b64e6f582d9", "amount": "8.90", diff --git a/receipt/src/test/resources/prepaid_card_receipt_unknown_type_response.json b/receipt/src/test/resources/prepaid_card_receipt_unknown_type_response.json new file mode 100644 index 000000000..e2d1f2e8c --- /dev/null +++ b/receipt/src/test/resources/prepaid_card_receipt_unknown_type_response.json @@ -0,0 +1,24 @@ +{ + "data": [ + { + "journalId": "FISVL_5240220", + "type": "CARD_WAIVER_FEE", + "createdOn": "2019-06-06T22:48:41", + "entry": "CREDIT", + "destinationToken": "trm-2e02da75-a36c-4723-b613-0b64e6f582d9", + "amount": "15.00", + "currency": "CAD", + "details": { + "cardNumber": "************0673" + } + } + ], + "links": [ + { + "params": { + "rel": "self" + }, + "href": "https://qamaster-hyperwallet.aws.paylution.net/rest/v3/users/usr-e17ae43b-284d-4198-9585-f417943c624f/prepaid-cards/trm-2e02da75-a36c-4723-b613-0b64e6f582d9/receipts" + } + ] +} \ No newline at end of file