2021-04-01 04:14:07 +05:30
|
|
|
jest.mock("../../Common/dataAccess/deleteDatabase");
|
|
|
|
jest.mock("../../Shared/Telemetry/TelemetryProcessor");
|
2021-06-24 11:56:33 -07:00
|
|
|
import { mount, shallow } from "enzyme";
|
2021-04-01 04:14:07 +05:30
|
|
|
import * as ko from "knockout";
|
|
|
|
import React from "react";
|
|
|
|
import { deleteDatabase } from "../../Common/dataAccess/deleteDatabase";
|
|
|
|
import DeleteFeedback from "../../Common/DeleteFeedback";
|
|
|
|
import { ApiKind, DatabaseAccount } from "../../Contracts/DataModels";
|
|
|
|
import { Collection, Database } from "../../Contracts/ViewModels";
|
|
|
|
import { Action, ActionModifiers } from "../../Shared/Telemetry/TelemetryConstants";
|
|
|
|
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
|
|
|
|
import { updateUserContext } from "../../UserContext";
|
|
|
|
import Explorer from "../Explorer";
|
2021-06-18 11:25:08 -07:00
|
|
|
import { TabsManager } from "../Tabs/TabsManager";
|
|
|
|
import { useDatabases } from "../useDatabases";
|
2021-06-24 11:56:33 -07:00
|
|
|
import { useSelectedNode } from "../useSelectedNode";
|
2021-04-01 04:14:07 +05:30
|
|
|
import { DeleteDatabaseConfirmationPanel } from "./DeleteDatabaseConfirmationPanel";
|
|
|
|
|
|
|
|
describe("Delete Database Confirmation Pane", () => {
|
2021-06-24 11:56:33 -07:00
|
|
|
const selectedDatabaseId = "testDatabase";
|
|
|
|
let fakeExplorer: Explorer;
|
|
|
|
let database: Database;
|
|
|
|
|
|
|
|
beforeAll(() => {
|
|
|
|
updateUserContext({
|
|
|
|
databaseAccount: {
|
|
|
|
name: "testDatabaseAccountName",
|
|
|
|
properties: {
|
|
|
|
cassandraEndpoint: "testEndpoint",
|
|
|
|
},
|
|
|
|
id: "testDatabaseAccountId",
|
|
|
|
} as DatabaseAccount,
|
|
|
|
apiType: "SQL",
|
2021-04-01 04:14:07 +05:30
|
|
|
});
|
2021-06-24 11:56:33 -07:00
|
|
|
(deleteDatabase as jest.Mock).mockResolvedValue(undefined);
|
|
|
|
(TelemetryProcessor.trace as jest.Mock).mockReturnValue(undefined);
|
2021-04-01 04:14:07 +05:30
|
|
|
});
|
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
beforeEach(() => {
|
|
|
|
fakeExplorer = {} as Explorer;
|
2021-04-01 04:14:07 +05:30
|
|
|
fakeExplorer.refreshAllDatabases = () => undefined;
|
2021-06-18 11:25:08 -07:00
|
|
|
fakeExplorer.tabsManager = new TabsManager();
|
2021-04-01 04:14:07 +05:30
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
database = {} as Database;
|
|
|
|
database.collections = ko.observableArray<Collection>([{ id: ko.observable("testCollection") } as Collection]);
|
|
|
|
database.id = ko.observable<string>(selectedDatabaseId);
|
|
|
|
database.nodeKind = "Database";
|
2021-06-18 11:25:08 -07:00
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
useDatabases.getState().addDatabases([database]);
|
|
|
|
useSelectedNode.getState().setSelectedNode(database);
|
|
|
|
});
|
2021-04-01 04:14:07 +05:30
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
afterEach(() => {
|
|
|
|
useDatabases.getState().clearDatabases();
|
|
|
|
useSelectedNode.getState().setSelectedNode(undefined);
|
|
|
|
});
|
2021-04-01 04:14:07 +05:30
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
it("shouldRecordFeedback() should return true if last non empty database or is last database that has shared throughput", () => {
|
|
|
|
const wrapper = shallow(<DeleteDatabaseConfirmationPanel explorer={fakeExplorer} />);
|
|
|
|
expect(wrapper.exists(".deleteDatabaseFeedback")).toBe(true);
|
2021-04-01 04:14:07 +05:30
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
useDatabases.getState().addDatabases([database]);
|
|
|
|
wrapper.setProps({ explorer: fakeExplorer });
|
|
|
|
expect(wrapper.exists(".deleteDatabaseFeedback")).toBe(false);
|
|
|
|
useDatabases.getState().clearDatabases();
|
|
|
|
});
|
2021-04-01 04:14:07 +05:30
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
it("Should call delete database", () => {
|
|
|
|
const wrapper = mount(<DeleteDatabaseConfirmationPanel explorer={fakeExplorer} />);
|
|
|
|
expect(wrapper).toMatchSnapshot();
|
|
|
|
expect(wrapper.exists("#confirmDatabaseId")).toBe(true);
|
|
|
|
|
|
|
|
wrapper
|
|
|
|
.find("#confirmDatabaseId")
|
|
|
|
.hostNodes()
|
|
|
|
.simulate("change", { target: { value: selectedDatabaseId } });
|
|
|
|
expect(wrapper.exists("button")).toBe(true);
|
|
|
|
wrapper.find("button").hostNodes().simulate("submit");
|
|
|
|
expect(deleteDatabase).toHaveBeenCalledWith(selectedDatabaseId);
|
|
|
|
wrapper.unmount();
|
|
|
|
});
|
2021-04-01 04:14:07 +05:30
|
|
|
|
2021-06-24 11:56:33 -07:00
|
|
|
it("should record feedback", async () => {
|
|
|
|
const wrapper = mount(<DeleteDatabaseConfirmationPanel explorer={fakeExplorer} />);
|
|
|
|
expect(wrapper.exists("#confirmDatabaseId")).toBe(true);
|
|
|
|
wrapper
|
|
|
|
.find("#confirmDatabaseId")
|
|
|
|
.hostNodes()
|
|
|
|
.simulate("change", { target: { value: selectedDatabaseId } });
|
|
|
|
|
|
|
|
expect(wrapper.exists("#deleteDatabaseFeedbackInput")).toBe(true);
|
|
|
|
const feedbackText = "Test delete Database feedback text";
|
|
|
|
wrapper
|
|
|
|
.find("#deleteDatabaseFeedbackInput")
|
|
|
|
.hostNodes()
|
|
|
|
.simulate("change", { target: { value: feedbackText } });
|
|
|
|
|
|
|
|
expect(wrapper.exists("#sidePanelOkButton")).toBe(true);
|
|
|
|
wrapper.find("#sidePanelOkButton").hostNodes().simulate("submit");
|
|
|
|
expect(deleteDatabase).toHaveBeenCalledWith(selectedDatabaseId);
|
|
|
|
|
|
|
|
const deleteFeedback = new DeleteFeedback(
|
|
|
|
"testDatabaseAccountId",
|
|
|
|
"testDatabaseAccountName",
|
|
|
|
ApiKind.SQL,
|
|
|
|
feedbackText
|
|
|
|
);
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
|
|
expect(TelemetryProcessor.trace).toHaveBeenCalledWith(Action.DeleteDatabase, ActionModifiers.Mark, {
|
|
|
|
message: JSON.stringify(deleteFeedback, Object.getOwnPropertyNames(deleteFeedback)),
|
2021-04-01 04:14:07 +05:30
|
|
|
});
|
2021-06-24 11:56:33 -07:00
|
|
|
wrapper.unmount();
|
2021-04-01 04:14:07 +05:30
|
|
|
});
|
|
|
|
});
|