1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/prefs/pref_service.h" 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/autofill/account_chooser_model.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/pref_names.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_metrics.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TestAccountChooserModel : public AccountChooserModel { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestAccountChooserModel(AccountChooserModelDelegate* delegate, 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Profile* profile, 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool disable_wallet, 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AutofillMetrics& metric_logger) 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : AccountChooserModel(delegate, profile, disable_wallet, metric_logger) {} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~TestAccountChooserModel() {} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) using AccountChooserModel::kWalletAccountsStartId; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) using AccountChooserModel::kWalletAddAccountId; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) using AccountChooserModel::kAutofillItemId; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestAccountChooserModel); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockAccountChooserModelDelegate : public AccountChooserModelDelegate { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockAccountChooserModelDelegate() {} 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~MockAccountChooserModelDelegate() {} 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_METHOD0(AccountChoiceChanged, void()); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD0(AddAccount, void()); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_METHOD0(UpdateAccountChooserView, void()); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AccountChooserModelTest : public testing::Test { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AccountChooserModelTest() 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : model_(&delegate_, &profile_, false, metric_logger_) {} 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~AccountChooserModelTest() {} 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) TestingProfile* profile() { return &profile_; } 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockAccountChooserModelDelegate* delegate() { return &delegate_; } 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestAccountChooserModel* model() { return &model_; } 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AutofillMetrics& metric_logger() { return metric_logger_; } 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestingProfile profile_; 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) testing::NiceMock<MockAccountChooserModelDelegate> delegate_; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestAccountChooserModel model_; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillMetrics metric_logger_; 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(AccountChooserModelTest, ObeysPref) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When "Pay without wallet" is false, use Wallet by default. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile()->GetPrefs()->SetBoolean( 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet, false); 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TestAccountChooserModel model(delegate(), 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile(), 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) false, 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) metric_logger()); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(model.WalletIsSelected()); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When the user chose to "Pay without wallet", use Autofill. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile()->GetPrefs()->SetBoolean( 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet, true); 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TestAccountChooserModel model(delegate(), 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile(), 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) false, 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) metric_logger()); 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(model.WalletIsSelected()); 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // When the |disable_wallet| argument is true, use Autofill regardless 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // of the pref. 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile()->GetPrefs()->SetBoolean( 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet, false); 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TestAccountChooserModel model(delegate(), profile(), true, metric_logger()); 940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_FALSE(model.WalletIsSelected()); 950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // In incognito, use local data regardless of the pref. 970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) { 980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) TestingProfile::Builder builder; 990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) builder.SetIncognito(); 1000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<TestingProfile> incognito = builder.Build(); 1010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) incognito->SetOriginalProfile(profile()); 1020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) profile()->GetPrefs()->SetBoolean( 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet, false); 1040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) incognito->GetPrefs()->SetBoolean( 1050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet, false); 1060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TestAccountChooserModel model(delegate(), 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) incognito.get(), 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) false, 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) metric_logger()); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(model.WalletIsSelected()); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(AccountChooserModelTest, IgnoresPrefChanges) { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(profile()->GetPrefs()->GetBoolean( 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet)); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(model()->WalletIsSelected()); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check that nothing changes while this dialog is running if a pref changes 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // (this could cause subtle bugs or annoyances if a user closes another 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // running dialog). 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile()->GetPrefs()->SetBoolean( 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::prefs::kAutofillDialogPayWithoutWallet, true); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(model()->WalletIsSelected()); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(AccountChooserModelTest, HandlesError) { 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*delegate(), AccountChoiceChanged()).Times(1); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*delegate(), UpdateAccountChooserView()).Times(1); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->WalletIsSelected()); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->IsCommandIdEnabled( 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId)); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) model()->SetHadWalletError(); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(model()->WalletIsSelected()); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(model()->IsCommandIdEnabled( 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId)); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(AccountChooserModelTest, HandlesSigninError) { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*delegate(), AccountChoiceChanged()).Times(1); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*delegate(), UpdateAccountChooserView()).Times(2); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 0. "Unknown" wallet account, we don't know if the user is signed-in yet. 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->WalletIsSelected()); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->IsCommandIdEnabled( 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId)); 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(model()->WalletIsSelected()); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(model()->HasAccountsToChoose()); 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(3, model()->GetItemCount()); 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), model()->GetActiveWalletAccountName()); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 1. "Known" wallet account (e.g. after active/passive/automatic sign-in). 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Calls UpdateAccountChooserView. 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<std::string> accounts; 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) accounts.push_back("john.doe@gmail.com"); 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->SetWalletAccounts(accounts, 0U); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->WalletIsSelected()); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->IsCommandIdEnabled( 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId)); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(model()->WalletIsSelected()); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(model()->HasAccountsToChoose()); 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(3, model()->GetItemCount()); 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(accounts[0]), model()->GetActiveWalletAccountName()); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 2. Sign-in failure. 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Autofill data should be selected and be the only valid choice. 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Calls UpdateAccountChooserView. 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Calls AccountChoiceChanged. 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) model()->SetHadWalletSigninError(); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(model()->WalletIsSelected()); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(model()->IsCommandIdEnabled( 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId)); 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(model()->WalletIsSelected()); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(model()->HasAccountsToChoose()); 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(2, model()->GetItemCount()); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), model()->GetActiveWalletAccountName()); 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(AccountChooserModelTest, RespectsUserChoice) { 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*delegate(), AccountChoiceChanged()).Times(2); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) model()->ExecuteCommand(TestAccountChooserModel::kAutofillItemId, 0); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(model()->WalletIsSelected()); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*delegate(), AddAccount()); 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->ExecuteCommand(TestAccountChooserModel::kWalletAddAccountId, 0); 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(model()->WalletIsSelected()); 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) model()->ExecuteCommand(TestAccountChooserModel::kWalletAccountsStartId, 0); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(model()->WalletIsSelected()); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(AccountChooserModelTest, HandlesMultipleAccounts) { 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(model()->HasAccountsToChoose()); 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<std::string> accounts; 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) accounts.push_back("john.doe@gmail.com"); 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) accounts.push_back("jane.smith@gmail.com"); 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->SetWalletAccounts(accounts, 0U); 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(model()->HasAccountsToChoose()); 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(model()->WalletIsSelected()); 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(4, model()->GetItemCount()); 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(model()->IsCommandIdEnabled( 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId)); 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(model()->IsCommandIdEnabled( 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestAccountChooserModel::kWalletAccountsStartId + 1)); 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(accounts[0]), model()->GetActiveWalletAccountName()); 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->SetWalletAccounts(accounts, 1U); 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(accounts[1]), model()->GetActiveWalletAccountName()); 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->ExecuteCommand(TestAccountChooserModel::kWalletAccountsStartId, 0); 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(accounts[0]), model()->GetActiveWalletAccountName()); 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) model()->ExecuteCommand(TestAccountChooserModel::kWalletAccountsStartId + 1, 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0); 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(accounts[1]), model()->GetActiveWalletAccountName()); 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Setting the wallet accounts forces the switch to wallet. 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->ExecuteCommand(TestAccountChooserModel::kAutofillItemId, 0); 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(model()->WalletIsSelected()); 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) model()->SetWalletAccounts(accounts, 1U); 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(model()->WalletIsSelected()); 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 228