OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 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 <string> |
| 6 |
| 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h" |
| 10 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" |
| 11 #include "components/autofill/core/browser/personal_data_manager.h" |
| 12 |
| 13 namespace payments { |
| 14 |
| 15 namespace { |
| 16 |
| 17 const char kNameFull[] = "Kirby Puckett"; |
| 18 const char kPhoneNumber[] = "6515558946"; |
| 19 const char kPhoneNumberInvalid[] = "123"; |
| 20 const char kEmailAddress[] = "kirby@example.com"; |
| 21 const char kEmailAddressInvalid[] = "kirby"; |
| 22 |
| 23 std::string GetLocale() { |
| 24 return g_browser_process->GetApplicationLocale(); |
| 25 } |
| 26 |
| 27 } // namespace |
| 28 |
| 29 class PaymentRequestContactInfoEditorTest |
| 30 : public PaymentRequestBrowserTestBase { |
| 31 protected: |
| 32 PaymentRequestContactInfoEditorTest() |
| 33 : PaymentRequestBrowserTestBase( |
| 34 "/payment_request_contact_details_test.html") {} |
| 35 |
| 36 PersonalDataLoadedObserverMock personal_data_observer_; |
| 37 }; |
| 38 |
| 39 IN_PROC_BROWSER_TEST_F(PaymentRequestContactInfoEditorTest, HappyPath) { |
| 40 InvokePaymentRequestUI(); |
| 41 OpenContactInfoScreen(); |
| 42 OpenContactInfoEditorScreen(); |
| 43 |
| 44 SetEditorTextfieldValue(base::ASCIIToUTF16(kNameFull), autofill::NAME_FULL); |
| 45 SetEditorTextfieldValue(base::ASCIIToUTF16(kPhoneNumber), |
| 46 autofill::PHONE_HOME_WHOLE_NUMBER); |
| 47 SetEditorTextfieldValue(base::ASCIIToUTF16(kEmailAddress), |
| 48 autofill::EMAIL_ADDRESS); |
| 49 |
| 50 autofill::PersonalDataManager* personal_data_manager = GetDataManager(); |
| 51 personal_data_manager->AddObserver(&personal_data_observer_); |
| 52 |
| 53 // Wait until the web database has been updated and the notification sent. |
| 54 base::RunLoop data_loop; |
| 55 EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) |
| 56 .WillOnce(QuitMessageLoop(&data_loop)); |
| 57 ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
| 58 data_loop.Run(); |
| 59 |
| 60 ASSERT_EQ(1UL, personal_data_manager->GetProfiles().size()); |
| 61 autofill::AutofillProfile* profile = personal_data_manager->GetProfiles()[0]; |
| 62 DCHECK(profile); |
| 63 |
| 64 EXPECT_EQ(base::ASCIIToUTF16(kNameFull), |
| 65 profile->GetInfo(autofill::AutofillType(autofill::NAME_FULL), |
| 66 GetLocale())); |
| 67 EXPECT_EQ(base::ASCIIToUTF16(kPhoneNumber), |
| 68 profile->GetInfo( |
| 69 autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
| 70 GetLocale())); |
| 71 EXPECT_EQ(base::ASCIIToUTF16(kEmailAddress), |
| 72 profile->GetInfo(autofill::AutofillType(autofill::EMAIL_ADDRESS), |
| 73 GetLocale())); |
| 74 } |
| 75 |
| 76 IN_PROC_BROWSER_TEST_F(PaymentRequestContactInfoEditorTest, Validation) { |
| 77 InvokePaymentRequestUI(); |
| 78 OpenContactInfoScreen(); |
| 79 OpenContactInfoEditorScreen(); |
| 80 |
| 81 // Insert invalid values into fields which have rules more complex than |
| 82 // just emptiness, and an empty string into simple required fields. |
| 83 SetEditorTextfieldValue(base::string16(), autofill::NAME_FULL); |
| 84 SetEditorTextfieldValue(base::ASCIIToUTF16(kPhoneNumberInvalid), |
| 85 autofill::PHONE_HOME_WHOLE_NUMBER); |
| 86 SetEditorTextfieldValue(base::ASCIIToUTF16(kEmailAddressInvalid), |
| 87 autofill::EMAIL_ADDRESS); |
| 88 |
| 89 EXPECT_TRUE(IsEditorTextfieldInvalid(autofill::NAME_FULL)); |
| 90 EXPECT_TRUE(IsEditorTextfieldInvalid(autofill::PHONE_HOME_WHOLE_NUMBER)); |
| 91 EXPECT_TRUE(IsEditorTextfieldInvalid(autofill::EMAIL_ADDRESS)); |
| 92 |
| 93 // Correct the problems. |
| 94 SetEditorTextfieldValue(base::ASCIIToUTF16(kNameFull), autofill::NAME_FULL); |
| 95 SetEditorTextfieldValue(base::ASCIIToUTF16(kPhoneNumber), |
| 96 autofill::PHONE_HOME_WHOLE_NUMBER); |
| 97 SetEditorTextfieldValue(base::ASCIIToUTF16(kEmailAddress), |
| 98 autofill::EMAIL_ADDRESS); |
| 99 |
| 100 EXPECT_FALSE(IsEditorTextfieldInvalid(autofill::NAME_FULL)); |
| 101 EXPECT_FALSE(IsEditorTextfieldInvalid(autofill::PHONE_HOME_WHOLE_NUMBER)); |
| 102 EXPECT_FALSE(IsEditorTextfieldInvalid(autofill::EMAIL_ADDRESS)); |
| 103 |
| 104 autofill::PersonalDataManager* personal_data_manager = GetDataManager(); |
| 105 personal_data_manager->AddObserver(&personal_data_observer_); |
| 106 |
| 107 // Wait until the web database has been updated and the notification sent. |
| 108 base::RunLoop data_loop; |
| 109 EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) |
| 110 .WillOnce(QuitMessageLoop(&data_loop)); |
| 111 ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
| 112 data_loop.Run(); |
| 113 |
| 114 ASSERT_EQ(1UL, personal_data_manager->GetProfiles().size()); |
| 115 autofill::AutofillProfile* profile = personal_data_manager->GetProfiles()[0]; |
| 116 DCHECK(profile); |
| 117 |
| 118 EXPECT_EQ(base::ASCIIToUTF16(kNameFull), |
| 119 profile->GetInfo(autofill::AutofillType(autofill::NAME_FULL), |
| 120 GetLocale())); |
| 121 EXPECT_EQ(base::ASCIIToUTF16(kPhoneNumber), |
| 122 profile->GetInfo( |
| 123 autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
| 124 GetLocale())); |
| 125 EXPECT_EQ(base::ASCIIToUTF16(kEmailAddress), |
| 126 profile->GetInfo(autofill::AutofillType(autofill::EMAIL_ADDRESS), |
| 127 GetLocale())); |
| 128 } |
| 129 |
| 130 IN_PROC_BROWSER_TEST_F(PaymentRequestContactInfoEditorTest, ModifyExisting) { |
| 131 autofill::PersonalDataManager* personal_data_manager = GetDataManager(); |
| 132 personal_data_manager->AddObserver(&personal_data_observer_); |
| 133 |
| 134 autofill::AutofillProfile incomplete_profile; |
| 135 incomplete_profile.SetInfo(autofill::AutofillType(autofill::NAME_FULL), |
| 136 base::ASCIIToUTF16(kNameFull), GetLocale()); |
| 137 AddAutofillProfile(incomplete_profile); |
| 138 |
| 139 InvokePaymentRequestUI(); |
| 140 OpenContactInfoScreen(); |
| 141 |
| 142 views::View* list_view = dialog_view()->GetViewByID( |
| 143 static_cast<int>(DialogViewID::CONTACT_INFO_SHEET_LIST_VIEW)); |
| 144 DCHECK(list_view); |
| 145 ClickOnDialogViewAndWait(list_view->child_at(0)); |
| 146 |
| 147 // Do not set name: This should have been populated when opening the screen. |
| 148 EXPECT_EQ(base::ASCIIToUTF16(kNameFull), |
| 149 GetEditorTextfieldValue(autofill::NAME_FULL)); |
| 150 SetEditorTextfieldValue(base::ASCIIToUTF16(kPhoneNumber), |
| 151 autofill::PHONE_HOME_WHOLE_NUMBER); |
| 152 SetEditorTextfieldValue(base::ASCIIToUTF16(kEmailAddress), |
| 153 autofill::EMAIL_ADDRESS); |
| 154 |
| 155 // Wait until the web database has been updated and the notification sent. |
| 156 base::RunLoop save_data_loop; |
| 157 EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) |
| 158 .WillOnce(QuitMessageLoop(&save_data_loop)); |
| 159 ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
| 160 save_data_loop.Run(); |
| 161 |
| 162 ASSERT_EQ(1UL, personal_data_manager->GetProfiles().size()); |
| 163 autofill::AutofillProfile* profile = personal_data_manager->GetProfiles()[0]; |
| 164 DCHECK(profile); |
| 165 |
| 166 EXPECT_EQ(base::ASCIIToUTF16(kNameFull), |
| 167 profile->GetInfo(autofill::AutofillType(autofill::NAME_FULL), |
| 168 GetLocale())); |
| 169 EXPECT_EQ(base::ASCIIToUTF16(kPhoneNumber), |
| 170 profile->GetInfo( |
| 171 autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
| 172 GetLocale())); |
| 173 EXPECT_EQ(base::ASCIIToUTF16(kEmailAddress), |
| 174 profile->GetInfo(autofill::AutofillType(autofill::EMAIL_ADDRESS), |
| 175 GetLocale())); |
| 176 } |
| 177 |
| 178 } // namespace payments |
OLD | NEW |