| Index: chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc
|
| diff --git a/chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc b/chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b8d3deaa1e24a386a87ddff66f8544f8d681c39f
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/views/payments/payment_method_view_controller_interactive_uitest.cc
|
| @@ -0,0 +1,129 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
|
| +#include "chrome/browser/ui/views/payments/payment_request_interactive_uitest_base.h"
|
| +#include "components/autofill/core/browser/autofill_test_utils.h"
|
| +#include "components/autofill/core/browser/personal_data_manager.h"
|
| +#include "components/payments/payment_request.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace payments {
|
| +
|
| +class PaymentMethodViewControllerTest
|
| + : public PaymentRequestInteractiveTestBase {
|
| + protected:
|
| + PaymentMethodViewControllerTest()
|
| + : PaymentRequestInteractiveTestBase(
|
| + "/payment_request_no_shipping_test.html") {}
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(PaymentMethodViewControllerTest);
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PaymentMethodViewControllerTest, EmptyList) {
|
| + InvokePaymentRequestUI();
|
| + OpenPaymentMethodScreen();
|
| +
|
| + views::View* list_view = dialog_view()->GetViewByID(
|
| + static_cast<int>(DialogViewID::PAYMENT_METHOD_SHEET_LIST_VIEW));
|
| + EXPECT_TRUE(list_view);
|
| + EXPECT_FALSE(list_view->has_children());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PaymentMethodViewControllerTest, OneCardSelected) {
|
| + autofill::PersonalDataManager* personal_data_manager = GetDataManager();
|
| +
|
| + PersonalDataLoadedObserverMock personal_data_observer;
|
| + personal_data_manager->AddObserver(&personal_data_observer);
|
| + base::RunLoop data_loop;
|
| + EXPECT_CALL(personal_data_observer, OnPersonalDataChanged())
|
| + .WillOnce(QuitMessageLoop(&data_loop));
|
| + autofill::CreditCard card = autofill::test::GetCreditCard();
|
| + personal_data_manager->AddCreditCard(card);
|
| + data_loop.Run();
|
| +
|
| + InvokePaymentRequestUI();
|
| + OpenPaymentMethodScreen();
|
| +
|
| + PaymentRequest* request = GetPaymentRequests(GetActiveWebContents())[0];
|
| + EXPECT_EQ(1U, request->credit_cards().size());
|
| +
|
| + views::View* list_view = dialog_view()->GetViewByID(
|
| + static_cast<int>(DialogViewID::PAYMENT_METHOD_SHEET_LIST_VIEW));
|
| + EXPECT_TRUE(list_view);
|
| + EXPECT_EQ(1, list_view->child_count());
|
| +
|
| + EXPECT_EQ(card, *request->selected_credit_card());
|
| + views::View* checkmark_view = list_view->child_at(0)->GetViewByID(
|
| + static_cast<int>(DialogViewID::PAYMENT_METHOD_ITEM_CHECKMARK_VIEW));
|
| + EXPECT_TRUE(checkmark_view->visible());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PaymentMethodViewControllerTest,
|
| + OneCardSelectedOutOfMany) {
|
| + autofill::PersonalDataManager* personal_data_manager = GetDataManager();
|
| +
|
| + PersonalDataLoadedObserverMock personal_data_observer1;
|
| + personal_data_manager->AddObserver(&personal_data_observer1);
|
| + base::RunLoop card1_loop;
|
| + EXPECT_CALL(personal_data_observer1, OnPersonalDataChanged())
|
| + .WillOnce(QuitMessageLoop(&card1_loop));
|
| + autofill::CreditCard card1 = autofill::test::GetCreditCard();
|
| + // Ensure that this card is the first suggestion.
|
| + card1.set_use_count(5U);
|
| + personal_data_manager->AddCreditCard(card1);
|
| + card1_loop.Run();
|
| + personal_data_manager->RemoveObserver(&personal_data_observer1);
|
| +
|
| + EXPECT_EQ(1U, personal_data_manager->GetCreditCardsToSuggest().size());
|
| +
|
| + PersonalDataLoadedObserverMock personal_data_observer2;
|
| + personal_data_manager->AddObserver(&personal_data_observer2);
|
| + base::RunLoop card2_loop;
|
| + EXPECT_CALL(personal_data_observer2, OnPersonalDataChanged())
|
| + .WillOnce(QuitMessageLoop(&card2_loop));
|
| + autofill::CreditCard card2 = autofill::test::GetCreditCard2();
|
| + card2.set_use_count(1U);
|
| + personal_data_manager->AddCreditCard(card2);
|
| + card2_loop.Run();
|
| + personal_data_manager->RemoveObserver(&personal_data_observer2);
|
| +
|
| + InvokePaymentRequestUI();
|
| + OpenPaymentMethodScreen();
|
| +
|
| + PaymentRequest* request = GetPaymentRequests(GetActiveWebContents())[0];
|
| + EXPECT_EQ(2U, request->credit_cards().size());
|
| + EXPECT_EQ(card1, *request->selected_credit_card());
|
| +
|
| + views::View* list_view = dialog_view()->GetViewByID(
|
| + static_cast<int>(DialogViewID::PAYMENT_METHOD_SHEET_LIST_VIEW));
|
| + EXPECT_TRUE(list_view);
|
| + EXPECT_EQ(2, list_view->child_count());
|
| +
|
| + EXPECT_EQ(card1, *request->selected_credit_card());
|
| + views::View* checkmark_view = list_view->child_at(0)->GetViewByID(
|
| + static_cast<int>(DialogViewID::PAYMENT_METHOD_ITEM_CHECKMARK_VIEW));
|
| + EXPECT_TRUE(checkmark_view->visible());
|
| +
|
| + views::View* checkmark_view2 = list_view->child_at(1)->GetViewByID(
|
| + static_cast<int>(DialogViewID::PAYMENT_METHOD_ITEM_CHECKMARK_VIEW));
|
| + EXPECT_FALSE(checkmark_view2->visible());
|
| +
|
| + // Simulate selecting the second card.
|
| + ClickOnDialogViewAndWait(list_view->child_at(1));
|
| +
|
| + EXPECT_EQ(card2, *request->selected_credit_card());
|
| + EXPECT_FALSE(checkmark_view->visible());
|
| + EXPECT_TRUE(checkmark_view2->visible());
|
| +
|
| + // Clicking on the second card again should not modify any state.
|
| + ClickOnDialogViewAndWait(list_view->child_at(1));
|
| +
|
| + EXPECT_EQ(card2, *request->selected_credit_card());
|
| + EXPECT_FALSE(checkmark_view->visible());
|
| + EXPECT_TRUE(checkmark_view2->visible());
|
| +}
|
| +
|
| +} // namespace payments
|
|
|