blob: 2e8b832cf007c0aff69fc3deea64bb01f019367b [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
Richard Knoll5f8a4022020-01-15 17:08:1427 MOCK_METHOD2(
Himanshu Jajua69dbe52019-11-04 19:58:0528 OnAckReceived,
Richard Knoll5f8a4022020-01-15 17:08:1429 void(const std::string& fcm_message_id,
Himanshu Jajua69dbe52019-11-04 19:58:0530 std::unique_ptr<chrome_browser_sharing::ResponseMessage> response));
Alex Chau4fded64e2019-07-17 16:21:5131
32 private:
Himanshu Jajua69dbe52019-11-04 19:58:0533 DISALLOW_COPY_AND_ASSIGN(MockSharingMessageSender);
Alex Chau4fded64e2019-07-17 16:21:5134};
35
Peter Kastingc11cb0a2019-10-07 11:15:2236class AckMessageHandlerTest : public testing::Test {
Alex Chau4fded64e2019-07-17 16:21:5137 protected:
Alex Chaue1bc15162019-10-24 10:55:4038 AckMessageHandlerTest()
Himanshu Jaju63dbf1722019-10-30 09:55:5439 : ack_message_handler_(&mock_response_callback_helper_) {}
Alex Chau4fded64e2019-07-17 16:21:5140
Himanshu Jajua69dbe52019-11-04 19:58:0541 testing::NiceMock<MockSharingMessageSender> mock_response_callback_helper_;
Alex Chaue1bc15162019-10-24 10:55:4042 AckMessageHandler ack_message_handler_;
Alex Chau4fded64e2019-07-17 16:21:5143};
44
Himanshu Jaju63dbf1722019-10-30 09:55:5445MATCHER_P(ProtoEquals, message, "") {
46 if (!arg)
47 return false;
48
Alex Chaue1bc15162019-10-24 10:55:4049 std::string expected_serialized, actual_serialized;
Himanshu Jaju63dbf1722019-10-30 09:55:5450 message.SerializeToString(&expected_serialized);
51 arg->SerializeToString(&actual_serialized);
Alex Chaue1bc15162019-10-24 10:55:4052 return expected_serialized == actual_serialized;
53}
54
Alex Chau4fded64e2019-07-17 16:21:5155} // namespace
56
Alex Chaue1bc15162019-10-24 10:55:4057TEST_F(AckMessageHandlerTest, OnMessageNoResponse) {
Peter Kastingc11cb0a2019-10-07 11:15:2258 chrome_browser_sharing::SharingMessage sharing_message;
Alex Chau4fded64e2019-07-17 16:21:5159 sharing_message.mutable_ack_message()->set_original_message_id(
60 kTestMessageId);
61
Alex Chaue1bc15162019-10-24 10:55:4062 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5463 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
64
Richard Knoll5f8a4022020-01-15 17:08:1465 EXPECT_CALL(mock_response_callback_helper_,
66 OnAckReceived(testing::Eq(kTestMessageId), testing::Eq(nullptr)));
Alex Chaue1bc15162019-10-24 10:55:4067
68 ack_message_handler_.OnMessage(std::move(sharing_message),
69 done_callback.Get());
Alex Chaue1bc15162019-10-24 10:55:4070}
71
72TEST_F(AckMessageHandlerTest, OnMessageWithResponse) {
Alex Chaue1bc15162019-10-24 10:55:4073 chrome_browser_sharing::SharingMessage sharing_message;
74 sharing_message.mutable_ack_message()->set_original_message_id(
75 kTestMessageId);
Alex Chaue1bc15162019-10-24 10:55:4076 sharing_message.mutable_ack_message()->mutable_response_message();
77
78 chrome_browser_sharing::ResponseMessage response_message_copy =
79 sharing_message.ack_message().response_message();
80
81 base::MockCallback<SharingMessageHandler::DoneCallback> done_callback;
Himanshu Jaju63dbf1722019-10-30 09:55:5482 EXPECT_CALL(done_callback, Run(testing::Eq(nullptr)));
83
Richard Knoll5f8a4022020-01-15 17:08:1484 EXPECT_CALL(mock_response_callback_helper_,
85 OnAckReceived(testing::Eq(kTestMessageId),
86 ProtoEquals(response_message_copy)));
Alex Chaue1bc15162019-10-24 10:55:4087
88 ack_message_handler_.OnMessage(std::move(sharing_message),
89 done_callback.Get());
Alex Chau4fded64e2019-07-17 16:21:5190}