blob: 0c66091270750c2e96226cd85563c9a780d1f0f9 [file]
// Copyright 2020 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 "chromeos/components/phonehub/cros_state_sender.h"
#include <memory>
#include "chromeos/components/phonehub/fake_connection_manager.h"
#include "chromeos/components/phonehub/fake_message_sender.h"
#include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace phonehub {
using multidevice_setup::mojom::Feature;
using multidevice_setup::mojom::FeatureState;
class CrosStateSenderTest : public testing::Test {
protected:
CrosStateSenderTest() = default;
~CrosStateSenderTest() override = default;
CrosStateSenderTest(const CrosStateSender&) = delete;
CrosStateSenderTest& operator=(const CrosStateSender&) = delete;
// testing::Test:
void SetUp() override {
fake_message_sender_ = std::make_unique<FakeMessageSender>();
fake_connection_manager_ = std::make_unique<FakeConnectionManager>();
fake_multidevice_setup_client_ =
std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>();
cros_state_sender_ = std::make_unique<CrosStateSender>(
fake_message_sender_.get(), fake_connection_manager_.get(),
fake_multidevice_setup_client_.get());
}
std::unique_ptr<FakeMessageSender> fake_message_sender_;
std::unique_ptr<FakeConnectionManager> fake_connection_manager_;
std::unique_ptr<multidevice_setup::FakeMultiDeviceSetupClient>
fake_multidevice_setup_client_;
private:
std::unique_ptr<CrosStateSender> cros_state_sender_;
};
TEST_F(CrosStateSenderTest, UpdatesOnConnected) {
// Set notification feature to be enabled.
fake_multidevice_setup_client_->SetFeatureState(
Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser);
// Expect no new messages since connection has not been established.
EXPECT_EQ(0u, fake_message_sender_->GetCrosStateCallCount());
// Update connection state to connecting.
fake_connection_manager_->SetStatus(ConnectionManager::Status::kConnecting);
// Connecting state does not trigger a request message.
EXPECT_EQ(0u, fake_message_sender_->GetCrosStateCallCount());
// Simulate connected state. Expect a new message to be sent.
fake_connection_manager_->SetStatus(ConnectionManager::Status::kConnected);
EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount());
// Simulate disconnected state, this should not trigger a new request.
fake_connection_manager_->SetStatus(ConnectionManager::Status::kDisconnected);
EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount());
}
TEST_F(CrosStateSenderTest, NotificationFeatureStateChanged) {
// Set connection state to be connected.
fake_connection_manager_->SetStatus(ConnectionManager::Status::kConnected);
// Expect new messages to be sent when connection state is connected.
EXPECT_FALSE(fake_message_sender_->GetRecentCrosState());
EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount());
// Simulate enabling notification feature state and expect cros state to be
// enabled.
fake_multidevice_setup_client_->SetFeatureState(
Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser);
EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
EXPECT_EQ(2u, fake_message_sender_->GetCrosStateCallCount());
// Update a different feature state and expect that it did not affect the
// cros state.
fake_multidevice_setup_client_->SetFeatureState(
Feature::kSmartLock, FeatureState::kDisabledByUser);
EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
EXPECT_EQ(3u, fake_message_sender_->GetCrosStateCallCount());
// Simulate disabling notification feature state and expect cros state to be
// disabled.
fake_multidevice_setup_client_->SetFeatureState(
Feature::kPhoneHubNotifications, FeatureState::kDisabledByUser);
EXPECT_FALSE(fake_message_sender_->GetRecentCrosState());
EXPECT_EQ(4u, fake_message_sender_->GetCrosStateCallCount());
}
} // namespace phonehub
} // namespace chromeos