Skip to content

Commit 98bcf2f

Browse files
committed
add test cases for connection labels and fix failing tests
1 parent 0904339 commit 98bcf2f

File tree

1 file changed

+87
-2
lines changed

1 file changed

+87
-2
lines changed

test/unit/chatAgentRequestHandler.test.ts

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@ import * as sinon from "sinon";
1414
import * as telemetry from "../../src/telemetry/telemetry";
1515
import { GetNextMessageResponse, MessageType } from "../../src/models/contracts/copilot";
1616
import { ActivityObject, ActivityStatus } from "../../src/sharedInterfaces/telemetry";
17+
import MainController from "../../src/controllers/mainController";
18+
import ConnectionManager, { ConnectionInfo } from "../../src/controllers/connectionManager";
1719

1820
suite("Chat Agent Request Handler Tests", () => {
1921
let mockCopilotService: TypeMoq.IMock<CopilotService>;
22+
let mockMainController: TypeMoq.IMock<MainController>;
23+
let mockConnectionManager: TypeMoq.IMock<ConnectionManager>;
24+
let mockConnectionInfo: TypeMoq.IMock<ConnectionInfo>;
2025
let mockVscodeWrapper: TypeMoq.IMock<VscodeWrapper>;
2126
let mockContext: TypeMoq.IMock<vscode.ExtensionContext>;
2227
let mockLmChat: TypeMoq.IMock<vscode.LanguageModelChat>;
@@ -86,6 +91,20 @@ suite("Chat Agent Request Handler Tests", () => {
8691
// Mock CopilotService
8792
mockCopilotService = TypeMoq.Mock.ofType<CopilotService>();
8893

94+
// Mock connectionManager
95+
mockConnectionManager = TypeMoq.Mock.ofType<ConnectionManager>();
96+
97+
// Mock ConnectionInfo
98+
mockConnectionInfo = TypeMoq.Mock.ofType<ConnectionInfo>();
99+
mockConnectionInfo.setup((x) => x.credentials.server).returns(() => "server");
100+
mockConnectionInfo.setup((x) => x.credentials.database).returns(() => "database");
101+
102+
// Mock MainController
103+
mockMainController = TypeMoq.Mock.ofType<MainController>();
104+
mockMainController
105+
.setup((x) => x.connectionManager)
106+
.returns(() => mockConnectionManager.object);
107+
89108
// Mock VscodeWrapper
90109
mockVscodeWrapper = TypeMoq.Mock.ofType<VscodeWrapper>();
91110
mockVscodeWrapper.setup((x) => x.activeTextEditorUri).returns(() => sampleConnectionUri);
@@ -137,10 +156,19 @@ suite("Chat Agent Request Handler Tests", () => {
137156
})(),
138157
);
139158

140-
// Mock Language Model API
159+
// Had to create a real object instead of using TypeMoq for the response object
160+
const mockResponseObject = {
161+
stream: (async function* () {
162+
yield new vscode.LanguageModelTextPart(sampleReplyText);
163+
})(),
164+
text: (async function* () {
165+
yield sampleReplyText;
166+
})(),
167+
};
168+
141169
mockLmChat
142170
.setup((x) => x.sendRequest(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()))
143-
.returns(() => Promise.resolve(mockLanguageModelChatResponse.object));
171+
.returns(() => Promise.resolve(mockResponseObject));
144172

145173
// Mock TextDocument for reference handling
146174
mockTextDocument = TypeMoq.Mock.ofType<vscode.TextDocument>();
@@ -184,6 +212,7 @@ suite("Chat Agent Request Handler Tests", () => {
184212
mockCopilotService.object,
185213
mockVscodeWrapper.object,
186214
mockContext.object,
215+
mockMainController.object,
187216
);
188217

189218
expect(handler).to.be.a("function");
@@ -197,6 +226,7 @@ suite("Chat Agent Request Handler Tests", () => {
197226
mockCopilotService.object,
198227
mockVscodeWrapper.object,
199228
mockContext.object,
229+
mockMainController.object,
200230
);
201231

202232
const result = await handler(
@@ -224,6 +254,11 @@ suite("Chat Agent Request Handler Tests", () => {
224254
)
225255
.returns(() => Promise.resolve(true));
226256

257+
// Mock the getConnectionInfo method to return a valid connection
258+
mockConnectionManager
259+
.setup((x) => x.getConnectionInfo(TypeMoq.It.isAnyString()))
260+
.returns(() => mockConnectionInfo.object);
261+
227262
// Mock the getNextMessage to return a Complete message type
228263
const completeResponse: GetNextMessageResponse = {
229264
conversationUri: sampleConversationUri,
@@ -248,6 +283,7 @@ suite("Chat Agent Request Handler Tests", () => {
248283
mockCopilotService.object,
249284
mockVscodeWrapper.object,
250285
mockContext.object,
286+
mockMainController.object,
251287
);
252288

253289
const result = await handler(
@@ -282,6 +318,43 @@ suite("Chat Agent Request Handler Tests", () => {
282318
TypeMoq.Times.once(),
283319
);
284320

321+
mockChatStream.verify(
322+
(x) => x.markdown(TypeMoq.It.is((msg) => msg.toString().startsWith("> 🟢"))),
323+
TypeMoq.Times.once(),
324+
);
325+
326+
expect(result).to.deep.equal({
327+
metadata: { command: "", correlationId: sampleCorrelationId },
328+
});
329+
});
330+
331+
test("Handles conversation with disconnected editor", async () => {
332+
// Mock the getConnectionInfo method to return an invalid connection
333+
mockConnectionManager
334+
.setup((x) => x.getConnectionInfo(TypeMoq.It.isAnyString()))
335+
.returns(() => {
336+
return undefined;
337+
});
338+
339+
const handler = createSqlAgentRequestHandler(
340+
mockCopilotService.object,
341+
mockVscodeWrapper.object,
342+
mockContext.object,
343+
mockMainController.object,
344+
);
345+
346+
const result = await handler(
347+
mockChatRequest.object,
348+
mockChatContext.object,
349+
mockChatStream.object,
350+
mockToken.object,
351+
);
352+
353+
mockChatStream.verify(
354+
(x) => x.markdown(TypeMoq.It.is((msg) => msg.toString().startsWith("> ⚠️"))),
355+
TypeMoq.Times.once(),
356+
);
357+
285358
expect(result).to.deep.equal({
286359
metadata: { command: "", correlationId: sampleCorrelationId },
287360
});
@@ -299,6 +372,11 @@ suite("Chat Agent Request Handler Tests", () => {
299372
)
300373
.returns(() => Promise.resolve(true));
301374

375+
// Mock the getConnectionInfo method to return a valid connection
376+
mockConnectionManager
377+
.setup((x) => x.getConnectionInfo(TypeMoq.It.isAnyString()))
378+
.returns(() => mockConnectionInfo.object);
379+
302380
// First return a Fragment message type
303381
const fragmentResponse: GetNextMessageResponse = {
304382
conversationUri: sampleConversationUri,
@@ -337,6 +415,7 @@ suite("Chat Agent Request Handler Tests", () => {
337415
mockCopilotService.object,
338416
mockVscodeWrapper.object,
339417
mockContext.object,
418+
mockMainController.object,
340419
);
341420

342421
await handler(
@@ -370,10 +449,16 @@ suite("Chat Agent Request Handler Tests", () => {
370449
)
371450
.throws(new Error("Connection failed"));
372451

452+
// Mock the getConnectionInfo method to return a valid connection
453+
mockConnectionManager
454+
.setup((x) => x.getConnectionInfo(TypeMoq.It.isAnyString()))
455+
.returns(() => mockConnectionInfo.object);
456+
373457
const handler = createSqlAgentRequestHandler(
374458
mockCopilotService.object,
375459
mockVscodeWrapper.object,
376460
mockContext.object,
461+
mockMainController.object,
377462
);
378463

379464
await handler(

0 commit comments

Comments
 (0)