password_manager_presenter_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/password_manager/mock_password_store_service.h"
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/password_manager/password_store_factory.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/passwords/password_manager_presenter.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/passwords/password_ui_view.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/testing_profile.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/password_manager/core/browser/mock_password_store.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using base::ASCIIToUTF16;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using testing::Eq;
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using testing::Property;
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MockPasswordUIView : public PasswordUIView {
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  explicit MockPasswordUIView(Profile* profile)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      : profile_(profile), password_manager_presenter_(this) {
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    password_manager_presenter_.Initialize();
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~MockPasswordUIView() {}
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual Profile* GetProfile() OVERRIDE;
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if !defined(OS_ANDROID)
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  MOCK_METHOD2(ShowPassword, void(size_t, const base::string16&));
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MOCK_METHOD2(SetPasswordList,
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               void(const ScopedVector<autofill::PasswordForm>&, bool));
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MOCK_METHOD1(SetPasswordExceptionList,
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               void(const ScopedVector<autofill::PasswordForm>&));
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PasswordManagerPresenter* GetPasswordManagerPresenter() {
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return &password_manager_presenter_;
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Profile* profile_;
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PasswordManagerPresenter password_manager_presenter_;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MockPasswordUIView);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if !defined(OS_ANDROID)
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)gfx::NativeWindow MockPasswordUIView::GetNativeWindow() { return NULL; }
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Profile* MockPasswordUIView::GetProfile() { return profile_; }
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PasswordManagerPresenterTest : public testing::Test {
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected:
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  PasswordManagerPresenterTest() {}
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~PasswordManagerPresenterTest() {}
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    PasswordStoreFactory::GetInstance()->SetTestingFactory(
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        &profile_, MockPasswordStoreService::Build);
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    mock_controller_.reset(new MockPasswordUIView(&profile_));
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AddPasswordEntry(const GURL& origin,
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        const std::string& user_name,
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        const std::string& password);
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AddPasswordException(const GURL& origin);
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UpdateLists();
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MockPasswordUIView* GetUIController() { return mock_controller_.get(); }
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TestingProfile profile_;
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<MockPasswordUIView> mock_controller_;
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PasswordManagerPresenterTest);
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PasswordManagerPresenterTest::AddPasswordEntry(
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const GURL& origin,
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& user_name,
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& password) {
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  autofill::PasswordForm* form = new autofill::PasswordForm();
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  form->origin = origin;
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  form->username_element = base::ASCIIToUTF16("Email");
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  form->username_value = base::ASCIIToUTF16(user_name);
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  form->password_element = base::ASCIIToUTF16("Passwd");
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  form->password_value = base::ASCIIToUTF16(password);
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mock_controller_->GetPasswordManagerPresenter()->password_list_
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      .push_back(form);
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PasswordManagerPresenterTest::AddPasswordException(const GURL& origin) {
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  autofill::PasswordForm* form = new autofill::PasswordForm();
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  form->origin = origin;
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mock_controller_->GetPasswordManagerPresenter()->password_exception_list_
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      .push_back(form);
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PasswordManagerPresenterTest::UpdateLists() {
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mock_controller_->GetPasswordManagerPresenter()->SetPasswordList();
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mock_controller_->GetPasswordManagerPresenter()->SetPasswordExceptionList();
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace {
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(PasswordManagerPresenterTest, UIControllerIsCalled) {
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      *GetUIController(),
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SetPasswordList(
107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          Property(&ScopedVector<autofill::PasswordForm>::size, Eq(0u)),
108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          testing::_));
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*GetUIController(),
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              SetPasswordExceptionList(Property(
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  &ScopedVector<autofill::PasswordForm>::size, Eq(0u))));
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  UpdateLists();
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GURL pass_origin("http://abc1.com");
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddPasswordEntry(pass_origin, "test@gmail.com", "test");
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      *GetUIController(),
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SetPasswordList(
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          Property(&ScopedVector<autofill::PasswordForm>::size, Eq(1u)),
119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          testing::_));
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*GetUIController(),
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              SetPasswordExceptionList(Property(
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  &ScopedVector<autofill::PasswordForm>::size, Eq(0u))));
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  UpdateLists();
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GURL except_origin("http://abc2.com");
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddPasswordException(except_origin);
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      *GetUIController(),
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SetPasswordList(
129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          Property(&ScopedVector<autofill::PasswordForm>::size, Eq(1u)),
130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          testing::_));
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*GetUIController(),
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              SetPasswordExceptionList(Property(
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  &ScopedVector<autofill::PasswordForm>::size, Eq(1u))));
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  UpdateLists();
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GURL pass_origin2("http://example.com");
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddPasswordEntry(pass_origin2, "test@gmail.com", "test");
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      *GetUIController(),
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SetPasswordList(
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          Property(&ScopedVector<autofill::PasswordForm>::size, Eq(2u)),
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          testing::_));
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*GetUIController(),
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              SetPasswordExceptionList(Property(
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  &ScopedVector<autofill::PasswordForm>::size, Eq(1u))));
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  UpdateLists();
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
149