Path: blob/main/extensions/copilot/src/extension/chatSessions/copilotcli/vscode-node/test/updateSessionName.spec.ts
13406 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 { beforeEach, describe, expect, it, vi } from 'vitest';6import { TestLogService } from '../../../../../platform/testing/common/testLogService';7import { MockMcpServer, MockSessionTracker, parseToolResult } from './testHelpers';89vi.mock('vscode', () => ({}));1011import { registerUpdateSessionNameTool } from '../tools/updateSessionName';1213interface UpdateSessionNameResult {14success: boolean;15}1617describe('updateSessionName tool', () => {18const logger = new TestLogService();19let server: MockMcpServer;20let sessionTracker: MockSessionTracker;21const sessionId = 'test-session-123';2223beforeEach(() => {24vi.clearAllMocks();25server = new MockMcpServer();26sessionTracker = new MockSessionTracker();27registerUpdateSessionNameTool(28server as unknown as import('@modelcontextprotocol/sdk/server/mcp.js').McpServer,29logger,30sessionTracker.asTracker(),31sessionId32);33});3435it('should register the update_session_name tool', () => {36expect(server.hasToolRegistered('update_session_name')).toBe(true);37});3839it('should update session name in tracker', async () => {40const handler = server.getToolHandler('update_session_name')!;41const result = parseToolResult<UpdateSessionNameResult>(await handler({ name: 'Fix Login Bug' }));4243expect(result.success).toBe(true);44expect(sessionTracker.setSessionName).toHaveBeenCalledWith(sessionId, 'Fix Login Bug');45expect(sessionTracker.getSessionDisplayName(sessionId)).toBe('Fix Login Bug');46});4748it('should handle different session names', async () => {49const handler = server.getToolHandler('update_session_name')!;5051await handler({ name: 'First Name' });52expect(sessionTracker.getSessionDisplayName(sessionId)).toBe('First Name');5354await handler({ name: 'Second Name' });55expect(sessionTracker.getSessionDisplayName(sessionId)).toBe('Second Name');56});5758it('should fallback to sessionId for empty string name', async () => {59const handler = server.getToolHandler('update_session_name')!;60const result = parseToolResult<UpdateSessionNameResult>(await handler({ name: '' }));6162expect(result.success).toBe(true);63expect(sessionTracker.setSessionName).toHaveBeenCalledWith(sessionId, '');64});6566it('should handle unicode characters in name', async () => {67const handler = server.getToolHandler('update_session_name')!;68const unicodeName = '修复登录错误 🐛';69const result = parseToolResult<UpdateSessionNameResult>(await handler({ name: unicodeName }));7071expect(result.success).toBe(true);72expect(sessionTracker.getSessionDisplayName(sessionId)).toBe(unicodeName);73});74});757677