blob: dc441980f83b8ceec8799215926ae0aba32a7426 [file] [log] [blame]
Alex Chau4fded64e2019-07-17 16:21:511// Copyright 2019 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/sharing/ack_message_handler.h"
6
Alex Chaue1bc15162019-10-24 10:55:407#include "base/bind_helpers.h"
8#include "base/test/mock_callback.h"
Alex Chau4fded64e2019-07-17 16:21:519#include "chrome/browser/sharing/proto/sharing_message.pb.h"
Alex Chaue1bc15162019-10-24 10:55:4010#include "testing/gmock/include/gmock/gmock.h"
Alex Chau4fded64e2019-07-17 16:21:5111#include "testing/gtest/include/gtest/gtest.h"
12
Alex Chau4fded64e2019-07-17 16:21:5113namespace {
14
Alex Chaue1bc15162019-10-24 10:55:4015class TestObserver {
Alex Chau4fded64e2019-07-17 16:21:5116 public:
Alex Chaue1bc15162019-10-24 10:55:4017 void OnAckReceived(
18 chrome_browser_sharing::MessageType message_type,
19 std::string message_id,
20 std::unique_ptr<chrome_browser_sharing::ResponseMessage> response) {
Michael van Ouwerkerk9b862692019-10-17 08:55:2521 received_message_type_ = message_type;
Alex Chaue1bc15162019-10-24 10:55:4022 received_message_id_ = std::move(message_id);
23 received_response_ = std::move(response);
Alex Chau4fded64e2019-07-17 16:21:5124 }
25
Michael van Ouwerkerk9b862692019-10-17 08:55:2526 chrome_browser_sharing::MessageType received_message_type() const {
27 return received_message_type_;
28 }
29
Alex Chaue1bc15162019-10-24 10:55:4030 const std::string& received_message_id() const {
31 return received_message_id_;
32 }
33
34 const chrome_browser_sharing::ResponseMessage* received_response() const {
35 return received_response_.get();
36 }
Alex Chau4fded64e2019-07-17 16:21:5137
38 private:
Michael van Ouwerkerk9b862692019-10-17 08:55:2539 chrome_browser_sharing::MessageType received_message_type_;
Alex Chau4fded64e2019-07-17 16:21:5140 std::string received_message_id_;
Alex Chaue1bc15162019-10-24 10:55:4041 std::unique_ptr<chrome_browser_sharing::ResponseMessage> received_response_;
Alex Chau4fded64e2019-07-17 16:21:5142};
43
Peter Kastingc11cb0a2019-10-07 11:15:2244class AckMessageHandlerTest : public testing::Test {
Alex Chau4fded64e2019-07-17 16:21:5145 protected:
Alex Chaue1bc15162019-10-24 10:55:4046 AckMessageHandlerTest()
47 : ack_message_handler_(
48 base::BindRepeating(&TestObserver::OnAckReceived,
49 base::Unretained(&test_observer_))) {}
Alex Chau4fded64e2019-07-17 16:21:5150
Alex Chau4fded64e2019-07-17 16:21:5151 TestObserver test_observer_;
Alex Chaue1bc15162019-10-24 10:55:4052 AckMessageHandler ack_message_handler_;
Alex Chau4fded64e2019-07-17 16:21:5153};
54
Alex Chaue1bc15162019-10-24 10:55:4055bool ProtoEquals(const google::protobuf::MessageLite& expected,
56 const google::protobuf::MessageLite& actual) {
57 std::string expected_serialized, actual_serialized;
58 expected.SerializeToString(&expected_serialized);
59 actual.SerializeToString(&actual_serialized);
60 return expected_serialized == actual_serialized;
61}
62
Alex Chau4fded64e2019-07-17 16:21:5163} // namespace
64
Alex Chaue1bc15162019-10-24 10:55:4065TEST_F(AckMessageHandlerTest, OnMessageNoResponse) {
Peter Kastingc11cb0a2019-10-07 11:15:2266 constexpr char kTestMessageId[] = "test_message_id";
67
68 chrome_browser_sharing::SharingMessage sharing_message;
Alex Chau4fded64e2019-07-17 16:21:5169 sharing_message.mutable_ack_message()->set_original_message_id(
70 kTestMessageId);
Michael van Ouwerkerk9b862692019-10-17 08:55:2571 sharing_message.mutable_ack_message()->set_original_message_type(
72 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
Alex Chau4fded64e2019-07-17 16:21:5173
Alex Chaue1bc15162019-10-24 10:55:4074 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
75 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr))).Times(1);
76
77 ack_message_handler_.OnMessage(std::move(sharing_message),
78 done_callback.Get());
Alex Chau4fded64e2019-07-17 16:21:5179
80 EXPECT_EQ(kTestMessageId, test_observer_.received_message_id());
Michael van Ouwerkerk9b862692019-10-17 08:55:2581 EXPECT_EQ(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE,
82 test_observer_.received_message_type());
Alex Chaue1bc15162019-10-24 10:55:4083 EXPECT_FALSE(test_observer_.received_response());
84}
85
86TEST_F(AckMessageHandlerTest, OnMessageWithResponse) {
87 constexpr char kTestMessageId[] = "test_message_id";
88
89 chrome_browser_sharing::SharingMessage sharing_message;
90 sharing_message.mutable_ack_message()->set_original_message_id(
91 kTestMessageId);
92 sharing_message.mutable_ack_message()->set_original_message_type(
93 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
94 sharing_message.mutable_ack_message()->mutable_response_message();
95
96 chrome_browser_sharing::ResponseMessage response_message_copy =
97 sharing_message.ack_message().response_message();
98
99 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
100 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr))).Times(1);
101
102 ack_message_handler_.OnMessage(std::move(sharing_message),
103 done_callback.Get());
104
105 EXPECT_EQ(kTestMessageId, test_observer_.received_message_id());
106 EXPECT_EQ(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE,
107 test_observer_.received_message_type());
108 ASSERT_TRUE(test_observer_.received_response());
109 EXPECT_TRUE(
110 ProtoEquals(response_message_copy, *test_observer_.received_response()));
Alex Chau4fded64e2019-07-17 16:21:51111}