blob: b92a01fbb8ad201c5dcb0a182e5191337f333ba4 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/settings/chromeos/bluetooth_handler.h"
#include "content/public/test/test_web_ui.h"
#include "device/bluetooth/bluetooth_adapter_factory.h"
#include "device/bluetooth/test/mock_bluetooth_adapter.h"
#include "device/bluetooth/test/mock_bluetooth_device.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace settings {
namespace {
const char kDeviceAddress[] = "12:34:56:78:90:12";
class TestBluetoothHandler : public BluetoothHandler {
public:
TestBluetoothHandler() : BluetoothHandler() {}
~TestBluetoothHandler() override = default;
// Make public for testing.
using BluetoothHandler::AllowJavascript;
using BluetoothHandler::RegisterMessages;
using BluetoothHandler::set_web_ui;
};
} // namespace
class BluetoothHandlerTest : public testing::Test {
protected:
BluetoothHandlerTest() {}
BluetoothHandlerTest(const BluetoothHandlerTest&) = delete;
BluetoothHandlerTest& operator=(const BluetoothHandlerTest&) = delete;
~BluetoothHandlerTest() override = default;
// testing::Test:
void SetUp() override {
mock_adapter_ = new testing::NiceMock<device::MockBluetoothAdapter>();
device::BluetoothAdapterFactory::SetAdapterForTesting(mock_adapter_);
mock_device_ =
std::make_unique<testing::NiceMock<device::MockBluetoothDevice>>(
mock_adapter_.get(), /*bluetooth_class=*/0,
/*name=*/"Bluetooth 2.0 Mouse", kDeviceAddress, /*paired=*/false,
/*connected=*/false);
EXPECT_CALL(*mock_adapter_, GetDevice(testing::_))
.WillRepeatedly(testing::Return(mock_device_.get()));
test_web_ui_ = std::make_unique<content::TestWebUI>();
handler_ = std::make_unique<TestBluetoothHandler>();
handler_->set_web_ui(test_web_ui_.get());
handler_->RegisterMessages();
}
content::TestWebUI* test_web_ui() { return test_web_ui_.get(); }
const content::TestWebUI::CallData& CallDataAtIndex(size_t index) {
return *test_web_ui_->call_data()[index];
}
std::unique_ptr<device::MockBluetoothDevice> mock_device_;
private:
scoped_refptr<testing::NiceMock<device::MockBluetoothAdapter>> mock_adapter_;
std::unique_ptr<content::TestWebUI> test_web_ui_;
std::unique_ptr<TestBluetoothHandler> handler_;
};
TEST_F(BluetoothHandlerTest, GetIsDeviceBlockedByPolicy) {
mock_device_->SetIsBlockedByPolicy(true);
size_t call_data_count_before_call = test_web_ui()->call_data().size();
base::Value args(base::Value::Type::LIST);
args.Append("handlerFunctionName");
args.Append(kDeviceAddress);
test_web_ui()->HandleReceivedMessage("isDeviceBlockedByPolicy",
&base::Value::AsListValue(args));
ASSERT_EQ(call_data_count_before_call + 1u,
test_web_ui()->call_data().size());
const content::TestWebUI::CallData& call_data =
CallDataAtIndex(call_data_count_before_call);
EXPECT_EQ("cr.webUIResponse", call_data.function_name());
EXPECT_EQ("handlerFunctionName", call_data.arg1()->GetString());
ASSERT_TRUE(call_data.arg2()->GetBool());
EXPECT_TRUE(call_data.arg3()->GetBool());
}
TEST_F(BluetoothHandlerTest, GetRequestFastPairDeviceSupport) {
mock_device_->SetIsBlockedByPolicy(true);
size_t call_data_count_before_call = test_web_ui()->call_data().size();
base::Value args(base::Value::Type::LIST);
test_web_ui()->HandleReceivedMessage("requestFastPairDeviceSupportStatus",
&base::Value::AsListValue(args));
ASSERT_EQ(call_data_count_before_call + 1u,
test_web_ui()->call_data().size());
const content::TestWebUI::CallData& call_data =
CallDataAtIndex(call_data_count_before_call);
EXPECT_EQ("cr.webUIListenerCallback", call_data.function_name());
EXPECT_EQ("fast-pair-device-supported-status", call_data.arg1()->GetString());
EXPECT_FALSE(call_data.arg2()->GetBool());
}
} // namespace settings
} // namespace chromeos