blob: eb955b41b5f250e2a90435bfdc28b705d118c43e [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()
22 : SharingMessageSender(nullptr, nullptr, nullptr) {}
23 ~MockSharingMessageSender() override = default;
Alex Chau4fded64e2019-07-17 16:21:5124
Himanshu Jaju63dbf1722019-10-30 09:55:5425 MOCK_METHOD3(
Himanshu Jajua69dbe52019-11-04 19:58:0526 OnAckReceived,
Himanshu Jaju63dbf1722019-10-30 09:55:5427 void(chrome_browser_sharing::MessageType message_type,
28 const std::string& fcm_message_id,
Himanshu Jajua69dbe52019-11-04 19:58:0529 std::unique_ptr<chrome_browser_sharing::ResponseMessage> response));
Alex Chau4fded64e2019-07-17 16:21:5130
31 private:
Himanshu Jajua69dbe52019-11-04 19:58:0532 DISALLOW_COPY_AND_ASSIGN(MockSharingMessageSender);
Alex Chau4fded64e2019-07-17 16:21:5133};
34
Peter Kastingc11cb0a2019-10-07 11:15:2235class AckMessageHandlerTest : public testing::Test {
Alex Chau4fded64e2019-07-17 16:21:5136 protected:
Alex Chaue1bc15162019-10-24 10:55:4037 AckMessageHandlerTest()
Himanshu Jaju63dbf1722019-10-30 09:55:5438 : ack_message_handler_(&mock_response_callback_helper_) {}
Alex Chau4fded64e2019-07-17 16:21:5139
Himanshu Jajua69dbe52019-11-04 19:58:0540 testing::NiceMock<MockSharingMessageSender> mock_response_callback_helper_;
Alex Chaue1bc15162019-10-24 10:55:4041 AckMessageHandler ack_message_handler_;
Alex Chau4fded64e2019-07-17 16:21:5142};
43
Himanshu Jaju63dbf1722019-10-30 09:55:5444MATCHER_P(ProtoEquals, message, "") {
45 if (!arg)
46 return false;
47
Alex Chaue1bc15162019-10-24 10:55:4048 std::string expected_serialized, actual_serialized;
Himanshu Jaju63dbf1722019-10-30 09:55:5449 message.SerializeToString(&expected_serialized);
50 arg->SerializeToString(&actual_serialized);
Alex Chaue1bc15162019-10-24 10:55:4051 return expected_serialized == actual_serialized;
52}
53
Alex Chau4fded64e2019-07-17 16:21:5154} // namespace
55
Alex Chaue1bc15162019-10-24 10:55:4056TEST_F(AckMessageHandlerTest, OnMessageNoResponse) {
Peter Kastingc11cb0a2019-10-07 11:15:2257 chrome_browser_sharing::SharingMessage sharing_message;
Alex Chau4fded64e2019-07-17 16:21:5158 sharing_message.mutable_ack_message()->set_original_message_id(
59 kTestMessageId);
Michael van Ouwerkerk9b862692019-10-17 08:55:2560 sharing_message.mutable_ack_message()->set_original_message_type(
61 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
Alex Chau4fded64e2019-07-17 16:21:5162
Alex Chaue1bc15162019-10-24 10:55:4063 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5464 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
65
Himanshu Jajua69dbe52019-11-04 19:58:0566 EXPECT_CALL(
67 mock_response_callback_helper_,
68 OnAckReceived(testing::Eq(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE),
69 testing::Eq(kTestMessageId), testing::Eq(nullptr)));
Alex Chaue1bc15162019-10-24 10:55:4070
71 ack_message_handler_.OnMessage(std::move(sharing_message),
72 done_callback.Get());
Alex Chaue1bc15162019-10-24 10:55:4073}
74
75TEST_F(AckMessageHandlerTest, OnMessageWithResponse) {
Alex Chaue1bc15162019-10-24 10:55:4076 chrome_browser_sharing::SharingMessage sharing_message;
77 sharing_message.mutable_ack_message()->set_original_message_id(
78 kTestMessageId);
79 sharing_message.mutable_ack_message()->set_original_message_type(
80 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
81 sharing_message.mutable_ack_message()->mutable_response_message();
82
83 chrome_browser_sharing::ResponseMessage response_message_copy =
84 sharing_message.ack_message().response_message();
85
86 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5487 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
88
89 EXPECT_CALL(
90 mock_response_callback_helper_,
Himanshu Jajua69dbe52019-11-04 19:58:0591 OnAckReceived(testing::Eq(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE),
92 testing::Eq(kTestMessageId),
93 ProtoEquals(response_message_copy)));
Alex Chaue1bc15162019-10-24 10:55:4094
95 ack_message_handler_.OnMessage(std::move(sharing_message),
96 done_callback.Get());
Alex Chau4fded64e2019-07-17 16:21:5197}