Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / local_discovery / privet_confirm_api_flow_unittest.cc
index 772f71b..19f828a 100644 (file)
@@ -2,21 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "chrome/browser/local_discovery/privet_confirm_api_flow.h"
-#include "content/public/test/test_browser_thread.h"
-#include "google_apis/gaia/fake_oauth2_token_service.h"
-#include "google_apis/gaia/google_service_auth_error.h"
-#include "net/base/host_port_pair.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_request_headers.h"
-#include "net/url_request/test_url_fetcher_factory.h"
-#include "net/url_request/url_request_test_util.h"
+
+#include <set>
+
+#include "base/json/json_reader.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using testing::NiceMock;
+using testing::StrictMock;
+using testing::_;
 
 namespace local_discovery {
 
@@ -30,200 +25,38 @@ const char kFailedConfirmResponse[] = "{"
     "   \"success\": false"
     "}";
 
-const char kFailedConfirmResponseBadJson[] = "["
-    "   \"success\""
-    "]";
-
-const char kGCDConfirmResponse[] =
-    "{"
-    "   \"kind\": \"clouddevices#registrationTicket\""
-    "}";
-
-const char kAccountId[] = "account_id";
-
-class MockableConfirmCallback {
- public:
-  MOCK_METHOD1(ConfirmCallback, void(GCDBaseApiFlow::Status));
-
-  PrivetConfirmApiCallFlow::ResponseCallback callback() {
-    return base::Bind(&MockableConfirmCallback::ConfirmCallback,
-                      base::Unretained(this));
-  }
-};
+TEST(PrivetConfirmApiFlowTest, Params) {
+  PrivetConfirmApiCallFlow confirmation(
+      "123", PrivetConfirmApiCallFlow::ResponseCallback());
+  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=123"),
+            confirmation.GetURL());
+  EXPECT_EQ("https://www.googleapis.com/auth/cloudprint",
+            confirmation.GetOAuthScope());
+  EXPECT_EQ(net::URLFetcher::GET, confirmation.GetRequestType());
+  EXPECT_FALSE(confirmation.GetExtraRequestHeaders().empty());
+}
 
