Chromium Code Reviews| Index: chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc |
| diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc |
| index 4fc96048e44eb063707370d04d37059d0cca5a4e..3dbf8884fc6789004e75d37d5b89affc55aae358 100644 |
| --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc |
| +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc |
| @@ -2,6 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include <string> |
| #include <vector> |
| #include "base/macros.h" |
| @@ -10,6 +11,7 @@ |
| #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h" |
| #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" |
| #include "chrome/browser/ui/views/payments/validating_textfield.h" |
| +#include "components/autofill/core/browser/address_combobox_model.h" |
| #include "components/autofill/core/browser/autofill_test_utils.h" |
| #include "components/autofill/core/browser/field_types.h" |
| #include "components/autofill/core/browser/personal_data_manager.h" |
| @@ -20,6 +22,7 @@ |
| #include "content/public/test/browser_test_utils.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/base/l10n/l10n_util.h" |
| +#include "ui/views/controls/combobox/combobox.h" |
| namespace payments { |
| @@ -28,6 +31,7 @@ namespace { |
| const base::Time kJanuary2017 = base::Time::FromDoubleT(1484505871); |
| const base::Time kJune2017 = base::Time::FromDoubleT(1497552271); |
| +const auto kBillingAddressType = autofill::MAX_VALID_FIELD_TYPE; |
| } // namespace |
| class PaymentRequestCreditCardEditorTest |
| @@ -37,6 +41,16 @@ class PaymentRequestCreditCardEditorTest |
| : PaymentRequestBrowserTestBase( |
| "/payment_request_no_shipping_test.html") {} |
| + void SelectBillingAddress(const std::string& billing_address_id) { |
| + views::Combobox* address_combobox(static_cast<views::Combobox*>( |
| + dialog_view()->GetViewByID(static_cast<int>(kBillingAddressType)))); |
| + ASSERT_NE(address_combobox, nullptr); |
| + autofill::AddressComboboxModel* address_combobox_model( |
| + static_cast<autofill::AddressComboboxModel*>( |
| + address_combobox->model())); |
| + address_combobox->SetSelectedIndex( |
| + address_combobox_model->GetIndexOfIdentifier(billing_address_id)); |
| + } |
| PersonalDataLoadedObserverMock personal_data_observer_; |
| private: |
| @@ -54,6 +68,10 @@ IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, EnteringValidData) { |
| EXPECT_EQ(0U, request->state()->available_instruments().size()); |
| EXPECT_EQ(nullptr, request->state()->selected_instrument()); |
| + // But there must be at least one address available for billing. |
| + autofill::AutofillProfile billing_profile(autofill::test::GetFullProfile()); |
| + PaymentRequestBrowserTestBase::AddAutofillProfile(billing_profile); |
| + |
| OpenCreditCardEditorScreen(); |
| SetEditorTextfieldValue(base::ASCIIToUTF16("Bob Jones"), |
| @@ -63,6 +81,7 @@ IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, EnteringValidData) { |
| SetComboboxValue(base::ASCIIToUTF16("05"), autofill::CREDIT_CARD_EXP_MONTH); |
| SetComboboxValue(base::ASCIIToUTF16("2026"), |
| autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR); |
| + SelectBillingAddress(billing_profile.guid()); |
| // Verifying the data is in the DB. |
| autofill::PersonalDataManager* personal_data_manager = GetDataManager(); |
| @@ -236,6 +255,8 @@ IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, |
| EnteringInvalidCardNumber_AndFixingIt) { |
| autofill::TestAutofillClock test_clock; |
| test_clock.SetNow(kJune2017); |
| + autofill::AutofillProfile billing_profile(autofill::test::GetFullProfile()); |
| + PaymentRequestBrowserTestBase::AddAutofillProfile(billing_profile); |
| InvokePaymentRequestUI(); |
| @@ -251,6 +272,7 @@ IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, |
| SetComboboxValue(base::ASCIIToUTF16("05"), autofill::CREDIT_CARD_EXP_MONTH); |
| SetComboboxValue(base::ASCIIToUTF16("2026"), |
| autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR); |
| + SelectBillingAddress(billing_profile.guid()); |
| ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
| @@ -296,6 +318,9 @@ IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, EditingExpiredCard) { |
| card.set_use_date(kJanuary2017); |
| card.SetExpirationMonth(1); |
| card.SetExpirationYear(2017); |
| + autofill::AutofillProfile billing_profile(autofill::test::GetFullProfile()); |
| + PaymentRequestBrowserTestBase::AddAutofillProfile(billing_profile); |
|
Mathieu
2017/05/04 20:29:19
no need for PaymentRequestBrowserTestBase:
MAD
2017/05/05 00:50:07
Done.
|
| + card.set_billing_address_id(billing_profile.guid()); |
| AddCreditCard(card); |
| autofill::TestAutofillClock test_clock; |
| test_clock.SetNow(kJune2017); |
| @@ -357,6 +382,158 @@ IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, EditingExpiredCard) { |
| request->state()->selected_instrument()); |
| } |
| +IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, |
| + EditingCardWithoutBillingAddress) { |
| + autofill::CreditCard card = autofill::test::GetCreditCard(); |
| + // Make sure to clear billing address. |
| + card.set_billing_address_id(""); |
| + AddCreditCard(card); |
| + |
| + autofill::TestAutofillClock test_clock; |
| + test_clock.SetNow(kJune2017); |
| + autofill::AutofillProfile billing_profile(autofill::test::GetFullProfile()); |
| + PaymentRequestBrowserTestBase::AddAutofillProfile(billing_profile); |
| + |
| + InvokePaymentRequestUI(); |
| + |
| + // One instrument is available, but it's not selected. |
| + PaymentRequest* request = GetPaymentRequests(GetActiveWebContents()).front(); |
| + EXPECT_EQ(1U, request->state()->available_instruments().size()); |
| + EXPECT_EQ(nullptr, request->state()->selected_instrument()); |
| + |
| + OpenPaymentMethodScreen(); |
| + |
| + ResetEventObserver(DialogEvent::CREDIT_CARD_EDITOR_OPENED); |
| + ClickOnChildInListViewAndWait(/*child_index=*/0, /*num_children=*/1, |
| + DialogViewID::PAYMENT_METHOD_SHEET_LIST_VIEW); |
| + |
| + // Fixing the billing address. |
| + SelectBillingAddress(billing_profile.guid()); |
| + |
| + // Verifying the data is in the DB. |
| + autofill::PersonalDataManager* personal_data_manager = GetDataManager(); |
| + personal_data_manager->AddObserver(&personal_data_observer_); |
| + |
| + ResetEventObserver(DialogEvent::BACK_TO_PAYMENT_SHEET_NAVIGATION); |
| + |
| + // Wait until the web database has been updated and the notification sent. |
| + base::RunLoop data_loop; |
| + EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) |
| + .WillOnce(QuitMessageLoop(&data_loop)); |
| + ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
| + data_loop.Run(); |
| + |
| + EXPECT_EQ(1u, personal_data_manager->GetCreditCards().size()); |
| + autofill::CreditCard* credit_card = |
| + personal_data_manager->GetCreditCards()[0]; |
| + EXPECT_EQ(billing_profile.guid(), credit_card->billing_address_id()); |
| + // It retains other properties. |
| + EXPECT_EQ(card.guid(), credit_card->guid()); |
| + EXPECT_EQ(base::ASCIIToUTF16("4111111111111111"), credit_card->number()); |
| + EXPECT_EQ(base::ASCIIToUTF16("Test User"), |
| + credit_card->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL)); |
| + |
| + // Still have one instrument, but now it's selected. |
| + EXPECT_EQ(1U, request->state()->available_instruments().size()); |
| + EXPECT_EQ(request->state()->available_instruments().back().get(), |
| + request->state()->selected_instrument()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, |
| + CreateNewBillingAddress) { |
| + autofill::CreditCard card = autofill::test::GetCreditCard(); |
| + // Make sure to clear billing address. |
| + card.set_billing_address_id(""); |
| + AddCreditCard(card); |
| + |
| + autofill::TestAutofillClock test_clock; |
| + test_clock.SetNow(kJune2017); |
| + autofill::AutofillProfile billing_profile(autofill::test::GetFullProfile()); |
| + PaymentRequestBrowserTestBase::AddAutofillProfile(billing_profile); |
| + |
| + InvokePaymentRequestUI(); |
| + |
| + // One instrument is available, but it's not selected. |
| + PaymentRequest* request = GetPaymentRequests(GetActiveWebContents()).front(); |
| + EXPECT_EQ(1U, request->state()->available_instruments().size()); |
| + EXPECT_EQ(nullptr, request->state()->selected_instrument()); |
| + |
| + OpenPaymentMethodScreen(); |
| + |
| + ResetEventObserver(DialogEvent::CREDIT_CARD_EDITOR_OPENED); |
| + ClickOnChildInListViewAndWait(/*child_index=*/0, /*num_children=*/1, |
| + DialogViewID::PAYMENT_METHOD_SHEET_LIST_VIEW); |
| + // Click to open the address editor |
| + ResetEventObserver(DialogEvent::SHIPPING_ADDRESS_EDITOR_OPENED); |
| + ClickOnDialogViewAndWait(DialogViewID::ADD_BILLING_ADDRESS_BUTTON); |
| + |
| + // Set valid address values. |
| + SetEditorTextfieldValue(base::ASCIIToUTF16("Bob"), autofill::NAME_FULL); |
| + SetEditorTextfieldValue(base::ASCIIToUTF16("42 BobStreet"), |
| + autofill::ADDRESS_HOME_STREET_ADDRESS); |
| + SetEditorTextfieldValue(base::ASCIIToUTF16("BobCity"), |
| + autofill::ADDRESS_HOME_CITY); |
| + SetEditorTextfieldValue(base::ASCIIToUTF16("BobZip"), |
| + autofill::ADDRESS_HOME_ZIP); |
| + |
| + // Come back to credit card editor. |
| + ResetEventObserver(DialogEvent::BACK_NAVIGATION); |
| + ClickOnDialogViewAndWait(DialogViewID::SAVE_ADDRESS_BUTTON); |
| + |
| + // And then save credit card state and come back to payment sheet. |
| + ResetEventObserver(DialogEvent::BACK_TO_PAYMENT_SHEET_NAVIGATION); |
| + |
| + // Verifying the data is in the DB. |
| + autofill::PersonalDataManager* personal_data_manager = GetDataManager(); |
| + personal_data_manager->AddObserver(&personal_data_observer_); |
| + |
| + // Wait until the web database has been updated and the notification sent. |
| + base::RunLoop data_loop; |
| + EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) |
| + .WillOnce(QuitMessageLoop(&data_loop)); |
| + ClickOnDialogViewAndWait(DialogViewID::EDITOR_SAVE_BUTTON); |
| + data_loop.Run(); |
| + |
| + // Still have one instrument, but now it's selected. |
| + EXPECT_EQ(1U, request->state()->available_instruments().size()); |
| + EXPECT_EQ(request->state()->available_instruments().back().get(), |
| + request->state()->selected_instrument()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, |
| + NonexistentBillingAddres) { |
| + autofill::CreditCard card = autofill::test::GetCreditCard(); |
| + // Set a billing address that is not yet added to the personal data. |
| + autofill::AutofillProfile billing_profile(autofill::test::GetFullProfile()); |
| + card.set_billing_address_id(billing_profile.guid()); |
| + AddCreditCard(card); |
| + |
| + autofill::TestAutofillClock test_clock; |
| + test_clock.SetNow(kJune2017); |
| + |
| + InvokePaymentRequestUI(); |
| + |
| + // One instrument is available, but it's not selected. |
| + PaymentRequest* request = GetPaymentRequests(GetActiveWebContents()).front(); |
| + EXPECT_EQ(1U, request->state()->available_instruments().size()); |
| + EXPECT_EQ(nullptr, request->state()->selected_instrument()); |
| + |
| + // Now add the billing address to the personal data. |
| + PaymentRequestBrowserTestBase::AddAutofillProfile(billing_profile); |
| + |
| + // Go back and re-invoke. |
| + ResetEventObserver(DialogEvent::DIALOG_CLOSED); |
| + ClickOnDialogViewAndWait(DialogViewID::CANCEL_BUTTON, |
| + /*wait_for_animation=*/false); |
| + InvokePaymentRequestUI(); |
| + |
| + // Still have one instrument, but now it's selected. |
| + request = GetPaymentRequests(GetActiveWebContents()).front(); |
| + EXPECT_EQ(1U, request->state()->available_instruments().size()); |
| + EXPECT_EQ(request->state()->available_instruments().back().get(), |
| + request->state()->selected_instrument()); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(PaymentRequestCreditCardEditorTest, EnteringEmptyData) { |
| InvokePaymentRequestUI(); |