Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 1 | // Copyright 2019 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 | #include "base/macros.h" |
| 6 | #include "base/strings/utf_string_conversions.h" |
Danyao Wang | 2f9cdb84 | 2019-11-22 16:58:25 | [diff] [blame] | 7 | #include "base/test/metrics/histogram_tester.h" |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 8 | #include "base/test/scoped_feature_list.h" |
| 9 | #include "build/build_config.h" |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 10 | #include "chrome/test/payments/payment_request_platform_browsertest_base.h" |
Danyao Wang | f81d361 | 2020-03-09 16:13:44 | [diff] [blame] | 11 | #include "chrome/test/payments/personal_data_manager_test_util.h" |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 12 | #include "components/payments/core/features.h" |
Danyao Wang | 2f9cdb84 | 2019-11-22 16:58:25 | [diff] [blame] | 13 | #include "components/payments/core/journey_logger.h" |
Peter Kasting | 919ce65 | 2020-05-07 10:22:36 | [diff] [blame] | 14 | #include "content/public/test/browser_test.h" |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 15 | #include "testing/gtest/include/gtest/gtest.h" |
| 16 | |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 17 | namespace payments { |
| 18 | namespace { |
| 19 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 20 | enum HasEnrolledInstrumentMode { |
| 21 | STRICT_HAS_ENROLLED_INSTRUMENT, |
| 22 | LEGACY_HAS_ENROLLED_INSTRUMENT, |
| 23 | }; |
| 24 | |
| 25 | // A parameterized test to test both values of |
| 26 | // features::kStrictHasEnrolledAutofillInstrument. |
| 27 | class HasEnrolledInstrumentTest |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 28 | : public PaymentRequestPlatformBrowserTestBase, |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 29 | public testing::WithParamInterface<HasEnrolledInstrumentMode> { |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 30 | public: |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 31 | HasEnrolledInstrumentTest() { |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 32 | if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) { |
| 33 | feature_list_.InitWithFeatures( |
| 34 | /*enabled_features=*/{features::kStrictHasEnrolledAutofillInstrument}, |
| 35 | /*disabled_features=*/{features::kPaymentRequestSkipToGPay}); |
| 36 | } |
| 37 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 38 | |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 39 | ~HasEnrolledInstrumentTest() override = default; |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 40 | |
| 41 | void SetUpOnMainThread() override { |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 42 | PaymentRequestPlatformBrowserTestBase::SetUpOnMainThread(); |
| 43 | NavigateTo("/has_enrolled_instrument.html"); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 44 | } |
| 45 | |
Rouslan Solomakhin | 2dc99c3 | 2020-03-24 21:25:03 | [diff] [blame] | 46 | std::string not_supported_message() const { |
| 47 | return "NotSupportedError: The payment method \"basic-card\" is not " |
| 48 | "supported. User does not have valid information on file."; |
Rouslan Solomakhin | 1dca2a92 | 2019-09-06 22:25:07 | [diff] [blame] | 49 | } |
| 50 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 51 | // Helper function to test that all variations of hasEnrolledInstrument() |
| 52 | // returns |expected|. |
| 53 | void ExpectHasEnrolledInstrumentIs(bool expected) { |
| 54 | EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), |
| 55 | "hasEnrolledInstrument()")); |
| 56 | EXPECT_EQ(expected, |
| 57 | content::EvalJs(GetActiveWebContents(), |
| 58 | "hasEnrolledInstrument({requestShipping:true})")); |
| 59 | EXPECT_EQ(expected, content::EvalJs( |
| 60 | GetActiveWebContents(), |
| 61 | "hasEnrolledInstrument({requestPayerEmail:true})")); |
| 62 | } |
| 63 | |
| 64 | // Helper function to test that all variants of show() rejects with |
| 65 | // not_supported_message(). |
| 66 | void ExpectShowRejects() { |
| 67 | // Only check show() if feature is on. |
| 68 | if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) { |
| 69 | base::HistogramTester histogram_tester; |
| 70 | base::HistogramBase::Count expected_count = |
| 71 | histogram_tester.GetBucketCount( |
| 72 | "PaymentRequest.CheckoutFunnel.NoShow", |
| 73 | JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD); |
| 74 | |
Danyao Wang | d77ef78 | 2019-11-25 21:22:36 | [diff] [blame] | 75 | // Check code path where show() is called before instruments are ready. |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 76 | EXPECT_EQ(not_supported_message(), |
| 77 | content::EvalJs(GetActiveWebContents(), "show()")); |
| 78 | // TODO(crbug.com/1027322): Fix NoShow logging on Android. |
| 79 | #if !defined(OS_ANDROID) |
| 80 | expected_count++; |
| 81 | #endif |
| 82 | histogram_tester.ExpectBucketCount( |
| 83 | "PaymentRequest.CheckoutFunnel.NoShow", |
| 84 | JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD, |
| 85 | expected_count); |
| 86 | EXPECT_EQ(not_supported_message(), |
| 87 | content::EvalJs(GetActiveWebContents(), |
| 88 | "show({requestShipping:true})")); |
| 89 | EXPECT_EQ(not_supported_message(), |
| 90 | content::EvalJs(GetActiveWebContents(), |
| 91 | "show({requestPayerEmail:true})")); |
Danyao Wang | d77ef78 | 2019-11-25 21:22:36 | [diff] [blame] | 92 | |
| 93 | // Check code path where show() is called after instruments are ready. |
| 94 | EXPECT_EQ(not_supported_message(), |
| 95 | content::EvalJs(GetActiveWebContents(), "delayedShow()")); |
| 96 | EXPECT_EQ(not_supported_message(), |
| 97 | content::EvalJs(GetActiveWebContents(), |
| 98 | "delayedShow({requestShipping:true})")); |
| 99 | EXPECT_EQ(not_supported_message(), |
| 100 | content::EvalJs(GetActiveWebContents(), |
| 101 | "delayedShow({requestPayerEmail:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 102 | } |
| 103 | } |
| 104 | |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 105 | private: |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 106 | base::test::ScopedFeatureList feature_list_; |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 107 | |
| 108 | DISALLOW_COPY_AND_ASSIGN(HasEnrolledInstrumentTest); |
| 109 | }; |
| 110 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 111 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, NoCard) { |
| 112 | ExpectHasEnrolledInstrumentIs(false); |
| 113 | ExpectShowRejects(); |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 114 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 115 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 116 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, NoBillingAddress) { |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 117 | AddCreditCard(autofill::test::GetCreditCard()); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 118 | ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT); |
| 119 | ExpectShowRejects(); |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 120 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 121 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 122 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 123 | HaveShippingNoBillingAddress) { |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 124 | CreateAndAddAutofillProfile(); |
| 125 | AddCreditCard(autofill::test::GetCreditCard()); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 126 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 127 | ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT); |
| 128 | ExpectShowRejects(); |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 129 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 130 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 131 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 132 | HaveShippingAndBillingAddress) { |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 133 | CreateAndAddCreditCardForProfile(CreateAndAddAutofillProfile()); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 134 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 135 | ExpectHasEnrolledInstrumentIs(true); |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 136 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 137 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 138 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, InvalidCardNumber) { |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 139 | autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 140 | AddAutofillProfile(address); |
| 141 | autofill::CreditCard card = CreatCreditCardForProfile(address); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 142 | card.SetRawInfo(autofill::ServerFieldType::CREDIT_CARD_NUMBER, |
Jan Wilken Dörrie | 78e88d82e | 2021-03-23 15:24:22 | [diff] [blame] | 143 | u"1111111111111111"); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 144 | AddCreditCard(card); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 145 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 146 | ExpectHasEnrolledInstrumentIs(false); |
| 147 | ExpectShowRejects(); |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 148 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 149 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 150 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, ExpiredCard) { |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 151 | autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 152 | AddAutofillProfile(address); |
| 153 | autofill::CreditCard card = CreatCreditCardForProfile(address); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 154 | card.SetExpirationYear(2000); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 155 | AddCreditCard(card); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 156 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 157 | ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT); |
| 158 | ExpectShowRejects(); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 159 | } |
| 160 | |
| 161 | // TODO(https://crbug.com/994799): Unify autofill data validation and returned |
| 162 | // data across platforms. |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 163 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 164 | HaveNoNameShippingAndBillingAddress) { |
| 165 | autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
Jan Wilken Dörrie | dec9912 | 2021-03-11 18:02:30 | [diff] [blame] | 166 | address.SetRawInfo(autofill::ServerFieldType::NAME_FIRST, std::u16string()); |
| 167 | address.SetRawInfo(autofill::ServerFieldType::NAME_MIDDLE, std::u16string()); |
| 168 | address.SetRawInfo(autofill::ServerFieldType::NAME_LAST, std::u16string()); |
Matthias Körber | c2d2107 | 2021-02-10 14:35:46 | [diff] [blame] | 169 | // For structured names, it is necessary to explicitly reset the full name |
| 170 | // and the full name with the prefix. |
Jan Wilken Dörrie | dec9912 | 2021-03-11 18:02:30 | [diff] [blame] | 171 | address.SetInfo(autofill::ServerFieldType::NAME_FULL, std::u16string(), |
Matthias Körber | 4da55b3 | 2020-08-19 14:10:29 | [diff] [blame] | 172 | "en-US"); |
Matthias Körber | c2d2107 | 2021-02-10 14:35:46 | [diff] [blame] | 173 | address.SetInfo(autofill::ServerFieldType::NAME_FULL_WITH_HONORIFIC_PREFIX, |
Jan Wilken Dörrie | dec9912 | 2021-03-11 18:02:30 | [diff] [blame] | 174 | std::u16string(), "en-US"); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 175 | AddAutofillProfile(address); |
| 176 | CreateAndAddCreditCardForProfile(address); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 177 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 178 | // Recipient name is required for shipping address in strict mode. |
| 179 | EXPECT_EQ(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 180 | content::EvalJs(GetActiveWebContents(), |
| 181 | "hasEnrolledInstrument({requestShipping:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 182 | if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) { |
| 183 | EXPECT_EQ(not_supported_message(), |
| 184 | content::EvalJs(GetActiveWebContents(), |
| 185 | "show({requestShipping:true})")); |
| 186 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 187 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 188 | // Recipient name should be required for billing address in strict mode, but |
| 189 | // current desktop implementation doesn't match this requirement. |
| 190 | // TODO(https://crbug.com/994799): Unify autofill data requirements between |
| 191 | // desktop and Android. |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 192 | #if defined(OS_ANDROID) |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 193 | bool is_no_name_billing_address_valid = |
| 194 | GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT; |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 195 | #else |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 196 | bool is_no_name_billing_address_valid = true; |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 197 | #endif |
Rouslan Solomakhin | 1dca2a92 | 2019-09-06 22:25:07 | [diff] [blame] | 198 | |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 199 | EXPECT_EQ(is_no_name_billing_address_valid, |
| 200 | content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()")); |
| 201 | EXPECT_EQ(is_no_name_billing_address_valid, |
| 202 | content::EvalJs(GetActiveWebContents(), |
| 203 | "hasEnrolledInstrument({requestPayerEmail:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 204 | if (!is_no_name_billing_address_valid) { |
| 205 | EXPECT_EQ(not_supported_message(), |
| 206 | content::EvalJs(GetActiveWebContents(), "show()")); |
| 207 | EXPECT_EQ(not_supported_message(), |
| 208 | content::EvalJs(GetActiveWebContents(), |
| 209 | "show({requestPayerEmail:true})")); |
| 210 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 211 | } |
| 212 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 213 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 214 | HaveNoStreetShippingAndBillingAddress) { |
| 215 | autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| 216 | address.SetRawInfo(autofill::ServerFieldType::ADDRESS_HOME_STREET_ADDRESS, |
Jan Wilken Dörrie | dec9912 | 2021-03-11 18:02:30 | [diff] [blame] | 217 | std::u16string()); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 218 | AddAutofillProfile(address); |
| 219 | CreateAndAddCreditCardForProfile(address); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 220 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 221 | ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT); |
| 222 | ExpectShowRejects(); |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 223 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 224 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 225 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, NoEmailAddress) { |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 226 | autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| 227 | address.SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS, |
Jan Wilken Dörrie | dec9912 | 2021-03-11 18:02:30 | [diff] [blame] | 228 | std::u16string()); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 229 | AddAutofillProfile(address); |
| 230 | CreateAndAddCreditCardForProfile(address); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 231 | |
| 232 | EXPECT_EQ(true, |
| 233 | content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()")); |
| 234 | EXPECT_EQ(true, |
| 235 | content::EvalJs(GetActiveWebContents(), |
| 236 | "hasEnrolledInstrument({requestShipping:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 237 | // StrictHasEnrolledAutofillInstrument considers a profile with missing email |
| 238 | // address as invalid. |
| 239 | EXPECT_EQ(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 240 | content::EvalJs(GetActiveWebContents(), |
| 241 | "hasEnrolledInstrument({requestPayerEmail:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 242 | if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) { |
| 243 | EXPECT_EQ(not_supported_message(), |
| 244 | content::EvalJs(GetActiveWebContents(), |
| 245 | "show({requestPayerEmail:true})")); |
| 246 | } |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 247 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 248 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 249 | IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, InvalidEmailAddress) { |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 250 | autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| 251 | address.SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS, |
Jan Wilken Dörrie | 78e88d82e | 2021-03-23 15:24:22 | [diff] [blame] | 252 | u"this-is-not-a-valid-email-address"); |
Sahel Sharify | 35b1b5d | 2020-02-25 18:17:47 | [diff] [blame] | 253 | AddAutofillProfile(address); |
| 254 | CreateAndAddCreditCardForProfile(address); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 255 | |
| 256 | EXPECT_EQ(true, |
| 257 | content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()")); |
| 258 | EXPECT_EQ(true, |
| 259 | content::EvalJs(GetActiveWebContents(), |
| 260 | "hasEnrolledInstrument({requestShipping:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 261 | |
| 262 | // StrictHasEnrolledAutofillInstrument considers a profile with missing email |
| 263 | // address as invalid. |
| 264 | EXPECT_EQ(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT, |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 265 | content::EvalJs(GetActiveWebContents(), |
| 266 | "hasEnrolledInstrument({requestPayerEmail:true})")); |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 267 | if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) { |
| 268 | EXPECT_EQ(not_supported_message(), |
| 269 | content::EvalJs(GetActiveWebContents(), |
| 270 | "show({requestPayerEmail:true})")); |
| 271 | } |
Ken Rockot | 12375dba | 2019-10-11 16:16:01 | [diff] [blame] | 272 | } |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 273 | |
Danyao Wang | 3f9d3227 | 2019-11-25 17:16:45 | [diff] [blame] | 274 | // Run all tests with both values for |
| 275 | // features::kStrictHasEnrolledAutofillInstrument. |
Rouslan Solomakhin | 2dc99c3 | 2020-03-24 21:25:03 | [diff] [blame] | 276 | INSTANTIATE_TEST_SUITE_P(All, |
| 277 | HasEnrolledInstrumentTest, |
| 278 | ::testing::Values(STRICT_HAS_ENROLLED_INSTRUMENT, |
| 279 | LEGACY_HAS_ENROLLED_INSTRUMENT)); |
Rouslan Solomakhin | cb29c4f | 2019-08-16 22:49:39 | [diff] [blame] | 280 | } // namespace |
| 281 | } // namespace payments |