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.
5 #include "chrome/browser/signin/ubertoken_fetcher.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
9 #include "chrome/browser/signin/fake_signin_manager.h"
10 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
11 #include "chrome/browser/signin/signin_manager_factory.h"
12 #include "chrome/browser/signin/token_service_unittest.h"
13 #include "google_apis/gaia/gaia_constants.h"
14 #include "net/url_request/test_url_fetcher_factory.h"
15 #include "testing/gtest/include/gtest/gtest.h"
19 class MockUbertokenConsumer : public UbertokenConsumer {
21 MockUbertokenConsumer()
22 : nb_correct_token_(0),
23 last_error_(GoogleServiceAuthError::AuthErrorNone()),
26 virtual ~MockUbertokenConsumer() {}
28 virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE {
33 virtual void OnUbertokenFailure(const GoogleServiceAuthError& error)
39 std::string last_token_;
40 int nb_correct_token_;
41 GoogleServiceAuthError last_error_;
47 class UbertokenFetcherTest : public TokenServiceTestHarness {
49 virtual void SetUp() OVERRIDE {
50 TokenServiceTestHarness::SetUp();
51 UpdateCredentialsOnService();
52 fetcher_.reset(new UbertokenFetcher(profile(), &consumer_));
53 CreateSigninManager("test@gmail.com");
56 virtual scoped_ptr<TestingProfile> CreateProfile() OVERRIDE {
57 TestingProfile::Builder builder;
58 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
59 &FakeProfileOAuth2TokenService::Build);
60 return builder.Build().Pass();
63 virtual void TearDown() OVERRIDE {
65 TokenServiceTestHarness::TearDown();
69 net::TestURLFetcherFactory factory_;
70 MockUbertokenConsumer consumer_;
71 scoped_ptr<UbertokenFetcher> fetcher_;
74 TEST_F(UbertokenFetcherTest, Basic) {
77 TEST_F(UbertokenFetcherTest, Success) {
78 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
80 fetcher_->StartFetchingToken();
81 fetcher_->OnGetTokenSuccess(NULL, "accessToken", base::Time());
82 fetcher_->OnUberAuthTokenSuccess("uberToken");
83 EXPECT_EQ(0, consumer_.nb_error_);
84 EXPECT_EQ(1, consumer_.nb_correct_token_);
85 EXPECT_EQ("uberToken", consumer_.last_token_);
88 TEST_F(UbertokenFetcherTest, NoRefreshToken) {
89 fetcher_->StartFetchingToken();
90 GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
91 fetcher_->OnGetTokenFailure(NULL, error);
92 EXPECT_EQ(1, consumer_.nb_error_);
93 EXPECT_EQ(0, consumer_.nb_correct_token_);
96 TEST_F(UbertokenFetcherTest, FailureToGetAccessToken) {
97 GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
99 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
101 fetcher_->StartFetchingToken();
102 fetcher_->OnGetTokenFailure(NULL, error);
104 EXPECT_EQ(1, consumer_.nb_error_);
105 EXPECT_EQ(0, consumer_.nb_correct_token_);
106 EXPECT_EQ("", consumer_.last_token_);
109 TEST_F(UbertokenFetcherTest, FailureToGetUberToken) {
110 GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
112 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
114 fetcher_->StartFetchingToken();
115 fetcher_->OnGetTokenSuccess(NULL, "accessToken", base::Time());
116 fetcher_->OnUberAuthTokenFailure(error);
118 EXPECT_EQ(1, consumer_.nb_error_);
119 EXPECT_EQ(0, consumer_.nb_correct_token_);
120 EXPECT_EQ("", consumer_.last_token_);