Path: blob/main/src/vs/sessions/test/e2e/extensions/sessions-e2e-mock/extension.js
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*--------------------------------------------------------------------------------------------*/45// @ts-check67/// <reference types="vscode" />89/**10* Mock extension for Sessions E2E testing.11*12* Provides:13* - A fake GitHub authentication provider (skips sign-in)14* - Mock command handlers for Code Review, Create PR, Open PR, and Merge15*16* The mock-fs:// FileSystemProvider and chat agents are registered17* directly in the workbench (web.test.ts), not here.18*/1920// ---------------------------------------------------------------------------21// Activation22// ---------------------------------------------------------------------------2324/**25* @param {import('vscode').ExtensionContext} context26*/27function activate(context) {28const vscode = require('vscode');2930console.log('[sessions-e2e-mock] Activating mock extension');3132// 1. Mock GitHub Authentication Provider33context.subscriptions.push(registerMockAuth(vscode));3435// 2. Mock command handlers for Code Review and PR actions36context.subscriptions.push(...registerMockCommands(vscode));3738// Note: The mock-fs:// FileSystemProvider is registered directly in the39// workbench (web.test.ts → registerMockFileSystemProvider) so it is40// available before any service tries to resolve workspace files.41// Do NOT register it here — it would cause a duplicate provider error.4243console.log('[sessions-e2e-mock] All mocks registered');44}4546// ---------------------------------------------------------------------------47// Mock Authentication Provider48// ---------------------------------------------------------------------------4950/**51* @param {typeof import('vscode')} vscode52* @returns {import('vscode').Disposable}53*/54function registerMockAuth(vscode) {55const sessionChangeEmitter = new vscode.EventEmitter();5657/** @type {import('vscode').AuthenticationSession} */58const mockSession = {59id: 'mock-session-1',60accessToken: 'gho_mock_e2e_test_token_00000000000000000000',61account: {62id: 'e2e-test-user',63label: 'E2E Test User',64},65scopes: ['read:user', 'repo', 'workflow'],66};6768/** @type {import('vscode').AuthenticationProvider} */69const provider = {70onDidChangeSessions: sessionChangeEmitter.event,71async getSessions(_scopes, _options) {72return [mockSession];73},74async createSession(_scopes, _options) {75sessionChangeEmitter.fire({ added: [mockSession], removed: [], changed: [] });76return mockSession;77},78async removeSession(_sessionId) {79sessionChangeEmitter.fire({ added: [], removed: [mockSession], changed: [] });80},81};8283console.log('[sessions-e2e-mock] Registering mock GitHub auth provider');84return vscode.authentication.registerAuthenticationProvider('github', 'GitHub (Mock)', provider, {85supportsMultipleAccounts: false,86});87}8889// ---------------------------------------------------------------------------90// Mock Command Handlers (Code Review + PR Actions)91// ---------------------------------------------------------------------------9293/**94* Registers mock command handlers that stand in for the real GitHub Copilot95* extension commands. These allow the Code Review and Create PR buttons to96* function in the e2e test environment.97*98* @param {typeof import('vscode')} vscode99* @returns {import('vscode').Disposable[]}100*/101function registerMockCommands(vscode) {102const disposables = [];103104// Mock create PR — simulates successful PR creation105disposables.push(vscode.commands.registerCommand(106'github.copilot.chat.createPullRequestCopilotCLIAgentSession.createPR',107() => {108console.log('[sessions-e2e-mock] Mock Create PR invoked');109vscode.window.showInformationMessage('Mock: Pull request created successfully');110}111));112113// Mock open PR — simulates opening a PR URL114disposables.push(vscode.commands.registerCommand(115'github.copilot.chat.openPullRequestCopilotCLIAgentSession.openPR',116() => {117console.log('[sessions-e2e-mock] Mock Open PR invoked');118vscode.window.showInformationMessage('Mock: Opening pull request');119}120));121122// Mock merge — simulates merging changes123disposables.push(vscode.commands.registerCommand(124'github.copilot.chat.mergeCopilotCLIAgentSessionChanges.merge',125() => {126console.log('[sessions-e2e-mock] Mock Merge invoked');127vscode.window.showInformationMessage('Mock: Changes merged successfully');128}129));130131// Mock merge and sync — simulates merging and syncing132disposables.push(vscode.commands.registerCommand(133'github.copilot.chat.mergeCopilotCLIAgentSessionChanges.mergeAndSync',134() => {135console.log('[sessions-e2e-mock] Mock Merge and Sync invoked');136vscode.window.showInformationMessage('Mock: Changes merged and synced successfully');137}138));139140// Mock apply changes — simulates applying session changes141disposables.push(vscode.commands.registerCommand(142'github.copilot.chat.applyCopilotCLIAgentSessionChanges.apply',143() => {144console.log('[sessions-e2e-mock] Mock Apply Changes invoked');145vscode.window.showInformationMessage('Mock: Changes applied successfully');146}147));148149// Mock checkout PR reroute — simulates checkout PR flow150disposables.push(vscode.commands.registerCommand(151'github.copilot.chat.checkoutPullRequestReroute',152() => {153console.log('[sessions-e2e-mock] Mock Checkout PR Reroute invoked');154vscode.window.showInformationMessage('Mock: Checking out pull request');155}156));157158// Mock update changes — simulates updating session changes159disposables.push(vscode.commands.registerCommand(160'github.copilot.chat.updateCopilotCLIAgentSessionChanges.update',161() => {162console.log('[sessions-e2e-mock] Mock Update Changes invoked');163vscode.window.showInformationMessage('Mock: Changes updated successfully',);164}165));166167console.log('[sessions-e2e-mock] Registered mock Code Review and PR command handlers');168return disposables;169}170171// ---------------------------------------------------------------------------172// Exports173// ---------------------------------------------------------------------------174175module.exports = { activate };176177178