Commit d6f4cd36 authored by Yue Li's avatar Yue Li Committed by Commit Bot

Add unittests for QuickAnswersController

Bug: b/164287576
Test: Run QuickAnswersControllerTest.* in ash_unittests
Change-Id: Id59933ae2535cc485c2515d8e8971b2b85752e21
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2355492
Commit-Queue: Reilly Grant <reillyg@chromium.org>
Auto-Submit: Yue Li <updowndota@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarJeroen Dhollander <jeroendh@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799399}
parent 3fb63bf1
......@@ -1602,6 +1602,7 @@ component("ash") {
"//cc/paint:paint",
"//chromeos/assistant:buildflags",
"//chromeos/components/quick_answers",
"//chromeos/components/quick_answers/public/cpp:prefs",
"//services/viz/public/mojom",
# TODO(https://crbug.com/644336): Make CrasAudioHandler Chrome or Ash only.
......@@ -1933,6 +1934,7 @@ test("ash_unittests") {
"power/hfp_battery_listener_unittest.cc",
"power/hid_battery_listener_unittest.cc",
"power/hid_battery_util_unittest.cc",
"quick_answers/quick_answers_controller_unittest.cc",
"quick_answers/quick_answers_ui_controller_unittest.cc",
"quick_answers/ui/quick_answers_view_unittest.cc",
"root_window_controller_unittest.cc",
......@@ -2184,6 +2186,7 @@ test("ash_unittests") {
# TODO(https://crbug.com/644336): Make CrasAudioHandler Chrome or Ash only.
"//chromeos/audio",
"//chromeos/components/quick_answers:quick_answers",
"//chromeos/constants",
"//chromeos/dbus:test_support",
"//chromeos/dbus/audio",
......@@ -2223,6 +2226,7 @@ test("ash_unittests") {
"//services/media_session/public/cpp/test:test_support",
"//services/media_session/public/mojom",
"//services/metrics/public/cpp:ukm_builders",
"//services/network:test_support",
"//skia",
"//testing/gmock",
"//testing/gtest",
......
......@@ -32,6 +32,7 @@ include_rules = [
"+services/data_decoder/public",
"+services/media_session/public",
"+services/network/public",
"+services/network/test",
"+services/preferences/public",
"+services/viz/public",
"+skia/ext",
......
......@@ -33,6 +33,7 @@
#include "ash/touch/touch_devices_controller.h"
#include "ash/wallpaper/wallpaper_controller_impl.h"
#include "ash/wm/desks/desks_restore_util.h"
#include "chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h"
#include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
#include "components/pref_registry/pref_registry_syncable.h"
......@@ -69,6 +70,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry, bool for_test) {
// Provide prefs registered in the browser for ash_unittests.
if (for_test) {
chromeos::assistant::prefs::RegisterProfilePrefs(registry);
chromeos::quick_answers::prefs::RegisterProfilePrefs(registry);
registry->RegisterBooleanPref(
prefs::kMouseReverseScroll, false,
user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF);
......
......@@ -84,6 +84,11 @@ class ASH_EXPORT QuickAnswersControllerImpl
return quick_answers_ui_controller_.get();
}
chromeos::quick_answers::QuickAnswersConsent*
GetConsentControllerForTesting() {
return consent_controller_.get();
}
private:
void MaybeDismissQuickAnswersConsent();
......
// 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 "ash/quick_answers/quick_answers_controller_impl.h"
#include "ash/quick_answers/quick_answers_ui_controller.h"
#include "ash/quick_answers/ui/quick_answers_view.h"
#include "ash/test/ash_test_base.h"
#include "base/test/scoped_feature_list.h"
#include "chromeos/components/quick_answers/quick_answers_client.h"
#include "chromeos/components/quick_answers/quick_answers_consents.h"
#include "chromeos/constants/chromeos_features.h"
#include "services/network/test/test_url_loader_factory.h"
namespace ash {
namespace {
constexpr gfx::Rect kDefaultAnchorBoundsInScreen =
gfx::Rect(gfx::Point(500, 250), gfx::Size(80, 140));
constexpr char kDefaultTitle[] = "default_title";
} // namespace
class QuickAnswersControllerTest : public AshTestBase {
protected:
QuickAnswersControllerTest() {
scoped_feature_list_.InitWithFeatures(
{chromeos::features::kQuickAnswers,
chromeos::features::kQuickAnswersRichUi},
{});
}
QuickAnswersControllerTest(const QuickAnswersControllerTest&) = delete;
QuickAnswersControllerTest& operator=(const QuickAnswersControllerTest&) =
delete;
~QuickAnswersControllerTest() override = default;
// AshTestBase:
void SetUp() override {
AshTestBase::SetUp();
controller()->SetClient(
std::make_unique<chromeos::quick_answers::QuickAnswersClient>(
&test_url_loader_factory_, ash::AssistantState::Get(),
controller()->GetQuickAnswersDelegate()));
}
QuickAnswersControllerImpl* controller() {
return static_cast<QuickAnswersControllerImpl*>(
QuickAnswersController::Get());
}
QuickAnswersUiController* ui_controller() {
return controller()->quick_answers_ui_controller();
}
chromeos::quick_answers::QuickAnswersConsent* consent_controller() {
return controller()->GetConsentControllerForTesting();
}
private:
network::TestURLLoaderFactory test_url_loader_factory_;
base::test::ScopedFeatureList scoped_feature_list_;
};
TEST_F(QuickAnswersControllerTest, ShouldNotShowWhenFeatureNotEligible) {
controller()->OnEligibilityChanged(false);
controller()->MaybeShowQuickAnswers(kDefaultAnchorBoundsInScreen,
kDefaultTitle, {});
// The feature is not eligible, nothing should be shown.
EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
}
TEST_F(QuickAnswersControllerTest, AcceptUserConsent) {
controller()->OnEligibilityChanged(true);
controller()->MaybeShowQuickAnswers(kDefaultAnchorBoundsInScreen,
kDefaultTitle, {});
// Without user consent, only the user consent view should show.
EXPECT_TRUE(ui_controller()->is_showing_user_consent_view());
EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
controller()->OnUserConsentGranted();
// With user consent granted, the consent view should dismiss and the cached
// quick answer query should show.
EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
}
TEST_F(QuickAnswersControllerTest, UserConsentAlreadyAccpeted) {
consent_controller()->StartConsent();
controller()->OnEligibilityChanged(true);
consent_controller()->AcceptConsent(
chromeos::quick_answers::ConsentInteractionType::kAccept);
controller()->MaybeShowQuickAnswers(kDefaultAnchorBoundsInScreen,
kDefaultTitle, {});
// With user consent already accepted, only the quick answers view should
// show.
EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
}
TEST_F(QuickAnswersControllerTest, DismissUserConsentView) {
controller()->OnEligibilityChanged(true);
controller()->MaybeShowQuickAnswers(kDefaultAnchorBoundsInScreen,
kDefaultTitle, {});
EXPECT_TRUE(ui_controller()->is_showing_user_consent_view());
controller()->DismissQuickAnswers(true);
EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
}
TEST_F(QuickAnswersControllerTest, DismissQuickAnswersView) {
consent_controller()->StartConsent();
controller()->OnEligibilityChanged(true);
consent_controller()->AcceptConsent(
chromeos::quick_answers::ConsentInteractionType::kAccept);
controller()->MaybeShowQuickAnswers(kDefaultAnchorBoundsInScreen,
kDefaultTitle, {});
EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
controller()->DismissQuickAnswers(true);
EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
}
} // namespace ash
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment