Path: blob/main/src/vs/workbench/test/browser/componentFixtures/sessions/aiCustomizationWelcomePages.fixture.ts
13405 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as DOM from '../../../../../base/browser/dom.js';6import { constObservable } from '../../../../../base/common/observable.js';7import { URI } from '../../../../../base/common/uri.js';8import { CancellationToken } from '../../../../../base/common/cancellation.js';9import { mock } from '../../../../../base/test/common/mock.js';10import { ICommandService } from '../../../../../platform/commands/common/commands.js';11import { IChatPromptSlashCommand, PromptsStorage } from '../../../../contrib/chat/common/promptSyntax/service/promptsService.js';12import { AICustomizationManagementSection } from '../../../../contrib/chat/browser/aiCustomization/aiCustomizationManagement.js';13import { IAICustomizationWorkspaceService, IStorageSourceFilter } from '../../../../contrib/chat/common/aiCustomizationWorkspaceService.js';14import { PromptsType } from '../../../../contrib/chat/common/promptSyntax/promptTypes.js';15import { AICustomizationWelcomePage } from '../../../../contrib/chat/browser/aiCustomization/aiCustomizationWelcomePage.js';16import { ComponentFixtureContext, defineComponentFixture, defineThemedFixtureGroup } from '../fixtureUtils.js';17import { NullHoverService } from '../../../../../platform/hover/test/browser/nullHoverService.js';1819import '../../../../../platform/theme/common/colors/inputColors.js';20import '../../../../../platform/theme/common/colors/listColors.js';21import '../../../../contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css';2223const visibleSections = new Set<AICustomizationManagementSection>([24AICustomizationManagementSection.Agents,25AICustomizationManagementSection.Skills,26AICustomizationManagementSection.Instructions,27AICustomizationManagementSection.Prompts,28AICustomizationManagementSection.Hooks,29AICustomizationManagementSection.McpServers,30AICustomizationManagementSection.Plugins,31]);3233const defaultFilter: IStorageSourceFilter = {34sources: [PromptsStorage.local, PromptsStorage.user, PromptsStorage.extension, PromptsStorage.plugin],35};3637function createMockWorkspaceService(): IAICustomizationWorkspaceService {38return new class extends mock<IAICustomizationWorkspaceService>() {39override readonly isSessionsWindow = false;40override readonly managementSections = Array.from(visibleSections);41override readonly welcomePageFeatures = {42showGettingStartedBanner: true,43};44override readonly activeProjectRoot = constObservable(URI.file('/workspace'));45override readonly hasOverrideProjectRoot = constObservable(false);46override getActiveProjectRoot(): URI {47return URI.file('/workspace');48}49override getStorageSourceFilter(_type: PromptsType): IStorageSourceFilter {50return defaultFilter;51}52override async commitFiles(): Promise<void> { }53override async deleteFiles(): Promise<void> { }54override async generateCustomization(): Promise<void> { }55override setOverrideProjectRoot(): void { }56override clearOverrideProjectRoot(): void { }57override async getFilteredPromptSlashCommands(_token: CancellationToken): Promise<readonly IChatPromptSlashCommand[]> {58return [];59}60override getSkillUIIntegrations(): ReadonlyMap<string, string> {61return new Map();62}63}();64}6566function createMockCommandService(): ICommandService {67return new class extends mock<ICommandService>() {68override async executeCommand<R = unknown>(_commandId: string, ..._args: unknown[]): Promise<R | undefined> {69return undefined;70}71}();72}7374function createHost(container: HTMLElement): HTMLElement {75container.style.width = '1024px';76container.style.height = '960px';77const editor = DOM.append(container, DOM.$('.ai-customization-management-editor'));78editor.style.height = '100%';79const content = DOM.append(editor, DOM.$('.management-content'));80return DOM.append(content, DOM.$('.content-inner'));81}8283function renderWelcomePage(ctx: ComponentFixtureContext): void {84const host = createHost(ctx.container);85const workspaceService = createMockWorkspaceService();86const page = ctx.disposableStore.add(new AICustomizationWelcomePage(87host,88workspaceService.welcomePageFeatures,89{90selectSection: () => { },91selectSectionWithMarketplace: () => { },92closeEditor: () => { },93prefillChat: () => { },94},95createMockCommandService(),96workspaceService,97NullHoverService,98));99page.rebuildCards(visibleSections);100}101102export default defineThemedFixtureGroup({ path: 'chat/aiCustomizations/' }, {103WelcomePage: defineComponentFixture({104labels: { kind: 'screenshot' },105render: renderWelcomePage,106}),107});108109110