mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-03-29 21:18:46 +00:00
* added recursion and inition decorators * working version * added todo comment and removed console.log * Added Recursive add * removed type requirement * proper resolution of promises * added custom element and base class * Made selfServe standalone page * Added custom renderer as async type * Added overall defaults * added inital open from data explorer * removed landingpage * added feature for self serve type * renamed sqlx->example and added invalid type * Added comments for Example * removed unnecessary changes * Resolved PR comments Added tests Moved onSubmt and initialize inside base class Moved testExplorer to separate folder made fields of SelfServe Class non static * fixed lint errors * fixed compilation errors * Removed reactbinding changes * renamed dropdown -> choice * Added SelfServeComponent * Addressed PR comments * merged master * added selfservetype.none for emulator and hosted experience * fixed formatting errors * Removed "any" type * undid package.json changes
278 lines
8.0 KiB
TypeScript
278 lines
8.0 KiB
TypeScript
import {
|
|
CommonInputTypes,
|
|
mapToSmartUiDescriptor,
|
|
SelfServeBaseClass,
|
|
updateContextWithDecorator
|
|
} from "./SelfServeUtils";
|
|
import { InputType, UiType } from "./../Explorer/Controls/SmartUi/SmartUiComponent";
|
|
|
|
describe("SelfServeUtils", () => {
|
|
it("initialize should be declared for self serve classes", () => {
|
|
class Test extends SelfServeBaseClass {
|
|
public onSubmit = async (): Promise<void> => {
|
|
return;
|
|
};
|
|
public initialize: () => Promise<Map<string, InputType>>;
|
|
}
|
|
expect(() => new Test().toSelfServeDescriptor()).toThrow("initialize() was not declared for the class 'Test'");
|
|
});
|
|
|
|
it("onSubmit should be declared for self serve classes", () => {
|
|
class Test extends SelfServeBaseClass {
|
|
public onSubmit: () => Promise<void>;
|
|
public initialize = async (): Promise<Map<string, InputType>> => {
|
|
return undefined;
|
|
};
|
|
}
|
|
expect(() => new Test().toSelfServeDescriptor()).toThrow("onSubmit() was not declared for the class 'Test'");
|
|
});
|
|
|
|
it("@SmartUi decorator must be present for self serve classes", () => {
|
|
class Test extends SelfServeBaseClass {
|
|
public onSubmit = async (): Promise<void> => {
|
|
return;
|
|
};
|
|
public initialize = async (): Promise<Map<string, InputType>> => {
|
|
return undefined;
|
|
};
|
|
}
|
|
expect(() => new Test().toSelfServeDescriptor()).toThrow(
|
|
"@SmartUi decorator was not declared for the class 'Test'"
|
|
);
|
|
});
|
|
|
|
it("updateContextWithDecorator", () => {
|
|
const context = new Map<string, CommonInputTypes>();
|
|
updateContextWithDecorator(context, "dbThroughput", "testClass", "max", 1);
|
|
updateContextWithDecorator(context, "dbThroughput", "testClass", "min", 2);
|
|
updateContextWithDecorator(context, "collThroughput", "testClass", "max", 5);
|
|
expect(context.size).toEqual(2);
|
|
expect(context.get("dbThroughput")).toEqual({ id: "dbThroughput", max: 1, min: 2 });
|
|
expect(context.get("collThroughput")).toEqual({ id: "collThroughput", max: 5 });
|
|
});
|
|
|
|
it("mapToSmartUiDescriptor", () => {
|
|
const context: Map<string, CommonInputTypes> = new Map([
|
|
[
|
|
"dbThroughput",
|
|
{
|
|
id: "dbThroughput",
|
|
dataFieldName: "dbThroughput",
|
|
type: "number",
|
|
label: "Database Throughput",
|
|
min: 1,
|
|
max: 5,
|
|
step: 1,
|
|
uiType: UiType.Slider
|
|
}
|
|
],
|
|
[
|
|
"collThroughput",
|
|
{
|
|
id: "collThroughput",
|
|
dataFieldName: "collThroughput",
|
|
type: "number",
|
|
label: "Coll Throughput",
|
|
min: 1,
|
|
max: 5,
|
|
step: 1,
|
|
uiType: UiType.Spinner
|
|
}
|
|
],
|
|
[
|
|
"invalidThroughput",
|
|
{
|
|
id: "invalidThroughput",
|
|
dataFieldName: "invalidThroughput",
|
|
type: "boolean",
|
|
label: "Invalid Coll Throughput",
|
|
min: 1,
|
|
max: 5,
|
|
step: 1,
|
|
uiType: UiType.Spinner,
|
|
errorMessage: "label, truelabel and falselabel are required for boolean input"
|
|
}
|
|
],
|
|
[
|
|
"collName",
|
|
{
|
|
id: "collName",
|
|
dataFieldName: "collName",
|
|
type: "string",
|
|
label: "Coll Name",
|
|
placeholder: "placeholder text"
|
|
}
|
|
],
|
|
[
|
|
"enableLogging",
|
|
{
|
|
id: "enableLogging",
|
|
dataFieldName: "enableLogging",
|
|
type: "boolean",
|
|
label: "Enable Logging",
|
|
trueLabel: "Enable",
|
|
falseLabel: "Disable"
|
|
}
|
|
],
|
|
[
|
|
"invalidEnableLogging",
|
|
{
|
|
id: "invalidEnableLogging",
|
|
dataFieldName: "invalidEnableLogging",
|
|
type: "boolean",
|
|
label: "Invalid Enable Logging",
|
|
placeholder: "placeholder text"
|
|
}
|
|
],
|
|
[
|
|
"regions",
|
|
{
|
|
id: "regions",
|
|
dataFieldName: "regions",
|
|
type: "object",
|
|
label: "Regions",
|
|
choices: [
|
|
{ label: "South West US", key: "SWUS" },
|
|
{ label: "North Central US", key: "NCUS" },
|
|
{ label: "East US 2", key: "EUS2" }
|
|
]
|
|
}
|
|
],
|
|
[
|
|
"invalidRegions",
|
|
{
|
|
id: "invalidRegions",
|
|
dataFieldName: "invalidRegions",
|
|
type: "object",
|
|
label: "Invalid Regions",
|
|
placeholder: "placeholder text"
|
|
}
|
|
]
|
|
]);
|
|
const expectedDescriptor = {
|
|
root: {
|
|
id: "root",
|
|
children: [
|
|
{
|
|
id: "dbThroughput",
|
|
input: {
|
|
id: "dbThroughput",
|
|
dataFieldName: "dbThroughput",
|
|
type: "number",
|
|
label: "Database Throughput",
|
|
min: 1,
|
|
max: 5,
|
|
step: 1,
|
|
uiType: "Slider"
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "collThroughput",
|
|
input: {
|
|
id: "collThroughput",
|
|
dataFieldName: "collThroughput",
|
|
type: "number",
|
|
label: "Coll Throughput",
|
|
min: 1,
|
|
max: 5,
|
|
step: 1,
|
|
uiType: "Spinner"
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "invalidThroughput",
|
|
input: {
|
|
id: "invalidThroughput",
|
|
dataFieldName: "invalidThroughput",
|
|
type: "boolean",
|
|
label: "Invalid Coll Throughput",
|
|
min: 1,
|
|
max: 5,
|
|
step: 1,
|
|
uiType: "Spinner",
|
|
errorMessage: "label, truelabel and falselabel are required for boolean input 'invalidThroughput'."
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "collName",
|
|
input: {
|
|
id: "collName",
|
|
dataFieldName: "collName",
|
|
type: "string",
|
|
label: "Coll Name",
|
|
placeholder: "placeholder text"
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "enableLogging",
|
|
input: {
|
|
id: "enableLogging",
|
|
dataFieldName: "enableLogging",
|
|
type: "boolean",
|
|
label: "Enable Logging",
|
|
trueLabel: "Enable",
|
|
falseLabel: "Disable"
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "invalidEnableLogging",
|
|
input: {
|
|
id: "invalidEnableLogging",
|
|
dataFieldName: "invalidEnableLogging",
|
|
type: "boolean",
|
|
label: "Invalid Enable Logging",
|
|
placeholder: "placeholder text",
|
|
errorMessage: "label, truelabel and falselabel are required for boolean input 'invalidEnableLogging'."
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "regions",
|
|
input: {
|
|
id: "regions",
|
|
dataFieldName: "regions",
|
|
type: "object",
|
|
label: "Regions",
|
|
choices: [
|
|
{ label: "South West US", key: "SWUS" },
|
|
{ label: "North Central US", key: "NCUS" },
|
|
{ label: "East US 2", key: "EUS2" }
|
|
]
|
|
},
|
|
children: [] as Node[]
|
|
},
|
|
{
|
|
id: "invalidRegions",
|
|
input: {
|
|
id: "invalidRegions",
|
|
dataFieldName: "invalidRegions",
|
|
type: "object",
|
|
label: "Invalid Regions",
|
|
placeholder: "placeholder text",
|
|
errorMessage: "label and choices are required for Choice input 'invalidRegions'."
|
|
},
|
|
children: [] as Node[]
|
|
}
|
|
]
|
|
},
|
|
inputNames: [
|
|
"dbThroughput",
|
|
"collThroughput",
|
|
"invalidThroughput",
|
|
"collName",
|
|
"enableLogging",
|
|
"invalidEnableLogging",
|
|
"regions",
|
|
"invalidRegions"
|
|
]
|
|
};
|
|
const descriptor = mapToSmartUiDescriptor(context);
|
|
expect(descriptor).toEqual(expectedDescriptor);
|
|
});
|
|
});
|