signin_tracker_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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_auth_status_provider.h" 13#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 14#include "chrome/browser/signin/fake_profile_oauth2_token_service_wrapper.h" 15#include "chrome/browser/signin/fake_signin_manager.h" 16#include "chrome/browser/signin/profile_oauth2_token_service.h" 17#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 18#include "chrome/browser/signin/signin_manager.h" 19#include "chrome/browser/signin/signin_manager_factory.h" 20#include "chrome/browser/sync/profile_sync_service_factory.h" 21#include "chrome/browser/sync/profile_sync_service_mock.h" 22#include "chrome/test/base/testing_profile.h" 23#include "content/public/browser/notification_service.h" 24#include "content/public/test/test_browser_thread_bundle.h" 25#include "google_apis/gaia/gaia_constants.h" 26#include "google_apis/gaia/google_service_auth_error.h" 27 28#include "testing/gmock/include/gmock/gmock.h" 29#include "testing/gtest/include/gtest/gtest.h" 30 31using ::testing::_; 32using ::testing::AnyNumber; 33using ::testing::Mock; 34using ::testing::Return; 35using ::testing::ReturnRef; 36 37namespace { 38 39class MockObserver : public SigninTracker::Observer { 40 public: 41 MockObserver() {} 42 ~MockObserver() {} 43 44 MOCK_METHOD1(SigninFailed, void(const GoogleServiceAuthError&)); 45 MOCK_METHOD0(SigninSuccess, void(void)); 46 MOCK_METHOD1(MergeSessionComplete, void(const GoogleServiceAuthError&)); 47}; 48 49} // namespace 50 51class SigninTrackerTest : public testing::Test { 52 public: 53 SigninTrackerTest() {} 54 virtual void SetUp() OVERRIDE { 55 TestingProfile::Builder builder; 56 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), 57 FakeProfileOAuth2TokenServiceWrapper::Build); 58 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::GetInstance()->SetTestingFactoryAndUse( 67 profile_.get(), FakeSigninManagerBase::Build)); 68 69 tracker_.reset(new SigninTracker(profile_.get(), &observer_)); 70 } 71 virtual void TearDown() OVERRIDE { 72 tracker_.reset(); 73 profile_.reset(); 74 } 75 76 content::TestBrowserThreadBundle thread_bundle_; 77 scoped_ptr<SigninTracker> tracker_; 78 scoped_ptr<TestingProfile> profile_; 79 FakeSigninManagerForTesting* mock_signin_manager_; 80 FakeProfileOAuth2TokenService* fake_oauth2_token_service_; 81 MockObserver observer_; 82}; 83 84TEST_F(SigninTrackerTest, SignInFails) { 85 // SIGNIN_FAILED notification should result in a SigninFailed callback. 86 const GoogleServiceAuthError error( 87 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 88 EXPECT_CALL(observer_, SigninSuccess()).Times(0); 89 EXPECT_CALL(observer_, SigninFailed(error)); 90 91 content::NotificationService::current()->Notify( 92 chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED, 93 content::Source<Profile>(profile_.get()), 94 content::Details<const GoogleServiceAuthError>(&error)); 95} 96 97TEST_F(SigninTrackerTest, SignInSucceeds) { 98 EXPECT_CALL(observer_, SigninSuccess()); 99 EXPECT_CALL(observer_, SigninFailed(_)).Times(0); 100 101 mock_signin_manager_->SetAuthenticatedUsername("user@gmail.com"); 102 fake_oauth2_token_service_->IssueRefreshToken("refresh_token"); 103} 104