blob: caa9e26d2ebe6f589c82653ea1976e02db7c0748 [file] [log] [blame]
// Copyright 2018 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/services/multidevice_setup/android_sms_app_installing_status_observer.h"
#include <string>
#include "chromeos/components/multidevice/remote_device_test_util.h"
#include "chromeos/services/multidevice_setup/fake_feature_state_manager.h"
#include "chromeos/services/multidevice_setup/fake_host_status_provider.h"
#include "chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h"
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace multidevice_setup {
namespace {
const char kFakePhoneKey[] = "fake-phone-key";
const char kFakePhoneName[] = "Phony Phone";
} // namespace
class MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest
: public testing::Test {
protected:
MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest() = default;
~MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest() override =
default;
void SetUp() override {
fake_android_sms_app_helper_delegate_ =
std::make_unique<FakeAndroidSmsAppHelperDelegate>();
fake_host_status_provider_ = std::make_unique<FakeHostStatusProvider>();
fake_feature_state_manager_ = std::make_unique<FakeFeatureStateManager>();
android_sms_app_installing_status_observer_ =
AndroidSmsAppInstallingStatusObserver::Factory::Get()->BuildInstance(
fake_host_status_provider_.get(), fake_feature_state_manager_.get(),
fake_android_sms_app_helper_delegate_.get());
SetMessagesFeatureState(mojom::FeatureState::kEnabledByUser);
SetHostWithStatus(mojom::HostStatus::kHostVerified, GetFakePhone());
fake_app_helper_delegate()->Reset();
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
void SetHostWithStatus(
mojom::HostStatus host_status,
const base::Optional<multidevice::RemoteDeviceRef>& host_device) {
fake_host_status_provider_->SetHostWithStatus(host_status, host_device);
}
FakeAndroidSmsAppHelperDelegate* fake_app_helper_delegate() {
return fake_android_sms_app_helper_delegate_.get();
}
multidevice::RemoteDeviceRef GetFakePhone() {
return multidevice::RemoteDeviceRefBuilder()
.SetPublicKey(kFakePhoneKey)
.SetName(kFakePhoneName)
.Build();
}
void SetMessagesFeatureState(mojom::FeatureState feature_state) {
fake_feature_state_manager_->SetFeatureState(mojom::Feature::kMessages,
feature_state);
}
private:
std::unique_ptr<FakeHostStatusProvider> fake_host_status_provider_;
std::unique_ptr<FakeFeatureStateManager> fake_feature_state_manager_;
std::unique_ptr<FakeAndroidSmsAppHelperDelegate>
fake_android_sms_app_helper_delegate_;
std::unique_ptr<AndroidSmsAppInstallingStatusObserver>
android_sms_app_installing_status_observer_;
DISALLOW_COPY_AND_ASSIGN(
MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest);
};
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
InstallsAfterHostPending) {
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kEligibleHostExistsButNoHostSet,
base::nullopt /* host_device */);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(
mojom::HostStatus::kHostSetLocallyButWaitingForBackendConfirmation,
GetFakePhone());
EXPECT_TRUE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
InstallsAfterHostVerified) {
SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
base::nullopt /* host_device */);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kHostVerified, GetFakePhone());
EXPECT_TRUE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
DoesNotInstallsAfterHostVerifiedIfNotAllowed) {
SetMessagesFeatureState(mojom::FeatureState::kProhibitedByPolicy);
fake_app_helper_delegate()->Reset();
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
base::nullopt /* host_device */);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kHostVerified, GetFakePhone());
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
DoesNotInstallsAfterHostVerifiedIfNotSupportedByPhone) {
SetMessagesFeatureState(mojom::FeatureState::kNotSupportedByPhone);
fake_app_helper_delegate()->Reset();
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
base::nullopt /* host_device */);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kHostVerified, GetFakePhone());
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
DoesNotInstallsAfterHostVerifiedIfNotSupportedByChromebook) {
SetMessagesFeatureState(mojom::FeatureState::kNotSupportedByChromebook);
fake_app_helper_delegate()->Reset();
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
base::nullopt /* host_device */);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetHostWithStatus(mojom::HostStatus::kHostVerified, GetFakePhone());
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
InstallsWhenFeatureBecomesEnabled) {
SetMessagesFeatureState(mojom::FeatureState::kNotSupportedByChromebook);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetMessagesFeatureState(mojom::FeatureState::kEnabledByUser);
EXPECT_TRUE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
CleansUpPwaInstallationWhenDisabled) {
SetMessagesFeatureState(mojom::FeatureState::kNotSupportedByChromebook);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetMessagesFeatureState(mojom::FeatureState::kEnabledByUser);
EXPECT_TRUE(fake_app_helper_delegate()->has_installed_app());
EXPECT_TRUE(fake_app_helper_delegate()->is_default_to_persist_cookie_set());
SetMessagesFeatureState(mojom::FeatureState::kDisabledByUser);
EXPECT_TRUE(fake_app_helper_delegate()->has_installed_app());
EXPECT_FALSE(fake_app_helper_delegate()->is_default_to_persist_cookie_set());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
DoesNotInstallWhenFeatureIsDisabledByUser) {
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetMessagesFeatureState(mojom::FeatureState::kDisabledByUser);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
DoesNotInstallWhenSuiteIsDisabledByUser) {
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetMessagesFeatureState(mojom::FeatureState::kUnavailableSuiteDisabled);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
TEST_F(MultiDeviceSetupAndroidSmsAppInstallingStatusObserverTest,
DoesNotInstallIfNotVerified) {
SetHostWithStatus(mojom::HostStatus::kNoEligibleHosts,
base::nullopt /* host_device */);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
SetMessagesFeatureState(mojom::FeatureState::kUnavailableNoVerifiedHost);
EXPECT_FALSE(fake_app_helper_delegate()->has_installed_app());
}
} // namespace multidevice_setup
} // namespace chromeos