| Index: chrome/browser/autofill/autofill_cc_infobar_delegate_unittest.cc
|
| diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate_unittest.cc b/chrome/browser/autofill/autofill_cc_infobar_delegate_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e716c7816a2483f53aebc6ae42e4ba384137de64
|
| --- /dev/null
|
| +++ b/chrome/browser/autofill/autofill_cc_infobar_delegate_unittest.cc
|
| @@ -0,0 +1,161 @@
|
| +// Copyright 2013 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/autofill/autofill_cc_infobar_delegate.h"
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "chrome/browser/autofill/personal_data_manager_factory.h"
|
| +#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
|
| +#include "chrome/test/base/chrome_render_view_host_test_harness.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "components/autofill/core/browser/autofill_metrics.h"
|
| +#include "components/autofill/core/browser/autofill_test_utils.h"
|
| +#include "components/autofill/core/browser/personal_data_manager.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using testing::_;
|
| +
|
| +namespace autofill {
|
| +
|
| +namespace {
|
| +
|
| +class MockAutofillMetrics : public AutofillMetrics {
|
| + public:
|
| + MockAutofillMetrics() {}
|
| + MOCK_CONST_METHOD1(LogCreditCardInfoBarMetric, void(InfoBarMetric metric));
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics);
|
| +};
|
| +
|
| +class TestPersonalDataManager : public PersonalDataManager {
|
| + public:
|
| + TestPersonalDataManager() : PersonalDataManager("en-US") {}
|
| +
|
| + using PersonalDataManager::set_database;
|
| + using PersonalDataManager::SetPrefService;
|
| +
|
| + // Overridden to avoid a trip to the database.
|
| + virtual void LoadProfiles() OVERRIDE {}
|
| + virtual void LoadCreditCards() OVERRIDE {}
|
| +
|
| + MOCK_METHOD1(SaveImportedCreditCard,
|
| + std::string(const CreditCard& imported_credit_card));
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestPersonalDataManager);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class AutofillCCInfobarDelegateTest : public ChromeRenderViewHostTestHarness {
|
| + public:
|
| + virtual ~AutofillCCInfobarDelegateTest();
|
| +
|
| + virtual void SetUp() OVERRIDE;
|
| + virtual void TearDown() OVERRIDE;
|
| +
|
| + protected:
|
| + scoped_ptr<ConfirmInfoBarDelegate> CreateDelegate(
|
| + MockAutofillMetrics* metric_logger);
|
| +
|
| + scoped_ptr<TestPersonalDataManager> personal_data_;
|
| +};
|
| +
|
| +AutofillCCInfobarDelegateTest::~AutofillCCInfobarDelegateTest() {}
|
| +
|
| +void AutofillCCInfobarDelegateTest::SetUp() {
|
| + ChromeRenderViewHostTestHarness::SetUp();
|
| +
|
| + // Ensure Mac OS X does not pop up a modal dialog for the Address Book.
|
| + autofill::test::DisableSystemServices(profile()->GetPrefs());
|
| +
|
| + PersonalDataManagerFactory::GetInstance()->SetTestingFactory(profile(), NULL);
|
| +
|
| + TabAutofillManagerDelegate::CreateForWebContents(web_contents());
|
| + autofill::TabAutofillManagerDelegate* manager_delegate =
|
| + autofill::TabAutofillManagerDelegate::FromWebContents(web_contents());
|
| +
|
| + personal_data_.reset(new TestPersonalDataManager());
|
| + personal_data_->set_database(manager_delegate->GetDatabase());
|
| + personal_data_->SetPrefService(profile()->GetPrefs());
|
| +}
|
| +
|
| +void AutofillCCInfobarDelegateTest::TearDown() {
|
| + personal_data_.reset();
|
| + ChromeRenderViewHostTestHarness::TearDown();
|
| +}
|
| +
|
| +scoped_ptr<ConfirmInfoBarDelegate>
|
| +AutofillCCInfobarDelegateTest::CreateDelegate(
|
| + MockAutofillMetrics* metric_logger) {
|
| + EXPECT_CALL(*metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_SHOWN));
|
| +
|
| + CreditCard credit_card;
|
| + return AutofillCCInfoBarDelegate::Create(
|
| + metric_logger,
|
| + base::Bind(
|
| + base::IgnoreResult(&TestPersonalDataManager::SaveImportedCreditCard),
|
| + base::Unretained(personal_data_.get()),
|
| + credit_card));
|
| +}
|
| +
|
| +// Test that credit card infobar metrics are logged correctly.
|
| +TEST_F(AutofillCCInfobarDelegateTest, Metrics) {
|
| + MockAutofillMetrics metric_logger;
|
| + ::testing::InSequence dummy;
|
| +
|
| + // Accept the infobar.
|
| + {
|
| + scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger));
|
| + ASSERT_TRUE(infobar);
|
| + EXPECT_CALL(*personal_data_, SaveImportedCreditCard(_));
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_ACCEPTED));
|
| +
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED))
|
| + .Times(0);
|
| + EXPECT_TRUE(infobar->Accept());
|
| + }
|
| +
|
| + // Cancel the infobar.
|
| + {
|
| + scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger));
|
| + ASSERT_TRUE(infobar);
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_DENIED))
|
| + .Times(1);
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED))
|
| + .Times(0);
|
| + EXPECT_TRUE(infobar->Cancel());
|
| + }
|
| +
|
| + // Dismiss the infobar.
|
| + {
|
| + scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger));
|
| + ASSERT_TRUE(infobar);
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_DENIED))
|
| + .Times(1);
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED))
|
| + .Times(0);
|
| + infobar->InfoBarDismissed();
|
| + }
|
| +
|
| + // Ignore the infobar.
|
| + {
|
| + scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger));
|
| + ASSERT_TRUE(infobar);
|
| + EXPECT_CALL(metric_logger,
|
| + LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED))
|
| + .Times(1);
|
| + }
|
| +}
|
| +
|
| +} // namespace autofill
|
|
|