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