blob: 9cabf0e253edb2f5fd4c94f95c4448500a942473 [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 "chromeos/components/eche_app_ui/eche_notification_click_handler.h"
#include <string>
#include "ash/constants/ash_features.h"
#include "base/bind.h"
#include "base/test/scoped_feature_list.h"
#include "chromeos/components/eche_app_ui/fake_feature_status_provider.h"
#include "chromeos/components/phonehub/fake_phone_hub_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace eche_app {
class EcheNotificationClickHandlerTest : public testing::Test {
protected:
EcheNotificationClickHandlerTest() = default;
EcheNotificationClickHandlerTest(const EcheNotificationClickHandlerTest&) =
delete;
EcheNotificationClickHandlerTest& operator=(
const EcheNotificationClickHandlerTest&) = delete;
~EcheNotificationClickHandlerTest() override = default;
// testing::Test:
void SetUp() override {
fake_phone_hub_manager_.fake_feature_status_provider()->SetStatus(
phonehub::FeatureStatus::kEnabledAndConnected);
fake_feature_status_provider_.SetStatus(FeatureStatus::kIneligible);
scoped_feature_list_.InitWithFeatures({features::kEcheSWA}, {});
handler_ = std::make_unique<EcheNotificationClickHandler>(
&fake_phone_hub_manager_, &fake_feature_status_provider_,
base::BindRepeating(
&EcheNotificationClickHandlerTest::FakeLaunchEcheAppFunction,
base::Unretained(this)),
base::BindRepeating(
&EcheNotificationClickHandlerTest::FakeCloseEcheAppFunction,
base::Unretained(this)));
}
void FakeLaunchEcheAppFunction(int64_t notification_id,
std::string package_name) {
// Do nothing.
}
void FakeCloseEcheAppFunction() { close_eche_is_called_ = true; }
void SetStatus(FeatureStatus status) {
fake_feature_status_provider_.SetStatus(status);
}
size_t GetNumberOfClickHandlers() {
return fake_phone_hub_manager_.fake_notification_interaction_handler()
->notification_click_handler_count();
}
bool getCloseEcheAppFlag() { return close_eche_is_called_; }
void resetCloseEcheAppFlag() { close_eche_is_called_ = false; }
private:
phonehub::FakePhoneHubManager fake_phone_hub_manager_;
base::test::ScopedFeatureList scoped_feature_list_;
eche_app::FakeFeatureStatusProvider fake_feature_status_provider_;
std::unique_ptr<EcheNotificationClickHandler> handler_;
bool close_eche_is_called_;
};
TEST_F(EcheNotificationClickHandlerTest, StatusChangeTransitions) {
EXPECT_EQ(0u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDisabled);
EXPECT_EQ(0u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDisconnected);
EXPECT_EQ(1u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kConnecting);
EXPECT_EQ(1u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kConnected);
EXPECT_EQ(1u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kIneligible);
EXPECT_EQ(0u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDisconnected);
EXPECT_EQ(1u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDisabled);
EXPECT_EQ(0u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDisconnected);
EXPECT_EQ(1u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDependentFeature);
EXPECT_EQ(0u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDisconnected);
EXPECT_EQ(1u, GetNumberOfClickHandlers());
SetStatus(FeatureStatus::kDependentFeaturePending);
EXPECT_EQ(0u, GetNumberOfClickHandlers());
}
TEST_F(EcheNotificationClickHandlerTest,
StatusChangeTransitionsAndCloseEcheWindow) {
SetStatus(FeatureStatus::kDisconnected);
SetStatus(FeatureStatus::kIneligible);
EXPECT_EQ(true, getCloseEcheAppFlag());
resetCloseEcheAppFlag();
SetStatus(FeatureStatus::kDisconnected);
SetStatus(FeatureStatus::kDisabled);
EXPECT_EQ(true, getCloseEcheAppFlag());
resetCloseEcheAppFlag();
SetStatus(FeatureStatus::kDisconnected);
SetStatus(FeatureStatus::kDependentFeature);
EXPECT_EQ(true, getCloseEcheAppFlag());
resetCloseEcheAppFlag();
SetStatus(FeatureStatus::kDisconnected);
SetStatus(FeatureStatus::kDependentFeaturePending);
EXPECT_EQ(false, getCloseEcheAppFlag());
}
} // namespace eche_app
} // namespace chromeos