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 "chrome/browser/local_discovery/privet_confirm_api_flow.h"
6
7#include <set>
8
9#include "base/json/json_reader.h"
10#include "testing/gmock/include/gmock/gmock.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13using testing::StrictMock;
14using testing::_;
15
16namespace local_discovery {
17
18namespace {
19
20const char kSampleConfirmResponse[] = "{"
21    "   \"success\": true"
22    "}";
23
24const char kFailedConfirmResponse[] = "{"
25    "   \"success\": false"
26    "}";
27
28TEST(PrivetConfirmApiFlowTest, Params) {
29  PrivetConfirmApiCallFlow confirmation(
30      "123", PrivetConfirmApiCallFlow::ResponseCallback());
31  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=123"),
32            confirmation.GetURL());
33  EXPECT_EQ("https://www.googleapis.com/auth/cloudprint",
34            confirmation.GetOAuthScope());
35  EXPECT_EQ(net::URLFetcher::GET, confirmation.GetRequestType());
36  EXPECT_FALSE(confirmation.GetExtraRequestHeaders().empty());
37}
38
39class MockDelegate {
40 public:
41  MOCK_METHOD1(Callback, void(GCDApiFlow::Status));
42};
43
44TEST(PrivetConfirmApiFlowTest, Parsing) {
45  StrictMock<MockDelegate> delegate;
46  PrivetConfirmApiCallFlow confirmation(
47      "123", base::Bind(&MockDelegate::Callback, base::Unretained(&delegate)));
48  EXPECT_CALL(delegate, Callback(GCDApiFlow::SUCCESS)).Times(1);
49
50  scoped_ptr<base::Value> value(base::JSONReader::Read(kSampleConfirmResponse));
51  const base::DictionaryValue* dictionary = NULL;
52  ASSERT_TRUE(value->GetAsDictionary(&dictionary));
53  confirmation.OnGCDAPIFlowComplete(*dictionary);
54
55  EXPECT_CALL(delegate, Callback(GCDApiFlow::ERROR_FROM_SERVER)).Times(1);
56
57  value.reset(base::JSONReader::Read(kFailedConfirmResponse));
58  ASSERT_TRUE(value->GetAsDictionary(&dictionary));
59  confirmation.OnGCDAPIFlowComplete(*dictionary);
60}
61
62}  // namespace
63
64}  // namespace local_discovery
65