Index: chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc |
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc |
index 3133838eaa89cca63fde5271244d6b8384acd736..7b70def29df14fbccd3682de7de16d843808c2a2 100644 |
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc |
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc |
@@ -12,6 +12,7 @@ |
#include "chrome/test/base/testing_profile.h" |
#include "components/autofill/browser/autofill_common_test.h" |
#include "components/autofill/browser/autofill_metrics.h" |
+#include "components/autofill/browser/wallet/full_wallet.h" |
#include "components/autofill/browser/wallet/instrument.h" |
#include "components/autofill/browser/wallet/wallet_address.h" |
#include "components/autofill/browser/wallet/wallet_client.h" |
@@ -93,6 +94,11 @@ class TestWalletClient : public wallet::WalletClient { |
const std::string& google_transaction_id, |
const GURL& source_url)); |
+ MOCK_METHOD3(AuthenticateInstrument, |
+ void(const std::string& instrument_id, |
+ const std::string& card_verification_number, |
+ const std::string& obfuscated_gaia_id)); |
+ |
MOCK_METHOD1(GetFullWallet, |
void(const wallet::WalletClient::FullWalletRequest& request)); |
@@ -208,7 +214,9 @@ class AutofillDialogControllerTest : public testing::Test { |
test_web_contents_.reset( |
content::WebContentsTester::CreateTestWebContents(profile(), NULL)); |
- base::Callback<void(const FormStructure*, const std::string&)> callback; |
+ base::Callback<void(const FormStructure*, const std::string&)> callback = |
+ base::Bind(&AutofillDialogControllerTest::FinishedCallback, |
+ base::Unretained(this)); |
controller_ = new TestAutofillDialogController( |
test_web_contents_.get(), |
form_data, |
@@ -225,11 +233,25 @@ class AutofillDialogControllerTest : public testing::Test { |
} |
protected: |
+ size_t CountNotificationsOfType(DialogNotification::Type type) { |
+ size_t count = 0; |
+ const std::vector<DialogNotification>& notifications = |
+ controller()->CurrentNotifications(); |
+ for (size_t i = 0; i < notifications.size(); ++i) { |
+ if (notifications[i].type() == type) |
+ ++count; |
+ } |
+ return count; |
+ } |
+ |
TestAutofillDialogController* controller() { return controller_; } |
TestingProfile* profile() { return &profile_; } |
private: |
+ void FinishedCallback(const FormStructure* form_structure, |
+ const std::string& google_transaction_id) {} |
+ |
// A bunch of threads are necessary for classes like TestWebContents and |
// URLRequestContextGetter not to fall over. |
MessageLoopForUI loop_; |
@@ -324,9 +346,11 @@ TEST_F(AutofillDialogControllerTest, AutofillProfileVariants) { |
EXPECT_EQ(3, email_model->GetItemCount()); |
email_model->ActivatedAt(0); |
- EXPECT_EQ(kEmail1, controller()->SuggestionTextForSection(SECTION_EMAIL)); |
+ EXPECT_EQ(kEmail1, |
+ controller()->SuggestionStateForSection(SECTION_EMAIL).text); |
email_model->ActivatedAt(1); |
- EXPECT_EQ(kEmail2, controller()->SuggestionTextForSection(SECTION_EMAIL)); |
+ EXPECT_EQ(kEmail2, |
+ controller()->SuggestionStateForSection(SECTION_EMAIL).text); |
controller()->EditClickedForSection(SECTION_EMAIL); |
const DetailInputs& inputs = |
@@ -348,7 +372,7 @@ TEST_F(AutofillDialogControllerTest, AcceptLegalDocuments) { |
wallet_items->AddInstrument(wallet::GetTestMaskedInstrument()); |
wallet_items->AddAddress(wallet::GetTestShippingAddress()); |
controller()->OnDidGetWalletItems(wallet_items.Pass()); |
- controller()->OnSubmit(); |
+ controller()->OnAccept(); |
} |
TEST_F(AutofillDialogControllerTest, SaveAddress) { |
@@ -361,7 +385,7 @@ TEST_F(AutofillDialogControllerTest, SaveAddress) { |
scoped_ptr<wallet::WalletItems> wallet_items = wallet::GetTestWalletItems(); |
wallet_items->AddInstrument(wallet::GetTestMaskedInstrument()); |
controller()->OnDidGetWalletItems(wallet_items.Pass()); |
- controller()->OnSubmit(); |
+ controller()->OnAccept(); |
} |
TEST_F(AutofillDialogControllerTest, SaveInstrument) { |
@@ -374,7 +398,7 @@ TEST_F(AutofillDialogControllerTest, SaveInstrument) { |
scoped_ptr<wallet::WalletItems> wallet_items = wallet::GetTestWalletItems(); |
wallet_items->AddAddress(wallet::GetTestShippingAddress()); |
controller()->OnDidGetWalletItems(wallet_items.Pass()); |
- controller()->OnSubmit(); |
+ controller()->OnAccept(); |
} |
TEST_F(AutofillDialogControllerTest, SaveInstrumentAndAddress) { |
@@ -385,11 +409,13 @@ TEST_F(AutofillDialogControllerTest, SaveInstrumentAndAddress) { |
SaveInstrumentAndAddress(_, _, _, _)).Times(1); |
controller()->OnDidGetWalletItems(wallet::GetTestWalletItems()); |
- controller()->OnSubmit(); |
+ controller()->OnAccept(); |
} |
-TEST_F(AutofillDialogControllerTest, Cancel) { |
+TEST_F(AutofillDialogControllerTest, CancelNoSave) { |
controller()->set_is_paying_with_wallet(true); |
+ EXPECT_CALL(*controller()->GetTestingWalletClient(), |
+ SaveInstrumentAndAddress(_, _, _, _)).Times(0); |
EXPECT_CALL(*controller()->GetView(), ModelChanged()).Times(1); |
@@ -414,21 +440,73 @@ TEST_F(AutofillDialogControllerTest, EditClickedCancelled) { |
const DetailInputs& inputs0 = |
controller()->RequestedFieldsForSection(SECTION_EMAIL); |
EXPECT_EQ(string16(), inputs0[0].initial_value); |
- EXPECT_EQ(kEmail, controller()->SuggestionTextForSection(SECTION_EMAIL)); |
+ EXPECT_EQ(kEmail, |
+ controller()->SuggestionStateForSection(SECTION_EMAIL).text); |
// When edited, the initial_value should contain the value. |
controller()->EditClickedForSection(SECTION_EMAIL); |
const DetailInputs& inputs1 = |
controller()->RequestedFieldsForSection(SECTION_EMAIL); |
EXPECT_EQ(kEmail, inputs1[0].initial_value); |
- EXPECT_EQ(string16(), controller()->SuggestionTextForSection(SECTION_EMAIL)); |
+ EXPECT_EQ(string16(), |
+ controller()->SuggestionStateForSection(SECTION_EMAIL).text); |
// When edit is cancelled, the initial_value should be empty. |
controller()->EditCancelledForSection(SECTION_EMAIL); |
const DetailInputs& inputs2 = |
controller()->RequestedFieldsForSection(SECTION_EMAIL); |
- EXPECT_EQ(kEmail, controller()->SuggestionTextForSection(SECTION_EMAIL)); |
+ EXPECT_EQ(kEmail, |
+ controller()->SuggestionStateForSection(SECTION_EMAIL).text); |
EXPECT_EQ(string16(), inputs2[0].initial_value); |
} |
+TEST_F(AutofillDialogControllerTest, VerifyCvv) { |
+ controller()->set_is_paying_with_wallet(true); |
+ |
+ EXPECT_CALL(*controller()->GetView(), ModelChanged()).Times(2); |
+ EXPECT_CALL(*controller()->GetTestingWalletClient(), |
+ GetFullWallet(_)).Times(1); |
+ EXPECT_CALL(*controller()->GetTestingWalletClient(), |
+ AuthenticateInstrument(_, _, _)).Times(1); |
+ |
+ scoped_ptr<wallet::WalletItems> wallet_items = wallet::GetTestWalletItems(); |
+ wallet_items->AddInstrument(wallet::GetTestMaskedInstrument()); |
+ wallet_items->AddAddress(wallet::GetTestShippingAddress()); |
+ controller()->OnDidGetWalletItems(wallet_items.Pass()); |
+ controller()->OnAccept(); |
+ |
+ EXPECT_EQ(0U, CountNotificationsOfType(DialogNotification::REQUIRED_ACTION)); |
+ EXPECT_TRUE(controller()->SectionIsActive(SECTION_EMAIL)); |
+ EXPECT_TRUE(controller()->SectionIsActive(SECTION_SHIPPING)); |
+ EXPECT_TRUE(controller()->SectionIsActive(SECTION_CC_BILLING)); |
+ EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
+ EXPECT_TRUE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_CANCEL)); |
+ |
+ SuggestionState suggestion_state = |
+ controller()->SuggestionStateForSection(SECTION_CC_BILLING); |
+ EXPECT_TRUE(suggestion_state.extra_text.empty()); |
+ |
+ base::DictionaryValue dict; |
+ scoped_ptr<base::ListValue> list(new base::ListValue()); |
+ list->AppendString("verify_cvv"); |
+ dict.Set("required_action", list.release()); |
+ controller()->OnDidGetFullWallet(wallet::FullWallet::CreateFullWallet(dict)); |
+ |
+ EXPECT_EQ(1U, CountNotificationsOfType(DialogNotification::REQUIRED_ACTION)); |
+ EXPECT_FALSE(controller()->SectionIsActive(SECTION_EMAIL)); |
+ EXPECT_FALSE(controller()->SectionIsActive(SECTION_SHIPPING)); |
+ EXPECT_TRUE(controller()->SectionIsActive(SECTION_CC_BILLING)); |
+ |
+ suggestion_state = |
+ controller()->SuggestionStateForSection(SECTION_CC_BILLING); |
+ EXPECT_FALSE(suggestion_state.extra_text.empty()); |
+ EXPECT_EQ( |
+ 0, controller()->MenuModelForSection(SECTION_CC_BILLING)->GetItemCount()); |
+ |
+ EXPECT_TRUE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
+ EXPECT_TRUE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_CANCEL)); |
+ |
+ controller()->OnAccept(); |
+} |
+ |
} // namespace autofill |