blob: 9d937dad6648d412013d29d12099a95dd6fd1b78 [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
Himanshu Jaju63dbf1722019-10-30 09:55:547#include "base/bind.h"
Alex Chaue1bc15162019-10-24 10:55:408#include "base/bind_helpers.h"
9#include "base/test/mock_callback.h"
Michael van Ouwerkerk741c66522019-12-17 13:51:1310#include "chrome/browser/sharing/proto/sharing_message.pb.h"
Richard Knoll367f2232019-11-14 18:11:3411#include "chrome/browser/sharing/sharing_fcm_sender.h"
Himanshu Jajua69dbe52019-11-04 19:58:0512#include "chrome/browser/sharing/sharing_message_sender.h"
Alex Chaue1bc15162019-10-24 10:55:4013#include "testing/gmock/include/gmock/gmock.h"
Alex Chau4fded64e2019-07-17 16:21:5114#include "testing/gtest/include/gtest/gtest.h"
15
Alex Chau4fded64e2019-07-17 16:21:5116namespace {
Himanshu Jaju63dbf1722019-10-30 09:55:5417constexpr char kTestMessageId[] = "test_message_id";
Alex Chau4fded64e2019-07-17 16:21:5118
Himanshu Jajua69dbe52019-11-04 19:58:0519class MockSharingMessageSender : public SharingMessageSender {
Alex Chau4fded64e2019-07-17 16:21:5120 public:
Himanshu Jajua69dbe52019-11-04 19:58:0521 MockSharingMessageSender()
Richard Knolld17e4062020-01-14 21:23:1422 : SharingMessageSender(
23 /*sync_prefs=*/nullptr,
24 /*local_device_info_provider=*/nullptr) {}
Himanshu Jajua69dbe52019-11-04 19:58:0525 ~MockSharingMessageSender() override = default;
Alex Chau4fded64e2019-07-17 16:21:5126
Himanshu Jaju63dbf1722019-10-30 09:55:5427 MOCK_METHOD3(
Himanshu Jajua69dbe52019-11-04 19:58:0528 OnAckReceived,
Himanshu Jaju63dbf1722019-10-30 09:55:5429 void(chrome_browser_sharing::MessageType message_type,
30 const std::string& fcm_message_id,
Himanshu Jajua69dbe52019-11-04 19:58:0531 std::unique_ptr<chrome_browser_sharing::ResponseMessage> response));
Alex Chau4fded64e2019-07-17 16:21:5132
33 private:
Himanshu Jajua69dbe52019-11-04 19:58:0534 DISALLOW_COPY_AND_ASSIGN(MockSharingMessageSender);
Alex Chau4fded64e2019-07-17 16:21:5135};
36
Peter Kastingc11cb0a2019-10-07 11:15:2237class AckMessageHandlerTest : public testing::Test {
Alex Chau4fded64e2019-07-17 16:21:5138 protected:
Alex Chaue1bc15162019-10-24 10:55:4039 AckMessageHandlerTest()
Himanshu Jaju63dbf1722019-10-30 09:55:5440 : ack_message_handler_(&mock_response_callback_helper_) {}
Alex Chau4fded64e2019-07-17 16:21:5141
Himanshu Jajua69dbe52019-11-04 19:58:0542 testing::NiceMock<MockSharingMessageSender> mock_response_callback_helper_;
Alex Chaue1bc15162019-10-24 10:55:4043 AckMessageHandler ack_message_handler_;
Alex Chau4fded64e2019-07-17 16:21:5144};
45
Himanshu Jaju63dbf1722019-10-30 09:55:5446MATCHER_P(ProtoEquals, message, "") {
47 if (!arg)
48 return false;
49
Alex Chaue1bc15162019-10-24 10:55:4050 std::string expected_serialized, actual_serialized;
Himanshu Jaju63dbf1722019-10-30 09:55:5451 message.SerializeToString(&expected_serialized);
52 arg->SerializeToString(&actual_serialized);
Alex Chaue1bc15162019-10-24 10:55:4053 return expected_serialized == actual_serialized;
54}
55
Alex Chau4fded64e2019-07-17 16:21:5156} // namespace
57
Alex Chaue1bc15162019-10-24 10:55:4058TEST_F(AckMessageHandlerTest, OnMessageNoResponse) {
Peter Kastingc11cb0a2019-10-07 11:15:2259 chrome_browser_sharing::SharingMessage sharing_message;
Alex Chau4fded64e2019-07-17 16:21:5160 sharing_message.mutable_ack_message()->set_original_message_id(
61 kTestMessageId);
Michael van Ouwerkerk9b862692019-10-17 08:55:2562 sharing_message.mutable_ack_message()->set_original_message_type(
63 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
Alex Chau4fded64e2019-07-17 16:21:5164
Alex Chaue1bc15162019-10-24 10:55:4065 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5466 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
67
Himanshu Jajua69dbe52019-11-04 19:58:0568 EXPECT_CALL(
69 mock_response_callback_helper_,
70 OnAckReceived(testing::Eq(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE),
71 testing::Eq(kTestMessageId), testing::Eq(nullptr)));
Alex Chaue1bc15162019-10-24 10:55:4072
73 ack_message_handler_.OnMessage(std::move(sharing_message),
74 done_callback.Get());
Alex Chaue1bc15162019-10-24 10:55:4075}
76
77TEST_F(AckMessageHandlerTest, OnMessageWithResponse) {
Alex Chaue1bc15162019-10-24 10:55:4078 chrome_browser_sharing::SharingMessage sharing_message;
79 sharing_message.mutable_ack_message()->set_original_message_id(
80 kTestMessageId);
81 sharing_message.mutable_ack_message()->set_original_message_type(
82 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
83 sharing_message.mutable_ack_message()->mutable_response_message();
84
85 chrome_browser_sharing::ResponseMessage response_message_copy =
86 sharing_message.ack_message().response_message();
87
88 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5489 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
90
91 EXPECT_CALL(
92 mock_response_callback_helper_,
Himanshu Jajua69dbe52019-11-04 19:58:0593 OnAckReceived(testing::Eq(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE),
94 testing::Eq(kTestMessageId),
95 ProtoEquals(response_message_copy)));
Alex Chaue1bc15162019-10-24 10:55:4096
97 ack_message_handler_.OnMessage(std::move(sharing_message),
98 done_callback.Get());
Alex Chau4fded64e2019-07-17 16:21:5199}