mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-10-13 15:28:05 +01:00
* Upgrade packages to enable npm i with node 18 * Fix crypto and querystring issue * Fix webpack errors during npm start * Upgrade monaco editor. Fix alias in webconfig * Remove deprecated file-loader. Upgrade webpack to latest. * Fix format * Upgrade webpack, eslint and typescript * Update p-retry and fluentui packages * Revert monaco package upgrade * Fix notebook compile errors * Fix lint errors * Update jest snapshots * Fix unit tests * Update node version to 18 * Fix compile error * Fix compile error * Fix format * Turn off warning overlay for webpack devServer * Fix format * Re-add monaco webpack plugin and upgrade monaco-editor * Update package-lock.json * Fix build issue * Move MonacoWebpackPlugin to previous place in webpack.config.js * update package-lock.json * Fix package-lock.json * Update package-lock.json * Fix export ChoiceItem not found warning for self serve. Remove warning turn off in webpack config. * Update checkout and setup actions in for ci tests * Disable Gallery callout * Fix disable gallery header * Totally disable New gallery callout * Upgrade all github actions to latest
146 lines
4.2 KiB
TypeScript
146 lines
4.2 KiB
TypeScript
import { handleError } from "Common/ErrorHandlingUtils";
|
|
import { createUri } from "Common/UrlUtility";
|
|
import Explorer from "Explorer/Explorer";
|
|
import { SubmitFeedback } from "Explorer/QueryCopilot/Shared/QueryCopilotClient";
|
|
import { userContext } from "UserContext";
|
|
import { useQueryCopilot } from "hooks/useQueryCopilot";
|
|
|
|
jest.mock("@azure/cosmos", () => ({
|
|
Constants: {
|
|
HttpHeaders: {},
|
|
},
|
|
}));
|
|
|
|
jest.mock("Common/ErrorHandlingUtils", () => ({
|
|
handleError: jest.fn(),
|
|
}));
|
|
|
|
jest.mock("Common/SampleDataClient");
|
|
|
|
jest.mock("node-fetch");
|
|
|
|
jest.mock("Explorer/Explorer", () => {
|
|
class MockExplorer {
|
|
allocateContainer = jest.fn().mockResolvedValueOnce({});
|
|
}
|
|
return MockExplorer;
|
|
});
|
|
|
|
describe("Query Copilot Client", () => {
|
|
beforeEach(() => jest.clearAllMocks());
|
|
|
|
describe("SubmitFeedback", () => {
|
|
const payload = {
|
|
like: "like",
|
|
generatedSql: "GeneratedQuery",
|
|
userPrompt: "UserPrompt",
|
|
description: "Description",
|
|
contact: "Contact",
|
|
};
|
|
|
|
const mockStore = useQueryCopilot.getState();
|
|
mockStore.correlationId = "mocked-correlation-id";
|
|
mockStore.notebookServerInfo = {
|
|
notebookServerEndpoint: "mocked-endpoint",
|
|
authToken: "mocked-token",
|
|
forwardingId: "mocked-forwarding-id",
|
|
};
|
|
|
|
const feedbackUri = userContext.features.disableCopilotPhoenixGateaway
|
|
? createUri("https://copilotorchestrater.azurewebsites.net/", "feedback")
|
|
: createUri(useQueryCopilot.getState().notebookServerInfo.notebookServerEndpoint, "public/feedback");
|
|
|
|
it("should call fetch with the payload with like", async () => {
|
|
const mockFetch = jest.fn().mockResolvedValueOnce({});
|
|
|
|
globalThis.fetch = mockFetch;
|
|
await SubmitFeedback({
|
|
databaseId: "test",
|
|
containerId: "test",
|
|
mode: "User",
|
|
params: {
|
|
likeQuery: true,
|
|
generatedQuery: "GeneratedQuery",
|
|
userPrompt: "UserPrompt",
|
|
description: "Description",
|
|
contact: "Contact",
|
|
},
|
|
explorer: new Explorer(),
|
|
});
|
|
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
feedbackUri,
|
|
expect.objectContaining({
|
|
headers: expect.objectContaining({
|
|
"x-ms-correlationid": "mocked-correlation-id",
|
|
}),
|
|
}),
|
|
);
|
|
|
|
const actualBody = JSON.parse(mockFetch.mock.calls[0][1].body);
|
|
expect(actualBody).toEqual(payload);
|
|
});
|
|
|
|
it("should call fetch with the payload with unlike and empty parameters", async () => {
|
|
payload.like = "dislike";
|
|
payload.description = "";
|
|
payload.contact = "";
|
|
const mockFetch = jest.fn().mockResolvedValueOnce({});
|
|
|
|
globalThis.fetch = mockFetch;
|
|
|
|
await SubmitFeedback({
|
|
databaseId: "test",
|
|
containerId: "test",
|
|
mode: "User",
|
|
params: {
|
|
likeQuery: false,
|
|
generatedQuery: "GeneratedQuery",
|
|
userPrompt: "UserPrompt",
|
|
description: undefined,
|
|
contact: undefined,
|
|
},
|
|
explorer: new Explorer(),
|
|
});
|
|
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
feedbackUri,
|
|
expect.objectContaining({
|
|
method: "POST",
|
|
headers: {
|
|
"content-type": "application/json",
|
|
"x-ms-correlationid": "mocked-correlation-id",
|
|
Authorization: "token mocked-token",
|
|
},
|
|
}),
|
|
);
|
|
|
|
const actualBody = JSON.parse(mockFetch.mock.calls[0][1].body);
|
|
expect(actualBody).toEqual(payload);
|
|
});
|
|
|
|
it("should handle errors and call handleError", async () => {
|
|
globalThis.fetch = jest.fn().mockRejectedValueOnce(new Error("Mock error"));
|
|
|
|
await SubmitFeedback({
|
|
databaseId: "test",
|
|
containerId: "test",
|
|
mode: "User",
|
|
params: {
|
|
likeQuery: true,
|
|
generatedQuery: "GeneratedQuery",
|
|
userPrompt: "UserPrompt",
|
|
description: "Description",
|
|
contact: "Contact",
|
|
},
|
|
explorer: new Explorer(),
|
|
}).catch((error) => {
|
|
// eslint-disable-next-line jest/no-conditional-expect
|
|
expect(error.message).toEqual("Mock error");
|
|
});
|
|
|
|
expect(handleError).toHaveBeenCalledWith(new Error("Mock error"), expect.any(String));
|
|
});
|
|
});
|
|
});
|