-class PrivetConfirmApiFlowTest : public testing::Test {
+class MockDelegate {
  public:
-  PrivetConfirmApiFlowTest()
-      : ui_thread_(content::BrowserThread::UI,
-                   &loop_),
-        request_context_(new net::TestURLRequestContextGetter(
-            base::MessageLoopProxy::current())),
-        account_id_(kAccountId) {
-    token_service_.set_request_context(request_context_.get());
-    token_service_.AddAccount(account_id_);
-    ui_thread_.Stop();  // HACK: Fake being on the UI thread
-  }
-
-  virtual ~PrivetConfirmApiFlowTest() {
-  }
-
- protected:
-  base::MessageLoopForUI loop_;
-  content::TestBrowserThread ui_thread_;
-  scoped_refptr<net::TestURLRequestContextGetter> request_context_;
-  net::TestURLFetcherFactory fetcher_factory_;
-  FakeOAuth2TokenService token_service_;
-  MockableConfirmCallback callback_;
-  std::string account_id_;
+  MOCK_METHOD1(Callback, void(GCDApiFlow::Status));
 };
 
-TEST_F(PrivetConfirmApiFlowTest, SuccessOAuth2) {
-  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
-                                        &token_service_,
-                                        account_id_,
-                                        true,
-                                        "SomeToken",
-                                        callback_.callback());
-  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
-
-  confirm_flow.Start();
-
-  cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
-  net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
-
-  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"),
-            fetcher->GetOriginalURL());
-
-  net::HttpRequestHeaders headers;
-  fetcher->GetExtraRequestHeaders(&headers);
-  std::string oauth_header;
-  std::string proxy;
-  EXPECT_TRUE(headers.GetHeader("Authorization", &oauth_header));
-  EXPECT_EQ("Bearer SomeToken", oauth_header);
-  EXPECT_TRUE(headers.GetHeader("X-Cloudprint-Proxy", &proxy));
-  EXPECT_EQ("Chrome", proxy);
-
-  fetcher->SetResponseString(kSampleConfirmResponse);
-  fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS,
-                                            net::OK));
-  fetcher->set_response_code(200);
-
-  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS));
-
-  fetcher->delegate()->OnURLFetchComplete(fetcher);
-}
-
-TEST_F(PrivetConfirmApiFlowTest, BadToken) {
-  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
-                                        &token_service_,
-                                        account_id_,
-                                        true,
-                                        "SomeCloudprintToken",
-                                        callback_.callback());
-
-  confirm_flow.Start();
-
-  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
-
-  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_TOKEN));
-  cloudprint_flow->OnGetTokenFailure(NULL, GoogleServiceAuthError(
-      GoogleServiceAuthError::USER_NOT_SIGNED_UP));
-}
-
-TEST_F(PrivetConfirmApiFlowTest, ServerFailure) {
-  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
-                                        &token_service_,
-                                        account_id_,
-                                        true,
-                                        "SomeToken",
-                                        callback_.callback());
-
-  confirm_flow.Start();
-
-  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
-
-  cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
-  net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
-
-  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"),
-            fetcher->GetOriginalURL());
-
-  fetcher->SetResponseString(kFailedConfirmResponse);
-  fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS,
-                                            net::OK));
-  fetcher->set_response_code(200);
-
-  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_FROM_SERVER));
-
-  fetcher->delegate()->OnURLFetchComplete(fetcher);
-}
-
-TEST_F(PrivetConfirmApiFlowTest, BadJson) {
-  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
-                                        &token_service_,
-                                        account_id_,
-                                        true,
-                                        "SomeToken",
-                                        callback_.callback());
-
-  confirm_flow.Start();
-
-  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
-
-  cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
-  net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
-
-  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"),
-            fetcher->GetOriginalURL());
-
-  fetcher->SetResponseString(kFailedConfirmResponseBadJson);
-  fetcher->set_status(net::URLRequestStatus(
-      net::URLRequestStatus::SUCCESS,
-      net::OK));
-  fetcher->set_response_code(200);
-
-  EXPECT_CALL(callback_,
-              ConfirmCallback(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE));
-
-  fetcher->delegate()->OnURLFetchComplete(fetcher);
-}
-
-TEST_F(PrivetConfirmApiFlowTest, SuccessGCD) {
-  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
-                                        &token_service_,
-                                        account_id_,
-                                        false,
-                                        "SomeGcdToken",
-                                        callback_.callback());
-  GCDBaseApiFlow* gcd_flow = confirm_flow.GetBaseApiFlowForTests();
-
-  confirm_flow.Start();
-
-  gcd_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
-  net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
-
-  EXPECT_EQ(GURL("https://www.googleapis.com/clouddevices/v1/"
-                 "registrationTickets/SomeGcdToken"),
-            fetcher->GetOriginalURL());
-
-  EXPECT_EQ("{ \"userEmail\": \"me\" }", fetcher->upload_data());
-
-  net::HttpRequestHeaders headers;
-  fetcher->GetExtraRequestHeaders(&headers);
-  std::string oauth_header;
-  std::string proxy;
-  EXPECT_TRUE(headers.GetHeader("Authorization", &oauth_header));
-  EXPECT_EQ("Bearer SomeToken", oauth_header);
-  EXPECT_FALSE(headers.GetHeader("X-Cloudprint-Proxy", &proxy));
+TEST(PrivetConfirmApiFlowTest, Parsing) {
+  StrictMock<MockDelegate> delegate;
+  PrivetConfirmApiCallFlow confirmation(
+      "123", base::Bind(&MockDelegate::Callback, base::Unretained(&delegate)));
+  EXPECT_CALL(delegate, Callback(GCDApiFlow::SUCCESS)).Times(1);
 
-  fetcher->SetResponseString(kGCDConfirmResponse);
-  fetcher->set_status(
-      net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK));
-  fetcher->set_response_code(200);
+  scoped_ptr<base::Value> value(base::JSONReader::Read(kSampleConfirmResponse));
+  const base::DictionaryValue* dictionary = NULL;
+  ASSERT_TRUE(value->GetAsDictionary(&dictionary));
+  confirmation.OnGCDAPIFlowComplete(*dictionary);
 
-  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS));
+  EXPECT_CALL(delegate, Callback(GCDApiFlow::ERROR_FROM_SERVER)).Times(1);
 
-  fetcher->delegate()->OnURLFetchComplete(fetcher);
+  value.reset(base::JSONReader::Read(kFailedConfirmResponse));
+  ASSERT_TRUE(value->GetAsDictionary(&dictionary));
+  confirmation.OnGCDAPIFlowComplete(*dictionary);
 }
 
 }  // namespace