Skip to content

Commit

Permalink
CrOS Settings: Convert borealis detail view browser test to TS
Browse files Browse the repository at this point in the history
Additionally, moved the test under the
`os_apps_page/app_management_page` folder to mirror the app folder
structure.

gtest_filter="*OsAppsPageAppManagementPageBorealisDetailView*"

Bug: b/270728282
Test: browser_tests --
Change-Id: I30a4aefb3d3450299a07d0d8c0bab0738613a4c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4569203
Reviewed-by: Wes Okuhara <wesokuhara@google.com>
Commit-Queue: Ruma Kesh <rkesh@google.com>
Cr-Commit-Position: refs/heads/main@{#1150796}
  • Loading branch information
rumakesh18 authored and Chromium LUCI CQ committed May 30, 2023
1 parent 0ee1819 commit 485e573
Show file tree
Hide file tree
Showing 8 changed files with 187 additions and 145 deletions.
4 changes: 4 additions & 0 deletions chrome/browser/resources/settings/chromeos/lazy_load.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ import './guest_os/guest_os_shared_usb_devices_add_dialog.js';
import './guest_os/guest_os_shared_paths.js';
import './keyboard_shortcut_banner/keyboard_shortcut_banner.js';
import './os_apps_page/app_management_page/app_item.js';
import './os_apps_page/app_management_page/borealis_page/borealis_detail_view.js';
import './os_apps_page/app_management_page/chrome_app_detail_view.js';
import './os_apps_page/app_management_page/pin_to_shelf_item.js';
import './os_files_page/google_drive_subpage.js';
import './os_files_page/google_drive_confirmation_dialog.js';
import './os_files_page/office_page.js';
Expand Down Expand Up @@ -145,8 +147,10 @@ export {PdfOcrUserSelection, SettingsTextToSpeechSubpageElement} from './os_a11y
export {SettingsTtsVoiceSubpageElement} from './os_a11y_page/tts_voice_subpage.js';
export {AppManagementAppDetailViewElement} from './os_apps_page/app_management_page/app_detail_view.js';
export {AppManagementAppItemElement} from './os_apps_page/app_management_page/app_item.js';
export {AppManagementBorealisDetailViewElement} from './os_apps_page/app_management_page/borealis_page/borealis_detail_view.js';
export {AppManagementChromeAppDetailViewElement} from './os_apps_page/app_management_page/chrome_app_detail_view.js';
export {AppManagementMainViewElement} from './os_apps_page/app_management_page/main_view.js';
export {AppManagementPinToShelfItemElement} from './os_apps_page/app_management_page/pin_to_shelf_item.js';
export {SettingsGoogleDriveSubpageElement} from './os_files_page/google_drive_subpage.js';
export {SettingsOfficePageElement} from './os_files_page/office_page.js';
export {OsSettingsFilesPageElement} from './os_files_page/os_files_page.js';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const BOREALIS_CLIENT_APP_ID = 'epfhbkiklgmlkhfpbcdleadnhcfdjfmo';
const AppManagementBorealisDetailViewElementBase =
AppManagementStoreMixin(PolymerElement);

class AppManagementBorealisDetailViewElement extends
export class AppManagementBorealisDetailViewElement extends
AppManagementBorealisDetailViewElementBase {
static get is() {
return 'app-management-borealis-detail-view';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {recordSettingChange} from '../../metrics_recorder.js';
import {AppManagementBrowserProxy} from './browser_proxy.js';
import {getTemplate} from './pin_to_shelf_item.html.js';

class AppManagementPinToShelfItemElement extends PolymerElement {
export class AppManagementPinToShelfItemElement extends PolymerElement {
static get is() {
return 'app-management-pin-to-shelf-item';
}
Expand Down
2 changes: 0 additions & 2 deletions chrome/browser/resources/settings/chromeos/os_settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ import './os_apps_page/app_notifications_page/app_notifications_subpage.js';
import './os_apps_page/app_management_page/app_details_item.js';
import './os_apps_page/app_management_page/app_management_page.js';
import './os_apps_page/app_management_page/arc_detail_view.js';
import './os_apps_page/app_management_page/borealis_page/borealis_detail_view.js';
import './os_apps_page/app_management_page/dom_switch.js';
import './os_apps_page/app_management_page/pin_to_shelf_item.js';
import './os_apps_page/app_management_page/plugin_vm_page/plugin_vm_detail_view.js';
import './os_apps_page/app_management_page/pwa_detail_view.js';
import './os_apps_page/app_management_page/app_management_cros_shared_style.css.js';
Expand Down
2 changes: 1 addition & 1 deletion chrome/test/data/webui/settings/chromeos/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ build_webui_tests("build") {
"app_management/app_management_page_tests.js",
"app_management/app_test.js",
"app_management/arc_detail_view_test.js",
"app_management/borealis_detail_view_test.js",
"app_management/dom_switch_test.js",
"app_management/fake_page_handler.ts",
"app_management/file_handling_item_test.js",
Expand Down Expand Up @@ -203,6 +202,7 @@ build_webui_tests("build") {

"os_apps_page/app_management_page/app_detail_view_test.ts",
"os_apps_page/app_management_page/app_item_test.ts",
"os_apps_page/app_management_page/borealis_detail_view_test.ts",
"os_apps_page/app_management_page/chrome_app_detail_view_test.ts",
"os_apps_page/app_management_page/main_view_test.ts",

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://os-settings/lazy_load.js';

import {AppManagementBorealisDetailViewElement, AppManagementPinToShelfItemElement} from 'chrome://os-settings/lazy_load.js';
import {AppManagementStore, Router, updateSelectedAppId} from 'chrome://os-settings/os_settings.js';
import {App, AppType, Permission, PermissionType} from 'chrome://resources/cr_components/app_management/app_management.mojom-webui.js';
import {PermissionTypeIndex} from 'chrome://resources/cr_components/app_management/permission_constants.js';
import {createBoolPermission} from 'chrome://resources/cr_components/app_management/permission_util.js';
import {AppManagementToggleRowElement} from 'chrome://resources/cr_components/app_management/toggle_row.js';
import {convertOptionalBoolToBool, getPermissionValueBool} from 'chrome://resources/cr_components/app_management/util.js';
import {CrToggleElement} from 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
import {assertEquals, assertFalse, assertNull, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
import {eventToPromise} from 'chrome://webui-test/test_util.js';

import {FakePageHandler} from '../../app_management/fake_page_handler.js';
import {getPermissionCrToggleByType, getPermissionToggleByType, replaceBody, replaceStore, setupFakeHandler} from '../../app_management/test_util.js';

suite('<app-management-borealis-detail-view>', () => {
let borealisDetailView: AppManagementBorealisDetailViewElement;
let fakeHandler: FakePageHandler;

const BOREALIS_CLIENT_APP_ID = 'epfhbkiklgmlkhfpbcdleadnhcfdjfmo';

function getPermissionBoolByType(permissionType: PermissionTypeIndex):
boolean {
return getPermissionValueBool(
borealisDetailView.get('app_'), permissionType);
}

async function clickToggle(permissionType: PermissionTypeIndex):
Promise<void> {
const toggleRow =
getPermissionToggleByType(borealisDetailView, permissionType) as
AppManagementToggleRowElement;
toggleRow.click();
await fakeHandler.flushPipesForTesting();
}

function getSelectedAppFromStore(): App {
const storeData = AppManagementStore.getInstance().data;
assertTrue(!!storeData);
const selectedAppId = storeData.selectedAppId;
assertTrue(!!selectedAppId);
const selectedApp = storeData.apps[selectedAppId];
assertTrue(!!selectedApp);
return selectedApp;
}

setup(async () => {
fakeHandler = setupFakeHandler();
replaceStore();

const permissions: {[key in PermissionType]?: Permission} = {};
const permissionTypes = [PermissionType.kMicrophone];
for (const permissionType of permissionTypes) {
permissions[permissionType] = createBoolPermission(
permissionType, true /*permission_value*/, false /*is_managed*/);
}

// Add main app, and make it the currently selected app.
const mainOptions = {
type: AppType.kBorealis,
permissions: permissions,
};
const mainApp =
await fakeHandler.addApp(BOREALIS_CLIENT_APP_ID, mainOptions);
AppManagementStore.getInstance().dispatch(updateSelectedAppId(mainApp.id));
borealisDetailView =
document.createElement('app-management-borealis-detail-view');
replaceBody(borealisDetailView);
});

teardown(() => {
borealisDetailView.remove();
Router.getInstance().resetRouteForTesting();
});

test('App is rendered correctly', () => {
assertEquals(
AppManagementStore.getInstance().data.selectedAppId,
borealisDetailView.get('app_').id);
});

// TODO(b/270728282) - remove "as" cast once getPermissionCrToggleByType()
// becomes a TS function.
test('Toggle permissions', async () => {
const checkToggle = async (permissionType: PermissionTypeIndex) => {
assertTrue(getPermissionBoolByType(permissionType));
let toggle = getPermissionCrToggleByType(
borealisDetailView, permissionType) as CrToggleElement;
assertTrue(toggle.checked);

// Toggle off.
await clickToggle(permissionType);
assertFalse(getPermissionBoolByType(permissionType));
toggle = getPermissionCrToggleByType(
borealisDetailView, permissionType) as CrToggleElement;
assertFalse(toggle.checked);

// Toggle on.
await clickToggle(permissionType);
assertTrue(getPermissionBoolByType(permissionType));
toggle = getPermissionCrToggleByType(
borealisDetailView, permissionType) as CrToggleElement;
assertTrue(toggle.checked);
};

await checkToggle('kMicrophone');
});

test('Pin to shelf toggle', async () => {
const pinToShelfItem =
borealisDetailView.shadowRoot!
.querySelector<AppManagementPinToShelfItemElement>(
'#pinToShelfSetting');
assertTrue(!!pinToShelfItem);
const toggleRow =
pinToShelfItem.shadowRoot!.querySelector<AppManagementToggleRowElement>(
'#toggleRow');
assertTrue(!!toggleRow);
const toggle = toggleRow.$.toggle;

let selectedAppId = getSelectedAppFromStore();
assertTrue(!!selectedAppId);
assertFalse(toggle.checked);
assertEquals(
toggle.checked, convertOptionalBoolToBool(selectedAppId.isPinned));
pinToShelfItem.click();
await fakeHandler.flushPipesForTesting();
assertTrue(toggle.checked);
selectedAppId = getSelectedAppFromStore();
assertTrue(!!selectedAppId);
assertEquals(
toggle.checked, convertOptionalBoolToBool(selectedAppId.isPinned));
pinToShelfItem.click();
await fakeHandler.flushPipesForTesting();
assertFalse(toggle.checked);
selectedAppId = getSelectedAppFromStore();
assertTrue(!!selectedAppId);
assertEquals(
toggle.checked, convertOptionalBoolToBool(selectedAppId.isPinned));
});

test('Permission info links are correct', async () => {
assertTrue(!!borealisDetailView.shadowRoot!.querySelector('#mainLink'));
assertNull(borealisDetailView.shadowRoot!.querySelector('#borealisLink'));

// Add borealis (non main) app. Note that any tests after this will
// have the borealis app selected as default.
const options = {
type: AppType.kBorealis,
};
const app = await fakeHandler.addApp('foo', options);
AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
await fakeHandler.flushPipesForTesting();
assertNull(borealisDetailView.shadowRoot!.querySelector('#mainLink'));
assertTrue(!!borealisDetailView.shadowRoot!.querySelector('#borealisLink'));

// Check that link directs to main app page.
const link = borealisDetailView.shadowRoot!.querySelector('#borealisLink');
assertTrue(!!link);
const anchorTag = link.shadowRoot!.querySelector('a');
assertTrue(!!anchorTag);
const localizedLinkPromise = eventToPromise('link-clicked', link);
anchorTag.click();
await Promise.all([localizedLinkPromise, flushTasks()]);
await fakeHandler.flushPipesForTesting();
assertEquals(
Router.getInstance().getQueryParameters().get('id'),
BOREALIS_CLIENT_APP_ID);
});
});

0 comments on commit 485e573

Please sign in to comment.