Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / components / autofill / content / browser / wallet / wallet_signin_helper_unittest.cc
1 // Copyright 2013 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 "components/autofill/content/browser/wallet/wallet_signin_helper.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h"
11 #include "base/strings/stringprintf.h"
12 #include "components/autofill/content/browser/wallet/wallet_service_url.h"
13 #include "components/autofill/content/browser/wallet/wallet_signin_helper_delegate.h"
14 #include "content/public/browser/cookie_store_factory.h"
15 #include "content/public/test/test_browser_thread_bundle.h"
16 #include "google_apis/gaia/gaia_constants.h"
17 #include "google_apis/gaia/gaia_urls.h"
18 #include "google_apis/gaia/google_service_auth_error.h"
19 #include "net/cookies/canonical_cookie.h"
20 #include "net/cookies/cookie_monster.h"
21 #include "net/cookies/cookie_options.h"
22 #include "net/http/http_status_code.h"
23 #include "net/url_request/test_url_fetcher_factory.h"
24 #include "net/url_request/url_request.h"
25 #include "net/url_request/url_request_context.h"
26 #include "net/url_request/url_request_context_getter.h"
27 #include "net/url_request/url_request_status.h"
28 #include "net/url_request/url_request_test_util.h"
29 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h"
31
32 using testing::_;
33
34 namespace autofill {
35 namespace wallet {
36
37 namespace {
38
39 class MockWalletSigninHelperDelegate : public WalletSigninHelperDelegate {
40  public:
41   MOCK_METHOD0(OnPassiveSigninSuccess, void());
42   MOCK_METHOD1(OnPassiveSigninFailure,
43                void(const GoogleServiceAuthError& error));
44   MOCK_METHOD1(OnDidFetchWalletCookieValue,
45                void(const std::string& cookie_value));
46 };
47
48 }  // namespace
49
50 class WalletSigninHelperTest : public testing::Test {
51  protected:
52   WalletSigninHelperTest()
53       : request_context_(new net::TestURLRequestContextGetter(
54             base::MessageLoopProxy::current())) {}
55   virtual ~WalletSigninHelperTest() {}
56
57   virtual void SetUp() OVERRIDE {
58     signin_helper_.reset(
59         new WalletSigninHelper(&mock_delegate_, request_context_.get()));
60   }
61
62   virtual void TearDown() OVERRIDE {
63     signin_helper_.reset();
64   }
65
66   // Sets up a response for the mock URLFetcher and completes the request.
67   void SetUpFetcherResponseAndCompleteRequest(
68       const std::string& url,
69       int response_code,
70       const net::ResponseCookies& cookies,
71       const std::string& response_string) {
72     net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
73     ASSERT_TRUE(fetcher);
74     ASSERT_TRUE(fetcher->delegate());
75
76     fetcher->set_url(GURL(url));
77     fetcher->set_status(net::URLRequestStatus());
78     fetcher->set_response_code(response_code);
79     fetcher->SetResponseString(response_string);
80     fetcher->set_cookies(cookies);
81     fetcher->delegate()->OnURLFetchComplete(fetcher);
82   }
83
84   void MockSuccessfulPassiveSignInResponse() {
85     SetUpFetcherResponseAndCompleteRequest(wallet::GetPassiveAuthUrl(0).spec(),
86                                            net::HTTP_OK,
87                                            net::ResponseCookies(),
88                                            "YES");
89   }
90
91   void MockFailedPassiveSignInResponseNo() {
92     SetUpFetcherResponseAndCompleteRequest(wallet::GetPassiveAuthUrl(0).spec(),
93                                            net::HTTP_OK,
94                                            net::ResponseCookies(),
95                                            "NOOOOOOOOOOOOOOO");
96   }
97
98   void MockFailedPassiveSignInResponse404() {
99     SetUpFetcherResponseAndCompleteRequest(wallet::GetPassiveAuthUrl(0).spec(),
100                                            net::HTTP_NOT_FOUND,
101                                            net::ResponseCookies(),
102                                            std::string());
103   }
104
105   content::TestBrowserThreadBundle thread_bundle_;
106   scoped_ptr<WalletSigninHelper> signin_helper_;
107   MockWalletSigninHelperDelegate mock_delegate_;
108   scoped_refptr<net::TestURLRequestContextGetter> request_context_;
109
110  private:
111   net::TestURLFetcherFactory factory_;
112 };
113
114 TEST_F(WalletSigninHelperTest, PassiveSigninSuccessful) {
115   EXPECT_CALL(mock_delegate_, OnPassiveSigninSuccess());
116   signin_helper_->StartPassiveSignin(0);
117   MockSuccessfulPassiveSignInResponse();
118 }
119
120 TEST_F(WalletSigninHelperTest, PassiveSigninFailedSignin404) {
121   EXPECT_CALL(mock_delegate_, OnPassiveSigninFailure(_));
122   signin_helper_->StartPassiveSignin(0);
123   MockFailedPassiveSignInResponse404();
124 }
125
126 TEST_F(WalletSigninHelperTest, PassiveSigninFailedSigninNo) {
127   EXPECT_CALL(mock_delegate_, OnPassiveSigninFailure(_));
128   signin_helper_->StartPassiveSignin(0);
129   MockFailedPassiveSignInResponseNo();
130 }
131
132 TEST_F(WalletSigninHelperTest, GetWalletCookieValueWhenPresent) {
133   EXPECT_CALL(mock_delegate_, OnDidFetchWalletCookieValue("gdToken"));
134   net::CookieMonster* cookie_monster =
135       content::CreateCookieStore(content::CookieStoreConfig())->
136           GetCookieMonster();
137   net::CookieOptions httponly_options;
138   httponly_options.set_include_httponly();
139   scoped_ptr<net::CanonicalCookie> cookie(
140       net::CanonicalCookie::Create(GetPassiveAuthUrl(0).GetWithEmptyPath(),
141                                    "gdToken=gdToken; HttpOnly",
142                                    base::Time::Now(),
143                                    httponly_options));
144
145   net::CookieList cookie_list;
146   cookie_list.push_back(*cookie);
147   cookie_monster->ImportCookies(cookie_list);
148   request_context_->GetURLRequestContext()
149       ->set_cookie_store(cookie_monster);
150   signin_helper_->StartWalletCookieValueFetch();
151   base::RunLoop().RunUntilIdle();
152 }
153
154 TEST_F(WalletSigninHelperTest, GetWalletCookieValueWhenMissing) {
155   EXPECT_CALL(mock_delegate_, OnDidFetchWalletCookieValue(std::string()));
156   net::CookieMonster* cookie_monster =
157       content::CreateCookieStore(content::CookieStoreConfig())->
158           GetCookieMonster();
159   net::CookieOptions httponly_options;
160   httponly_options.set_include_httponly();
161   scoped_ptr<net::CanonicalCookie> cookie(
162       net::CanonicalCookie::Create(GetPassiveAuthUrl(0).GetWithEmptyPath(),
163                                    "fake_cookie=monkeys; HttpOnly",
164                                    base::Time::Now(),
165                                    httponly_options));
166
167   net::CookieList cookie_list;
168   cookie_list.push_back(*cookie);
169   cookie_monster->ImportCookies(cookie_list);
170   request_context_->GetURLRequestContext()
171       ->set_cookie_store(cookie_monster);
172   signin_helper_->StartWalletCookieValueFetch();
173   base::RunLoop().RunUntilIdle();
174 }
175
176 // TODO(aruslan): http://crbug.com/188317 Need more tests.
177
178 }  // namespace wallet
179 }  // namespace autofill