signin_tracker_unittest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/signin/signin_tracker.h" 6 7#include "base/bind.h" 8#include "base/bind_helpers.h" 9#include "base/compiler_specific.h" 10#include "chrome/browser/chrome_notification_types.h" 11#include "chrome/browser/profiles/profile.h" 12#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 13#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" 14#include "chrome/browser/signin/fake_signin_manager.h" 15#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 16#include "chrome/browser/signin/signin_manager.h" 17#include "chrome/browser/signin/signin_manager_factory.h" 18#include "chrome/browser/sync/profile_sync_service_factory.h" 19#include "chrome/browser/sync/profile_sync_service_mock.h" 20#include "chrome/test/base/testing_profile.h" 21#include "components/signin/core/browser/fake_auth_status_provider.h" 22#include "components/signin/core/browser/profile_oauth2_token_service.h" 23#include "content/public/test/test_browser_thread_bundle.h" 24#include "google_apis/gaia/gaia_constants.h" 25#include "google_apis/gaia/google_service_auth_error.h" 26 27#include "testing/gmock/include/gmock/gmock.h" 28#include "testing/gtest/include/gtest/gtest.h" 29 30using ::testing::_; 31using ::testing::AnyNumber; 32using ::testing::Mock; 33using ::testing::Return; 34using ::testing::ReturnRef; 35 36namespace { 37 38class MockObserver : public SigninTracker::Observer { 39 public: 40 MockObserver() {} 41 ~MockObserver() {} 42 43 MOCK_METHOD1(SigninFailed, void(const GoogleServiceAuthError&)); 44 MOCK_METHOD0(SigninSuccess, void(void)); 45 MOCK_METHOD1(MergeSessionComplete, void(const GoogleServiceAuthError&)); 46}; 47 48} // namespace 49 50class SigninTrackerTest : public testing::Test { 51 public: 52 SigninTrackerTest() {} 53 virtual void SetUp() OVERRIDE { 54 TestingProfile::Builder builder; 55 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), 56 BuildFakeProfileOAuth2TokenService); 57 builder.AddTestingFactory(SigninManagerFactory::GetInstance(), 58 FakeSigninManagerBase::Build); 59 profile_ = builder.Build(); 60 61 fake_oauth2_token_service_ = 62 static_cast<FakeProfileOAuth2TokenService*>( 63 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get())); 64 65 mock_signin_manager_ = static_cast<FakeSigninManagerForTesting*>( 66 SigninManagerFactory::GetForProfile(profile_.get())); 67 68 tracker_.reset(new SigninTracker(profile_.get(), &observer_)); 69 } 70 virtual void TearDown() OVERRIDE { 71 tracker_.reset(); 72 profile_.reset(); 73 } 74 75 content::TestBrowserThreadBundle thread_bundle_; 76 scoped_ptr<SigninTracker> tracker_; 77 scoped_ptr<TestingProfile> profile_; 78 FakeSigninManagerForTesting* mock_signin_manager_; 79 FakeProfileOAuth2TokenService* fake_oauth2_token_service_; 80 MockObserver observer_; 81}; 82 83#if !defined(OS_CHROMEOS) 84TEST_F(SigninTrackerTest, SignInFails) { 85 const GoogleServiceAuthError error( 86 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 87 88 // Signin failure should result in a SigninFailed callback. 89 EXPECT_CALL(observer_, SigninSuccess()).Times(0); 90 EXPECT_CALL(observer_, SigninFailed(error)); 91 92 mock_signin_manager_->FailSignin(error); 93} 94#endif // !defined(OS_CHROMEOS) 95 96TEST_F(SigninTrackerTest, SignInSucceeds) { 97 EXPECT_CALL(observer_, SigninSuccess()); 98 EXPECT_CALL(observer_, SigninFailed(_)).Times(0); 99 100 mock_signin_manager_->SetAuthenticatedUsername("user@gmail.com"); 101 fake_oauth2_token_service_->IssueRefreshToken("refresh_token"); 102} 103