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