| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.chrome.browser.payments; | |
| 6 | |
| 7 import android.content.DialogInterface; | |
| 8 import android.test.suitebuilder.annotation.MediumTest; | |
| 9 | |
| 10 import org.chromium.base.ThreadUtils; | |
| 11 import org.chromium.base.metrics.RecordHistogram; | |
| 12 import org.chromium.base.test.util.Feature; | |
| 13 import org.chromium.chrome.R; | |
| 14 import org.chromium.chrome.browser.autofill.AutofillTestHelper; | |
| 15 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; | |
| 16 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; | |
| 17 | |
| 18 import java.util.concurrent.ExecutionException; | |
| 19 import java.util.concurrent.TimeoutException; | |
| 20 | |
| 21 /** | |
| 22 * A payment integration test for a merchant that requests contact details. | |
| 23 */ | |
| 24 public class PaymentRequestContactDetailsTest extends PaymentRequestTestBase { | |
| 25 public PaymentRequestContactDetailsTest() { | |
| 26 // The merchant requests both a phone number and an email address. | |
| 27 super("payment_request_contact_details_test.html"); | |
| 28 } | |
| 29 | |
| 30 @Override | |
| 31 public void onMainActivityStarted() | |
| 32 throws InterruptedException, ExecutionException, TimeoutException { | |
| 33 AutofillTestHelper helper = new AutofillTestHelper(); | |
| 34 // The user has valid phone number and email address on disk. | |
| 35 String billingAddressId = helper.setProfile(new AutofillProfile("", "htt
ps://example.com", | |
| 36 true, "Jon Doe", "Google", "340 Main St", "CA", "Los Angeles", "
", "90291", "", | |
| 37 "US", "555-555-5555", "jon.doe@google.com", "en-US")); | |
| 38 helper.setCreditCard(new CreditCard("", "https://example.com", true, tru
e, "Jon Doe", | |
| 39 "4111111111111111", "1111", "12", "2050", "visa", R.drawable.pr_
visa, | |
| 40 billingAddressId, "" /* serverId */)); | |
| 41 } | |
| 42 | |
| 43 /** Provide the existing valid phone number and email address to the merchan
t. */ | |
| 44 @MediumTest | |
| 45 @Feature({"Payments"}) | |
| 46 public void testPay() throws InterruptedException, ExecutionException, Timeo
utException { | |
| 47 triggerUIAndWait(mReadyToPay); | |
| 48 clickAndWait(R.id.button_primary, mReadyForUnmaskInput); | |
| 49 setTextInCardUnmaskDialogAndWait(R.id.card_unmask_input, "123", mReadyTo
Unmask); | |
| 50 clickCardUnmaskButtonAndWait(DialogInterface.BUTTON_POSITIVE, mDismissed
); | |
| 51 expectResultContains(new String[] {"555-555-5555", "jon.doe@google.com"}
); | |
| 52 } | |
| 53 | |
| 54 /** Attempt to add invalid phone number and email address and cancel the tra
nsaction. */ | |
| 55 @MediumTest | |
| 56 @Feature({"Payments"}) | |
| 57 public void testAddInvalidContactAndCancel() | |
| 58 throws InterruptedException, ExecutionException, TimeoutException { | |
| 59 triggerUIAndWait(mReadyToPay); | |
| 60 clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); | |
| 61 clickInContactInfoAndWait(R.id.payments_add_option_button, mReadyToEdit)
; | |
| 62 setTextInEditorAndWait(new String[] {"+++", "jane.jones"}, mEditorTextUp
date); | |
| 63 clickInEditorAndWait(R.id.payments_edit_done_button, mEditorValidationEr
ror); | |
| 64 clickInEditorAndWait(R.id.payments_edit_cancel_button, mReadyForInput); | |
| 65 clickAndWait(R.id.close_button, mDismissed); | |
| 66 expectResultContains(new String[] {"Request cancelled"}); | |
| 67 } | |
| 68 | |
| 69 /** Add new phone number and email address and provide that to the merchant.
*/ | |
| 70 @MediumTest | |
| 71 @Feature({"Payments"}) | |
| 72 public void testAddContactAndPay() | |
| 73 throws InterruptedException, ExecutionException, TimeoutException { | |
| 74 triggerUIAndWait(mReadyToPay); | |
| 75 clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); | |
| 76 clickInContactInfoAndWait(R.id.payments_add_option_button, mReadyToEdit)
; | |
| 77 setTextInEditorAndWait(new String[] {"999-999-9999", "jane.jones@google.
com"}, | |
| 78 mEditorTextUpdate); | |
| 79 clickInEditorAndWait(R.id.payments_edit_done_button, mReadyToPay); | |
| 80 clickAndWait(R.id.button_primary, mReadyForUnmaskInput); | |
| 81 setTextInCardUnmaskDialogAndWait(R.id.card_unmask_input, "123", mReadyTo
Unmask); | |
| 82 clickCardUnmaskButtonAndWait(DialogInterface.BUTTON_POSITIVE, mDismissed
); | |
| 83 expectResultContains(new String[] {"999-999-9999", "jane.jones@google.co
m"}); | |
| 84 } | |
| 85 | |
| 86 /** Quickly pressing on "add contact info" and then [X] should not crash. */ | |
| 87 @MediumTest | |
| 88 @Feature({"Payments"}) | |
| 89 public void testQuickAddContactAndCloseShouldNotCrash() | |
| 90 throws InterruptedException, ExecutionException, TimeoutException { | |
| 91 triggerUIAndWait(mReadyToPay); | |
| 92 clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); | |
| 93 | |
| 94 // Quickly press on "add contact info" and then [X]. | |
| 95 int callCount = mReadyToEdit.getCallCount(); | |
| 96 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
| 97 @Override | |
| 98 public void run() { | |
| 99 mUI.getContactDetailsSectionForTest().findViewById( | |
| 100 R.id.payments_add_option_button).performClick(); | |
| 101 mUI.getDialogForTest().findViewById(R.id.close_button).performCl
ick(); | |
| 102 } | |
| 103 }); | |
| 104 mReadyToEdit.waitForCallback(callCount); | |
| 105 | |
| 106 clickInEditorAndWait(R.id.payments_edit_cancel_button, mReadyForInput); | |
| 107 clickAndWait(R.id.close_button, mDismissed); | |
| 108 expectResultContains(new String[] {"Request cancelled"}); | |
| 109 } | |
| 110 | |
| 111 /** Quickly pressing on [X] and then "add contact info" should not crash. */ | |
| 112 @MediumTest | |
| 113 @Feature({"Payments"}) | |
| 114 public void testQuickCloseAndAddContactShouldNotCrash() | |
| 115 throws InterruptedException, ExecutionException, TimeoutException { | |
| 116 triggerUIAndWait(mReadyToPay); | |
| 117 clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); | |
| 118 | |
| 119 // Quickly press on [X] and then "add contact info." | |
| 120 int callCount = mDismissed.getCallCount(); | |
| 121 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
| 122 @Override | |
| 123 public void run() { | |
| 124 mUI.getDialogForTest().findViewById(R.id.close_button).performCl
ick(); | |
| 125 mUI.getContactDetailsSectionForTest().findViewById( | |
| 126 R.id.payments_add_option_button).performClick(); | |
| 127 } | |
| 128 }); | |
| 129 mDismissed.waitForCallback(callCount); | |
| 130 | |
| 131 expectResultContains(new String[] {"Request cancelled"}); | |
| 132 } | |
| 133 | |
| 134 /** Quickly pressing on "add contact info" and then "cancel" should not cras
h. */ | |
| 135 @MediumTest | |
| 136 @Feature({"Payments"}) | |
| 137 public void testQuickAddContactAndCancelShouldNotCrash() | |
| 138 throws InterruptedException, ExecutionException, TimeoutException { | |
| 139 triggerUIAndWait(mReadyToPay); | |
| 140 clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); | |
| 141 | |
| 142 // Quickly press on "add contact info" and then "cancel." | |
| 143 int callCount = mReadyToEdit.getCallCount(); | |
| 144 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
| 145 @Override | |
| 146 public void run() { | |
| 147 mUI.getContactDetailsSectionForTest().findViewById( | |
| 148 R.id.payments_add_option_button).performClick(); | |
| 149 mUI.getDialogForTest().findViewById(R.id.button_secondary).perfo
rmClick(); | |
| 150 } | |
| 151 }); | |
| 152 mReadyToEdit.waitForCallback(callCount); | |
| 153 | |
| 154 clickInEditorAndWait(R.id.payments_edit_cancel_button, mReadyForInput); | |
| 155 clickAndWait(R.id.close_button, mDismissed); | |
| 156 expectResultContains(new String[] {"Request cancelled"}); | |
| 157 } | |
| 158 | |
| 159 /** Quickly pressing on "cancel" and then "add contact info" should not cras
h. */ | |
| 160 @MediumTest | |
| 161 @Feature({"Payments"}) | |
| 162 public void testQuickCancelAndAddContactShouldNotCrash() | |
| 163 throws InterruptedException, ExecutionException, TimeoutException { | |
| 164 triggerUIAndWait(mReadyToPay); | |
| 165 clickInContactInfoAndWait(R.id.payments_section, mReadyForInput); | |
| 166 | |
| 167 // Quickly press on "cancel" and then "add contact info." | |
| 168 int callCount = mDismissed.getCallCount(); | |
| 169 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
| 170 @Override | |
| 171 public void run() { | |
| 172 mUI.getDialogForTest().findViewById(R.id.button_secondary).perfo
rmClick(); | |
| 173 mUI.getContactDetailsSectionForTest().findViewById( | |
| 174 R.id.payments_add_option_button).performClick(); | |
| 175 } | |
| 176 }); | |
| 177 mDismissed.waitForCallback(callCount); | |
| 178 | |
| 179 expectResultContains(new String[] {"Request cancelled"}); | |
| 180 } | |
| 181 | |
| 182 /** | |
| 183 * Test that starting a payment request that requires the user's email addre
ss and phone number | |
| 184 * results in the appropriate metric being logged in the PaymentRequest.Requ
estedInformation | |
| 185 * histogram. | |
| 186 */ | |
| 187 @MediumTest | |
| 188 @Feature({"Payments"}) | |
| 189 public void testRequestedInformationMetric() throws InterruptedException, Ex
ecutionException, | |
| 190 TimeoutException { | |
| 191 // Start the Payment Request. | |
| 192 triggerUIAndWait(mReadyToPay); | |
| 193 | |
| 194 // Make sure that only the appropriate enum value was logged. | |
| 195 for (int i = 0; i < PaymentRequestMetrics.REQUESTED_INFORMATION_MAX; ++i
) { | |
| 196 assertEquals((i == (PaymentRequestMetrics.REQUESTED_INFORMATION_EMAI
L | |
| 197 | PaymentRequestMetrics.REQUESTED_INFORMATION_PHONE) ? 1 : 0
), | |
| 198 RecordHistogram.getHistogramValueCountForTesting( | |
| 199 "PaymentRequest.RequestedInformation", i)); | |
| 200 } | |
| 201 } | |
| 202 } | |
| OLD | NEW |