Remove Explorer.defaultExperience (#680)

Co-authored-by: Steve Faulkner <southpolesteve@gmail.com>
This commit is contained in:
Hardikkumar Nai
2021-05-05 23:30:01 +05:30
committed by GitHub
parent d1d28885d0
commit fdd12b41c4
26 changed files with 77 additions and 277 deletions

View File

@@ -1,133 +1,67 @@
import * as Constants from "../Common/Constants";
import * as DataModels from "../Contracts/DataModels";
import * as ViewModels from "../Contracts/ViewModels";
import { userContext } from "../UserContext";
import { DefaultExperienceUtility } from "./DefaultExperienceUtility";
describe("Default Experience Utility", () => {
describe("getDefaultExperienceFromApiKind()", () => {
function runScenario(apiKind: number, expectedExperience: string): void {
function runScenario(apiKind: number, expectedExperience: typeof userContext.apiType): void {
const resolvedExperience = DefaultExperienceUtility.getDefaultExperienceFromApiKind(apiKind);
expect(resolvedExperience).toEqual(expectedExperience);
}
describe("On SQL", () => {
it("should return SQL", () => runScenario(DataModels.ApiKind.SQL, Constants.DefaultAccountExperience.DocumentDB));
it("should return SQL", () => runScenario(DataModels.ApiKind.SQL, "SQL"));
});
describe("On MongoDB", () => {
it("should return MongoDB", () =>
runScenario(DataModels.ApiKind.MongoDB, Constants.DefaultAccountExperience.MongoDB));
it("should return MongoDB", () => runScenario(DataModels.ApiKind.MongoDB, "Mongo"));
});
describe("On Table", () => {
it("should return Table", () => runScenario(DataModels.ApiKind.Table, Constants.DefaultAccountExperience.Table));
it("should return Table", () => runScenario(DataModels.ApiKind.Table, "Tables"));
});
describe("On Cassandra", () => {
it("should return Cassandra", () =>
runScenario(DataModels.ApiKind.Cassandra, Constants.DefaultAccountExperience.Cassandra));
it("should return Cassandra", () => runScenario(DataModels.ApiKind.Cassandra, "Cassandra"));
});
describe("On Graph", () => {
it("should return Graph", () => runScenario(DataModels.ApiKind.Graph, Constants.DefaultAccountExperience.Graph));
it("should return Graph", () => runScenario(DataModels.ApiKind.Graph, "Gremlin"));
});
describe("On unknown", () => {
it("should return Default", () => runScenario(-1, Constants.DefaultAccountExperience.Default));
it("should return Default", () => runScenario(-1, "SQL"));
});
});
describe("getApiKindFromDefaultExperience()", () => {
function runScenario(defaultExperience: string, expectedApiKind: number): void {
function runScenario(defaultExperience: typeof userContext.apiType, expectedApiKind: number): void {
const resolvedApiKind = DefaultExperienceUtility.getApiKindFromDefaultExperience(defaultExperience);
expect(resolvedApiKind).toEqual(expectedApiKind);
}
describe("On SQL", () => {
it("should return SQL", () => runScenario(Constants.DefaultAccountExperience.DocumentDB, DataModels.ApiKind.SQL));
it("should return SQL", () => runScenario("SQL", DataModels.ApiKind.SQL));
});
describe("On MongoDB", () => {
it("should return MongoDB", () =>
runScenario(Constants.DefaultAccountExperience.MongoDB, DataModels.ApiKind.MongoDB));
it("should return MongoDB", () => runScenario("Mongo", DataModels.ApiKind.MongoDB));
});
describe("On Table", () => {
it("should return Table", () => runScenario(Constants.DefaultAccountExperience.Table, DataModels.ApiKind.Table));
it("should return Table", () => runScenario("Tables", DataModels.ApiKind.Table));
});
describe("On Cassandra", () => {
it("should return Cassandra", () =>
runScenario(Constants.DefaultAccountExperience.Cassandra, DataModels.ApiKind.Cassandra));
it("should return Cassandra", () => runScenario("Cassandra", DataModels.ApiKind.Cassandra));
});
describe("On Graph", () => {
it("should return Graph", () => runScenario(Constants.DefaultAccountExperience.Graph, DataModels.ApiKind.Graph));
it("should return Graph", () => runScenario("Gremlin", DataModels.ApiKind.Graph));
});
describe("On null", () => {
it("should return SQL", () => runScenario(null, DataModels.ApiKind.SQL));
});
});
describe("getDefaultExperienceFromDatabaseAccount()", () => {
function runScenario(databaseAccount: DataModels.DatabaseAccount, expectedDefaultExperience: string): void {
const resolvedExperience = DefaultExperienceUtility.getDefaultExperienceFromDatabaseAccount(databaseAccount);
expect(resolvedExperience).toEqual(expectedDefaultExperience);
}
const databaseAccountWithWrongTagsAndCapabilities: DataModels.DatabaseAccount = {
id: "test",
kind: "GlobalDocumentDB",
name: "test",
location: "somewhere",
type: "DocumentDB",
tags: {
defaultExperience: "Gremlin (graph)",
},
properties: {
documentEndpoint: "",
cassandraEndpoint: "",
gremlinEndpoint: "",
tableEndpoint: "",
capabilities: [
{
name: Constants.CapabilityNames.EnableGremlin,
description: "something",
},
],
},
};
const databaseAccountWithApiKind: DataModels.DatabaseAccount = {
id: "test",
kind: Constants.AccountKind.MongoDB,
name: "test",
location: "somewhere",
type: "DocumentDB",
tags: {},
properties: {
documentEndpoint: "",
cassandraEndpoint: "",
gremlinEndpoint: "",
tableEndpoint: "",
capabilities: [
{
name: Constants.CapabilityNames.EnableGremlin,
description: "something",
},
],
},
};
describe("Disregard tags", () => {
it("should return Graph", () =>
runScenario(databaseAccountWithWrongTagsAndCapabilities, Constants.DefaultAccountExperience.Graph));
});
describe("Respect Kind over capabilities", () => {
it("should return MongoDB", () =>
runScenario(databaseAccountWithApiKind, Constants.DefaultAccountExperience.MongoDB));
});
});
});

View File

@@ -1,132 +1,47 @@
import * as _ from "underscore";
import * as Constants from "../Common/Constants";
import * as DataModels from "../Contracts/DataModels";
import { userContext } from "../UserContext";
export class DefaultExperienceUtility {
public static getDefaultExperienceFromDatabaseAccount(databaseAccount: DataModels.DatabaseAccount): string | null {
if (!databaseAccount) {
return null;
}
const kind: string =
databaseAccount && databaseAccount.kind && databaseAccount.kind && databaseAccount.kind.toLowerCase();
const capabilities = (databaseAccount.properties && databaseAccount.properties.capabilities) || [];
return DefaultExperienceUtility._getDefaultExperience(kind, capabilities);
}
public static getApiKindFromDefaultExperience(defaultExperience: string): DataModels.ApiKind {
public static getApiKindFromDefaultExperience(defaultExperience: typeof userContext.apiType): DataModels.ApiKind {
if (!defaultExperience) {
return DataModels.ApiKind.SQL;
}
switch (defaultExperience) {
case Constants.DefaultAccountExperience.DocumentDB:
case "SQL":
return DataModels.ApiKind.SQL;
case Constants.DefaultAccountExperience.MongoDB:
case Constants.DefaultAccountExperience.ApiForMongoDB:
case "Mongo":
return DataModels.ApiKind.MongoDB;
case Constants.DefaultAccountExperience.Table:
case "Tables":
return DataModels.ApiKind.Table;
case Constants.DefaultAccountExperience.Cassandra:
case "Cassandra":
return DataModels.ApiKind.Cassandra;
case Constants.DefaultAccountExperience.Graph:
case "Gremlin":
return DataModels.ApiKind.Graph;
default:
return DataModels.ApiKind.SQL;
}
}
public static getDefaultExperienceFromApiKind(apiKind: DataModels.ApiKind): string {
public static getDefaultExperienceFromApiKind(apiKind: DataModels.ApiKind): typeof userContext.apiType {
if (apiKind == null) {
return Constants.DefaultAccountExperience.Default;
return "SQL";
}
switch (apiKind) {
case DataModels.ApiKind.SQL:
return Constants.DefaultAccountExperience.DocumentDB;
return "SQL";
case DataModels.ApiKind.MongoDB:
case DataModels.ApiKind.MongoDBCompute:
return Constants.DefaultAccountExperience.MongoDB;
return "Mongo";
case DataModels.ApiKind.Table:
return Constants.DefaultAccountExperience.Table;
return "Tables";
case DataModels.ApiKind.Cassandra:
return Constants.DefaultAccountExperience.Cassandra;
return "Cassandra";
case DataModels.ApiKind.Graph:
return Constants.DefaultAccountExperience.Graph;
return "Gremlin";
default:
return Constants.DefaultAccountExperience.Default;
return "SQL";
}
}
private static _getDefaultExperience(kind: string, capabilities: DataModels.Capability[]): string {
const defaultDefaultExperience: string = Constants.DefaultAccountExperience.DocumentDB;
const defaultExperienceFromKind: string = DefaultExperienceUtility._getDefaultExperienceFromAccountKind(kind) || "";
const defaultExperienceFromCapabilities: string =
DefaultExperienceUtility._getDefaultExperienceFromAccountCapabilities(capabilities) || "";
if (!!defaultExperienceFromKind) {
return defaultExperienceFromKind;
}
if (!!defaultExperienceFromCapabilities) {
return defaultExperienceFromCapabilities;
}
return defaultDefaultExperience;
}
private static _getDefaultExperienceFromAccountKind(kind: string): string | null {
if (!kind) {
return null;
}
if (kind.toLowerCase() === Constants.AccountKind.MongoDB.toLowerCase()) {
return Constants.DefaultAccountExperience.MongoDB;
}
if (kind.toLowerCase() === Constants.AccountKind.Parse.toLowerCase()) {
return Constants.DefaultAccountExperience.MongoDB;
}
return null;
}
private static _getDefaultExperienceFromAccountCapabilities(capabilities: DataModels.Capability[]): string | null {
if (!capabilities) {
return null;
}
if (!Array.isArray(capabilities)) {
return null;
}
const enableTable = DefaultExperienceUtility._findCapability(capabilities, Constants.CapabilityNames.EnableTable);
if (enableTable) {
return Constants.DefaultAccountExperience.Table;
}
const enableGremlin = DefaultExperienceUtility._findCapability(
capabilities,
Constants.CapabilityNames.EnableGremlin
);
if (enableGremlin) {
return Constants.DefaultAccountExperience.Graph;
}
const enableCassandra = DefaultExperienceUtility._findCapability(
capabilities,
Constants.CapabilityNames.EnableCassandra
);
if (enableCassandra) {
return Constants.DefaultAccountExperience.Cassandra;
}
return null;
}
private static _findCapability(capabilities: DataModels.Capability[], capabilityName: string): DataModels.Capability {
return _.find(capabilities, (capability) => {
return capability && capability.name && capability.name.toLowerCase() === capabilityName.toLowerCase();
});
}
}