Fixed a bug with deleting models from list in import model wizard (#12798)

This commit is contained in:
Leila Lali
2020-10-08 16:46:26 -07:00
committed by GitHub
parent b910bf2f33
commit 2820fb4f15
4 changed files with 101 additions and 3 deletions

View File

@@ -213,6 +213,7 @@ export const invalidModelImportTargetError = localize('models.invalidModelImport
export const columnDataTypeMismatchWarning = localize('models.columnDataTypeMismatchWarning', "The data type of the source table column does not match the required input fields type.");
export const outputColumnDataTypeNotSupportedWarning = localize('models.outputColumnDataTypeNotSupportedWarning', "The data type of output column does not match the output fields type.");
export const modelNameRequiredError = localize('models.modelNameRequiredError', "Model name is required.");
export const modelsRequiredError = localize('models.modelsRequiredError', "Please select at least one model to import.");
export const updateModelFailedError = localize('models.updateModelFailedError', "Failed to update the model");
export const modelSchemaIsAcceptedMessage = localize('models.modelSchemaIsAcceptedMessage', "Table meets requirements!");
export const selectModelsTableMessage = localize('models.selectModelsTableMessage', "Select models table");

View File

@@ -0,0 +1,90 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as should from 'should';
import 'mocha';
import { createContext, ParentDialog } from './utils';
import { ModelDetailsPage } from '../../../views/models/modelDetailsPage';
describe('Model Details Page', () => {
it('Should create view components successfully ', async function (): Promise<void> {
let testContext = createContext();
let parent = new ParentDialog(testContext.apiWrapper.object);
let view = new ModelDetailsPage(testContext.apiWrapper.object, parent);
view.registerComponent(testContext.view.modelBuilder);
should.notEqual(view.component, undefined);
});
it('Should load data successfully ', async function (): Promise<void> {
let testContext = createContext();
let parent = new ParentDialog(testContext.apiWrapper.object);
let view = new ModelDetailsPage(testContext.apiWrapper.object, parent);
view.modelsViewData = [
{
modelData: 'motel1'
}
];
view.registerComponent(testContext.view.modelBuilder);
await view.refresh();
should.notEqual(view.data, undefined);
should.equal(view.data?.length, 1);
});
it('Should not validate the page if not model is selected ', async function (): Promise<void> {
let testContext = createContext();
let parent = new ParentDialog(testContext.apiWrapper.object);
let view = new ModelDetailsPage(testContext.apiWrapper.object, parent);
view.modelsViewData = [
];
view.registerComponent(testContext.view.modelBuilder);
await view.refresh();
await should(view.validate()).be.resolvedWith(false);
});
it('Should not validate the page if model does not have name', async function (): Promise<void> {
let testContext = createContext();
let parent = new ParentDialog(testContext.apiWrapper.object);
let view = new ModelDetailsPage(testContext.apiWrapper.object, parent);
view.modelsViewData = [
{
modelData: 'motel1',
modelDetails: {
modelName: ''
}
}
];
view.registerComponent(testContext.view.modelBuilder);
await view.refresh();
await should(view.validate()).be.resolvedWith(false);
});
it('Should validate the page if model is valid', async function (): Promise<void> {
let testContext = createContext();
let parent = new ParentDialog(testContext.apiWrapper.object);
let view = new ModelDetailsPage(testContext.apiWrapper.object, parent);
view.modelsViewData = [
{
modelData: 'motel1',
modelDetails: {
modelName: 'name'
}
}
];
view.registerComponent(testContext.view.modelBuilder);
await view.refresh();
await should(view.validate()).be.resolvedWith(true);
});
});

View File

@@ -73,7 +73,11 @@ export class ModelDetailsPage extends ModelViewBase implements IPageView, IDataC
}
public validate(): Promise<boolean> {
if (this.data && this.data.length > 0 && !this.data.find(x => !x.modelDetails?.modelName)) {
if (!this.data || this.data.length === 0) {
this.showErrorMessage(constants.modelsRequiredError);
return Promise.resolve(false);
}
else if (this.data && this.data.length > 0 && !this.data.find(x => !x.modelDetails?.modelName)) {
return Promise.resolve(true);
} else {
this.showErrorMessage(constants.modelNameRequiredError);

View File

@@ -31,7 +31,7 @@ export class ModelsDetailsTableComponent extends ModelViewBase implements IDataC
.withProperties<azdata.DeclarativeTableProperties>(
{
columns: [
{ // Name
{ // File Name
displayName: constants.modelFileName,
ariaLabel: constants.modelFileName,
valueType: azdata.DeclarativeDataType.string,
@@ -57,7 +57,7 @@ export class ModelsDetailsTableComponent extends ModelViewBase implements IDataC
...constants.cssStyles.tableRow
},
},
{ // Created
{ // Description
displayName: constants.modelDescription,
ariaLabel: constants.modelDescription,
valueType: azdata.DeclarativeDataType.component,
@@ -121,6 +121,9 @@ export class ModelsDetailsTableComponent extends ModelViewBase implements IDataC
let tableData: any[][] = [];
tableData = tableData.concat(models.map(model => this.createTableRow(model)));
this._table.data = tableData;
if (tableData.length === 0) {
this._table.dataValues = tableData;
}
}
}