chrome-devtools-frontend
Version:
Chrome DevTools UI
96 lines (84 loc) • 4.41 kB
text/typescript
// Copyright 2022 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.
import * as Platform from '../../core/platform/platform.js';
import * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
import {dispatchClickEvent} from '../../testing/DOMHelpers.js';
import {createTarget} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import * as UI from '../../ui/legacy/legacy.js';
import * as Resources from './application.js';
describeWithMockConnection('BackgroundServiceView', () => {
const testKey = 'test-storage-key';
const serviceName = Protocol.BackgroundService.ServiceName.BackgroundFetch;
let target: SDK.Target.Target;
let backgroundServiceModel: Resources.BackgroundServiceModel.BackgroundServiceModel|null;
let manager: SDK.StorageKeyManager.StorageKeyManager|null|undefined;
let view: Resources.BackgroundServiceView.BackgroundServiceView;
beforeEach(() => {
target = createTarget();
backgroundServiceModel = target.model(Resources.BackgroundServiceModel.BackgroundServiceModel);
manager = target.model(SDK.StorageKeyManager.StorageKeyManager);
UI.ActionRegistration.maybeRemoveActionExtension('background-service.toggle-recording');
UI.ActionRegistration.registerActionExtension({
actionId: 'background-service.toggle-recording',
category: UI.ActionRegistration.ActionCategory.BACKGROUND_SERVICES,
title: () => 'mock' as Platform.UIString.LocalizedString,
toggleable: true,
});
sinon.stub(UI.ShortcutRegistry.ShortcutRegistry, 'instance').returns({
shortcutTitleForAction: () => {},
shortcutsForAction: () => [new UI.KeyboardShortcut.KeyboardShortcut(
[{key: UI.KeyboardShortcut.Keys.Ctrl.code, name: 'Ctrl'}], '', UI.KeyboardShortcut.Type.DEFAULT_SHORTCUT)],
} as unknown as UI.ShortcutRegistry.ShortcutRegistry);
assert.exists(backgroundServiceModel);
view = new Resources.BackgroundServiceView.BackgroundServiceView(serviceName, backgroundServiceModel);
});
afterEach(() => {
UI.ActionRegistration.maybeRemoveActionExtension('background-service.toggle-recording');
});
it('updates event list when main storage key changes', () => {
assert.exists(backgroundServiceModel);
assert.exists(manager);
backgroundServiceModel.backgroundServiceEventReceived({
backgroundServiceEvent: {
timestamp: 1556889085, // 2019-05-03 14:11:25.000.
origin: '',
storageKey: testKey,
serviceWorkerRegistrationId: 42 as unknown as Protocol.ServiceWorker.RegistrationID, // invalid.
service: serviceName,
eventName: 'Event1',
instanceId: 'Instance1',
eventMetadata: [],
},
});
manager.updateStorageKeys(new Set([testKey]));
manager.setMainStorageKey(testKey);
const dataRow = view.getDataGrid().dataTableBody.getElementsByClassName('data-grid-data-grid-node')[0];
const expectedData = ['Event1', testKey, 'Instance1'];
const actualData = [
dataRow.getElementsByClassName('event-name-column')[0].textContent,
dataRow.getElementsByClassName('storage-key-column')[0].textContent,
dataRow.getElementsByClassName('instance-id-column')[0].textContent,
];
assert.deepEqual(actualData, expectedData);
});
it('shows placeholder text', () => {
assert.isNotNull(view.contentElement.querySelector('.empty-state'));
const header = view.contentElement.querySelector('.empty-state-header')?.textContent;
const description = view.contentElement.querySelector('.empty-state-description')?.textContent;
assert.deepEqual(header, 'No recording yet');
assert.deepEqual(
description,
'Start to debug background services by using the "Start recording events" button or by hitting Ctrl.Learn more');
});
it('Triggers record on button click', async () => {
const recordButton = view.contentElement.querySelector('.empty-state devtools-button');
Platform.assertNotNullOrUndefined(recordButton);
assert.deepEqual(recordButton?.textContent, 'Start recording events');
const recordingSpy = sinon.spy(view, 'toggleRecording');
dispatchClickEvent(recordButton);
assert.isTrue(recordingSpy.calledOnce);
});
});