Commit 110f559b authored by danielng's avatar danielng Committed by Commit Bot

borealis: Add browser tests for the installer

Added browser tests for the Borealis installer view.

Cq-Depend: 2391891
Tests: Ran tests
Bug: b:161650651
Change-Id: I2e5e6a2fb5d744f1fd3cd2f0e6efa1622953c0ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2392285
Commit-Queue: Daniel Ng <danielng@google.com>
Reviewed-by: default avatarCollin Baker <collinbaker@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarNic Hollingum <hollingum@google.com>
Cr-Commit-Position: refs/heads/master@{#805151}
parent 1ee2fec2
// 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 "chrome/browser/ui/views/borealis/borealis_installer_view.h"
#include "base/bind.h"
#include "chrome/browser/chromeos/borealis/borealis_installer_factory.h"
#include "chrome/browser/chromeos/borealis/borealis_util.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/test/test_browser_dialog.h"
#include "chrome/grit/generated_resources.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/strings/grit/ui_strings.h"
using ::testing::_;
using InstallationResult = borealis::BorealisInstaller::InstallationResult;
class BorealisInstallerMock : public borealis::BorealisInstaller {
public:
BorealisInstallerMock() = default;
~BorealisInstallerMock() = default;
BorealisInstallerMock(const BorealisInstallerMock&) = delete;
BorealisInstallerMock& operator=(const BorealisInstallerMock&) = delete;
MOCK_METHOD0(IsProcessing, bool());
MOCK_METHOD0(Start, void());
MOCK_METHOD0(Cancel, void());
MOCK_METHOD1(AddObserver, void(Observer*));
MOCK_METHOD1(RemoveObserver, void(Observer*));
};
class BorealisInstallerViewBrowserTest : public DialogBrowserTest {
public:
BorealisInstallerViewBrowserTest() = default;
// DialogBrowserTest:
void SetUpOnMainThread() override {
app_name_ = l10n_util::GetStringUTF16(IDS_BOREALIS_APP_NAME);
mock_installer_ =
static_cast<::testing::StrictMock<BorealisInstallerMock>*>(
borealis::BorealisInstallerFactory::GetInstance()
->SetTestingFactoryAndUse(
browser()->profile(),
base::BindRepeating([](content::BrowserContext* context)
-> std::unique_ptr<KeyedService> {
return std::make_unique<BorealisInstallerMock>();
})));
}
void ShowUi(const std::string& name) override {
borealis::ShowBorealisInstallerView(browser()->profile());
view_ = BorealisInstallerView::GetActiveViewForTesting();
EXPECT_FALSE(view_->GetWidget()->IsClosed());
ExpectConfirmationDisplayed();
}
protected:
bool HasAcceptButton() { return view_->GetOkButton() != nullptr; }
bool HasCancelButton() { return view_->GetCancelButton() != nullptr; }
void ExpectConfirmationDisplayed() {
EXPECT_TRUE(HasAcceptButton());
EXPECT_TRUE(HasCancelButton());
EXPECT_EQ(view_->GetPrimaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_INSTALLER_CONFIRMATION_TITLE, app_name_));
}
void ExpectInstallationInProgress() {
EXPECT_FALSE(HasAcceptButton());
EXPECT_TRUE(HasCancelButton());
EXPECT_EQ(view_->GetPrimaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_INSTALLER_ENVIRONMENT_SETTING_TITLE, app_name_));
}
void ExpectInstallationFailedWithRetry() {
EXPECT_TRUE(HasAcceptButton());
EXPECT_TRUE(HasCancelButton());
EXPECT_EQ(view_->GetDialogButtonLabel(ui::DIALOG_BUTTON_OK),
l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_RETRY_BUTTON));
EXPECT_EQ(view_->GetPrimaryMessage(),
l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_ERROR_TITLE));
}
void ExpectInstallationFailedWithNoRetry() {
EXPECT_FALSE(HasAcceptButton());
EXPECT_TRUE(HasCancelButton());
EXPECT_EQ(view_->GetPrimaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_INSTALLER_NOT_ALLOWED_TITLE, app_name_));
}
void ExpectInstallationCompletedSucessfully() {
EXPECT_TRUE(HasAcceptButton());
EXPECT_EQ(view_->GetDialogButtonLabel(ui::DIALOG_BUTTON_OK),
l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_LAUNCH_BUTTON));
EXPECT_TRUE(HasCancelButton());
EXPECT_EQ(view_->GetDialogButtonLabel(ui::DIALOG_BUTTON_CANCEL),
l10n_util::GetStringUTF16(IDS_APP_CLOSE));
EXPECT_EQ(view_->GetPrimaryMessage(),
l10n_util::GetStringUTF16(IDS_BOREALIS_INSTALLER_FINISHED_TITLE));
}
void AcceptInstallation() {
EXPECT_CALL(*mock_installer_, AddObserver(_));
EXPECT_CALL(*mock_installer_, Start());
view_->AcceptDialog();
view_->SetInstallingStateForTesting(
borealis::BorealisInstaller::InstallingState::kInstallingDlc);
ExpectInstallationInProgress();
}
void ClickCancel() {
EXPECT_CALL(*mock_installer_, RemoveObserver(_));
view_->CancelDialog();
EXPECT_TRUE(view_->GetWidget()->IsClosed());
}
::testing::StrictMock<BorealisInstallerMock>* mock_installer_;
BorealisInstallerView* view_;
base::string16 app_name_;
private:
// Disallow copy and assign.
BorealisInstallerViewBrowserTest(const BorealisInstallerViewBrowserTest&) =
delete;
BorealisInstallerViewBrowserTest& operator=(
const BorealisInstallerViewBrowserTest&) = delete;
};
// Test that the dialog can be launched.
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, InvokeUi_default) {
EXPECT_CALL(*mock_installer_, RemoveObserver(_));
ShowAndVerifyUi();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, SucessfulInstall) {
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(InstallationResult::kCompleted);
ExpectInstallationCompletedSucessfully();
EXPECT_CALL(*mock_installer_, RemoveObserver(_));
view_->AcceptDialog();
EXPECT_TRUE(view_->GetWidget()->IsClosed());
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest,
ConfirmationCancelled) {
ShowUi("default");
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest,
InstallationCancelled) {
ShowUi("default");
AcceptInstallation();
EXPECT_CALL(*mock_installer_, Cancel());
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest,
InstallationSucessAfterRetry) {
InstallationResult error_type = InstallationResult::kOperationInProgress;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_GENERIC_ERROR_MESSAGE, app_name_,
base::NumberToString16(
static_cast<std::underlying_type_t<InstallationResult>>(
error_type))));
AcceptInstallation();
view_->OnInstallationEnded(InstallationResult::kCompleted);
ExpectInstallationCompletedSucessfully();
EXPECT_CALL(*mock_installer_, RemoveObserver(_));
view_->AcceptDialog();
EXPECT_TRUE(view_->GetWidget()->IsClosed());
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, InProgressError) {
InstallationResult error_type = InstallationResult::kOperationInProgress;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_GENERIC_ERROR_MESSAGE, app_name_,
base::NumberToString16(
static_cast<std::underlying_type_t<InstallationResult>>(
error_type))));
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, NotAllowedError) {
InstallationResult error_type = InstallationResult::kNotAllowed;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithNoRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_INSTALLER_NOT_ALLOWED_MESSAGE, app_name_,
base::NumberToString16(
static_cast<std::underlying_type_t<InstallationResult>>(
error_type))));
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, DlcInternalError) {
InstallationResult error_type = InstallationResult::kDlcInternal;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(IDS_BOREALIS_DLC_INTERNAL_FAILED_MESSAGE,
app_name_));
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, DlcBusyError) {
InstallationResult error_type = InstallationResult::kDlcBusy;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(IDS_BOREALIS_DLC_BUSY_FAILED_MESSAGE,
app_name_));
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, DlcNeedRebootError) {
InstallationResult error_type = InstallationResult::kDlcNeedReboot;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_DLC_NEED_REBOOT_FAILED_MESSAGE, app_name_));
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, DlcNeedSpaceError) {
InstallationResult error_type = InstallationResult::kDlcNeedSpace;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(
view_->GetSecondaryMessage(),
l10n_util::GetStringUTF16(IDS_BOREALIS_INSUFFICIENT_DISK_SPACE_MESSAGE));
ClickCancel();
}
IN_PROC_BROWSER_TEST_F(BorealisInstallerViewBrowserTest, DlcUnknownError) {
InstallationResult error_type = InstallationResult::kDlcUnknown;
ShowUi("default");
AcceptInstallation();
view_->OnInstallationEnded(error_type);
ExpectInstallationFailedWithRetry();
EXPECT_EQ(view_->GetSecondaryMessage(),
l10n_util::GetStringFUTF16(
IDS_BOREALIS_GENERIC_ERROR_MESSAGE, app_name_,
base::NumberToString16(
static_cast<std::underlying_type_t<InstallationResult>>(
error_type))));
ClickCancel();
}
......@@ -2608,6 +2608,7 @@ if (!is_android) {
"../browser/ui/views/apps/app_dialog/app_uninstall_dialog_view_browsertest.cc",
"../browser/ui/views/apps/chrome_native_app_window_views_aura_ash_browsertest.cc",
"../browser/ui/views/arc_app_dialog_view_browsertest.cc",
"../browser/ui/views/borealis/borealis_installer_view_browsertest.cc",
"../browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc",
"../browser/ui/views/crostini/crostini_browser_test_util.cc",
"../browser/ui/views/crostini/crostini_browser_test_util.h",
......
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