1// Copyright (c) 2011 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/common/net/gaia/google_service_auth_error.h"
6
7#include <string>
8
9#include "base/memory/scoped_ptr.h"
10#include "base/values.h"
11#include "chrome/test/values_test_util.h"
12#include "net/base/net_errors.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace {
16
17using test::ExpectStringValue;
18
19class GoogleServiceAuthErrorTest : public testing::Test {};
20
21void TestSimpleState(GoogleServiceAuthError::State state) {
22  GoogleServiceAuthError error(state);
23  scoped_ptr<DictionaryValue> value(error.ToValue());
24  EXPECT_EQ(1u, value->size());
25  std::string state_str;
26  EXPECT_TRUE(value->GetString("state", &state_str));
27  EXPECT_FALSE(state_str.empty());
28  EXPECT_NE("CONNECTION_FAILED", state_str);
29  EXPECT_NE("CAPTCHA_REQUIRED", state_str);
30}
31
32TEST_F(GoogleServiceAuthErrorTest, SimpleToValue) {
33  for (int i = GoogleServiceAuthError::NONE;
34       i <= GoogleServiceAuthError::USER_NOT_SIGNED_UP; ++i) {
35    TestSimpleState(static_cast<GoogleServiceAuthError::State>(i));
36  }
37}
38
39TEST_F(GoogleServiceAuthErrorTest, None) {
40  GoogleServiceAuthError error(GoogleServiceAuthError::None());
41  scoped_ptr<DictionaryValue> value(error.ToValue());
42  EXPECT_EQ(1u, value->size());
43  ExpectStringValue("NONE", *value, "state");
44}
45
46TEST_F(GoogleServiceAuthErrorTest, ConnectionFailed) {
47  GoogleServiceAuthError error(
48      GoogleServiceAuthError::FromConnectionError(net::OK));
49  scoped_ptr<DictionaryValue> value(error.ToValue());
50  EXPECT_EQ(2u, value->size());
51  ExpectStringValue("CONNECTION_FAILED", *value, "state");
52  ExpectStringValue("net::OK", *value, "networkError");
53}
54
55TEST_F(GoogleServiceAuthErrorTest, CaptchaChallenge) {
56  GoogleServiceAuthError error(
57      GoogleServiceAuthError::FromCaptchaChallenge(
58          "captcha_token", GURL("http://www.google.com"),
59          GURL("http://www.bing.com")));
60  scoped_ptr<DictionaryValue> value(error.ToValue());
61  EXPECT_EQ(2u, value->size());
62  ExpectStringValue("CAPTCHA_REQUIRED", *value, "state");
63  DictionaryValue* captcha_value = NULL;
64  EXPECT_TRUE(value->GetDictionary("captcha", &captcha_value));
65  ASSERT_TRUE(captcha_value);
66  ExpectStringValue("captcha_token", *captcha_value, "token");
67  ExpectStringValue("http://www.google.com/", *captcha_value, "imageUrl");
68  ExpectStringValue("http://www.bing.com/", *captcha_value, "unlockUrl");
69}
70
71}  // namespace
72