blob: c69305a3ea24d26c61653a269269f5e317d90ec8 [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"
Alex Chau4fded64e2019-07-17 16:21:5110#include "chrome/browser/sharing/proto/sharing_message.pb.h"
Alex Chaue1bc15162019-10-24 10:55:4011#include "testing/gmock/include/gmock/gmock.h"
Alex Chau4fded64e2019-07-17 16:21:5112#include "testing/gtest/include/gtest/gtest.h"
13
Alex Chau4fded64e2019-07-17 16:21:5114namespace {
Himanshu Jaju63dbf1722019-10-30 09:55:5415constexpr char kTestMessageId[] = "test_message_id";
Alex Chau4fded64e2019-07-17 16:21:5116
Himanshu Jaju63dbf1722019-10-30 09:55:5417class MockResponseCallbackHelper : public ResponseCallbackHelper {
Alex Chau4fded64e2019-07-17 16:21:5118 public:
Himanshu Jaju63dbf1722019-10-30 09:55:5419 MockResponseCallbackHelper() = default;
20 ~MockResponseCallbackHelper() override = default;
Alex Chau4fded64e2019-07-17 16:21:5121
Himanshu Jaju63dbf1722019-10-30 09:55:5422 MOCK_METHOD3(
23 OnFCMAckReceived,
24 void(chrome_browser_sharing::MessageType message_type,
25 const std::string& fcm_message_id,
26 std::unique_ptr<ResponseCallbackHelper::SharingResponseMessage>
27 response));
Alex Chau4fded64e2019-07-17 16:21:5128
29 private:
Himanshu Jaju63dbf1722019-10-30 09:55:5430 DISALLOW_COPY_AND_ASSIGN(MockResponseCallbackHelper);
Alex Chau4fded64e2019-07-17 16:21:5131};
32
Peter Kastingc11cb0a2019-10-07 11:15:2233class AckMessageHandlerTest : public testing::Test {
Alex Chau4fded64e2019-07-17 16:21:5134 protected:
Alex Chaue1bc15162019-10-24 10:55:4035 AckMessageHandlerTest()
Himanshu Jaju63dbf1722019-10-30 09:55:5436 : ack_message_handler_(&mock_response_callback_helper_) {}
Alex Chau4fded64e2019-07-17 16:21:5137
Himanshu Jaju63dbf1722019-10-30 09:55:5438 testing::NiceMock<MockResponseCallbackHelper> mock_response_callback_helper_;
Alex Chaue1bc15162019-10-24 10:55:4039 AckMessageHandler ack_message_handler_;
Alex Chau4fded64e2019-07-17 16:21:5140};
41
Himanshu Jaju63dbf1722019-10-30 09:55:5442MATCHER_P(ProtoEquals, message, "") {
43 if (!arg)
44 return false;
45
Alex Chaue1bc15162019-10-24 10:55:4046 std::string expected_serialized, actual_serialized;
Himanshu Jaju63dbf1722019-10-30 09:55:5447 message.SerializeToString(&expected_serialized);
48 arg->SerializeToString(&actual_serialized);
Alex Chaue1bc15162019-10-24 10:55:4049 return expected_serialized == actual_serialized;
50}
51
Alex Chau4fded64e2019-07-17 16:21:5152} // namespace
53
Alex Chaue1bc15162019-10-24 10:55:4054TEST_F(AckMessageHandlerTest, OnMessageNoResponse) {
Peter Kastingc11cb0a2019-10-07 11:15:2255 chrome_browser_sharing::SharingMessage sharing_message;
Alex Chau4fded64e2019-07-17 16:21:5156 sharing_message.mutable_ack_message()->set_original_message_id(
57 kTestMessageId);
Michael van Ouwerkerk9b862692019-10-17 08:55:2558 sharing_message.mutable_ack_message()->set_original_message_type(
59 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
Alex Chau4fded64e2019-07-17 16:21:5160
Alex Chaue1bc15162019-10-24 10:55:4061 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5462 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
63
64 EXPECT_CALL(mock_response_callback_helper_,
65 OnFCMAckReceived(
66 testing::Eq(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE),
67 testing::Eq(kTestMessageId), testing::Eq(nullptr)));
Alex Chaue1bc15162019-10-24 10:55:4068
69 ack_message_handler_.OnMessage(std::move(sharing_message),
70 done_callback.Get());
Alex Chaue1bc15162019-10-24 10:55:4071}
72
73TEST_F(AckMessageHandlerTest, OnMessageWithResponse) {
Alex Chaue1bc15162019-10-24 10:55:4074 chrome_browser_sharing::SharingMessage sharing_message;
75 sharing_message.mutable_ack_message()->set_original_message_id(
76 kTestMessageId);
77 sharing_message.mutable_ack_message()->set_original_message_type(
78 chrome_browser_sharing::CLICK_TO_CALL_MESSAGE);
79 sharing_message.mutable_ack_message()->mutable_response_message();
80
81 chrome_browser_sharing::ResponseMessage response_message_copy =
82 sharing_message.ack_message().response_message();
83
84 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5485 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
86
87 EXPECT_CALL(
88 mock_response_callback_helper_,
89 OnFCMAckReceived(
90 testing::Eq(chrome_browser_sharing::CLICK_TO_CALL_MESSAGE),
91 testing::Eq(kTestMessageId), ProtoEquals(response_message_copy)));
Alex Chaue1bc15162019-10-24 10:55:4092
93 ack_message_handler_.OnMessage(std::move(sharing_message),
94 done_callback.Get());
Alex Chau4fded64e2019-07-17 16:21:5195}