Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/chatSessions/copilotcli/vscode-node/test/updateSessionName.spec.ts
13406 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { beforeEach, describe, expect, it, vi } from 'vitest';
7
import { TestLogService } from '../../../../../platform/testing/common/testLogService';
8
import { MockMcpServer, MockSessionTracker, parseToolResult } from './testHelpers';
9
10
vi.mock('vscode', () => ({}));
11
12
import { registerUpdateSessionNameTool } from '../tools/updateSessionName';
13
14
interface UpdateSessionNameResult {
15
success: boolean;
16
}
17
18
describe('updateSessionName tool', () => {
19
const logger = new TestLogService();
20
let server: MockMcpServer;
21
let sessionTracker: MockSessionTracker;
22
const sessionId = 'test-session-123';
23
24
beforeEach(() => {
25
vi.clearAllMocks();
26
server = new MockMcpServer();
27
sessionTracker = new MockSessionTracker();
28
registerUpdateSessionNameTool(
29
server as unknown as import('@modelcontextprotocol/sdk/server/mcp.js').McpServer,
30
logger,
31
sessionTracker.asTracker(),
32
sessionId
33
);
34
});
35
36
it('should register the update_session_name tool', () => {
37
expect(server.hasToolRegistered('update_session_name')).toBe(true);
38
});
39
40
it('should update session name in tracker', async () => {
41
const handler = server.getToolHandler('update_session_name')!;
42
const result = parseToolResult<UpdateSessionNameResult>(await handler({ name: 'Fix Login Bug' }));
43
44
expect(result.success).toBe(true);
45
expect(sessionTracker.setSessionName).toHaveBeenCalledWith(sessionId, 'Fix Login Bug');
46
expect(sessionTracker.getSessionDisplayName(sessionId)).toBe('Fix Login Bug');
47
});
48
49
it('should handle different session names', async () => {
50
const handler = server.getToolHandler('update_session_name')!;
51
52
await handler({ name: 'First Name' });
53
expect(sessionTracker.getSessionDisplayName(sessionId)).toBe('First Name');
54
55
await handler({ name: 'Second Name' });
56
expect(sessionTracker.getSessionDisplayName(sessionId)).toBe('Second Name');
57
});
58
59
it('should fallback to sessionId for empty string name', async () => {
60
const handler = server.getToolHandler('update_session_name')!;
61
const result = parseToolResult<UpdateSessionNameResult>(await handler({ name: '' }));
62
63
expect(result.success).toBe(true);
64
expect(sessionTracker.setSessionName).toHaveBeenCalledWith(sessionId, '');
65
});
66
67
it('should handle unicode characters in name', async () => {
68
const handler = server.getToolHandler('update_session_name')!;
69
const unicodeName = '修复登录错误 🐛';
70
const result = parseToolResult<UpdateSessionNameResult>(await handler({ name: unicodeName }));
71
72
expect(result.success).toBe(true);
73
expect(sessionTracker.getSessionDisplayName(sessionId)).toBe(unicodeName);
74
});
75
});
76
77