Initial add database reference dialog UI (#11944)

* initial dialog

* got enabling working

* add tests

* cleanup

* add test coverage for systemDbRadioButtonClick()

* change DAC to .dacpac

* remove isEmptyOrUndefined
This commit is contained in:
Kim Santiago
2020-08-27 17:22:40 -07:00
committed by GitHub
parent bf278c39bd
commit 70399be699
7 changed files with 574 additions and 10 deletions

View File

@@ -89,6 +89,26 @@ export const profile = localize('profile', "Profile");
export const selectConnection = localize('selectConnection', "Select connection");
export const connection = localize('connection', "Connection");
// Add Database Reference dialog strings
export const addDatabaseReferenceDialogName = localize('addDatabaseReferencedialogName', "Add database reference");
export const addDatabaseReferenceOkButtonText = localize('addDatabaseReferenceOkButtonText', "Add reference");
export const referenceRadioButtonsGroupTitle = localize('referenceRadioButtonsGroupTitle', "Type");
export const systemDatabaseRadioButtonTitle = localize('systemDatabaseRadioButtonTitle', "System database");
export const dacpacText = localize('dacpacText', "Data-tier application (.dacpac)");
export const dacpacPlaceholder = localize('dacpacPlaceholder', "Select .dacpac");
export const loadDacpacButton = localize('loadDacpacButton', "Select .dacpac");
export const locationDropdown = localize('locationDropdown', "Location");
export const sameDatabase = localize('sameDatabase', "Same database");
export const differentDbSameServer = localize('differentDbSameServer', "Different database, same server");
export const differentDbDifferentServer = localize('differentDbDifferentServer', "Different database, different server");
export const systemDbLocationDropdownValues = [differentDbSameServer];
export const locationDropdownValues = [sameDatabase, differentDbSameServer, differentDbDifferentServer];
export const databaseName = localize('databaseName', "Database name");
export const databaseVariable = localize('databaseVariable', "Database variable");
export const serverName = localize('serverName', "Server name");
export const serverVariable = localize('serverVariable', "Server variable");
// Error messages
export const multipleSqlProjFiles = localize('multipleSqlProjFilesSelected', "Multiple .sqlproj files selected; please select only one.");

View File

@@ -9,6 +9,10 @@ export namespace cssStyles {
export const tableHeader = { ...text, 'text-align': 'left', 'border': 'none', 'font-size': '12px', 'font-weight': 'normal', 'color': '#666666' };
export const tableRow = { ...text, 'border-top': 'solid 1px #ccc', 'border-bottom': 'solid 1px #ccc', 'border-left': 'none', 'border-right': 'none', 'font-size': '12px' };
export const titleFontSize = 13;
export const publishDialogLabelWidth = '205px';
export const publishDialogTextboxWidth = '190px';
export const addDatabaseReferenceDialogLabelWidth = '215px';
export const addDatabaseReferenceInputboxWidth = '220px';
}

View File

@@ -0,0 +1,402 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import * as constants from '../common/constants';
import { Project, SystemDatabase, DatabaseReferenceLocation } from '../models/project';
import { cssStyles } from '../common/uiConstants';
import { IconPathHelper } from '../common/iconHelper';
import { ISystemDatabaseReferenceSettings, IDacpacReferenceSettings } from '../models/IDatabaseReferenceSettings';
export enum ReferenceType {
project,
systemDb,
dacpac
}
interface Deferred<T> {
resolve: (result: T | Promise<T>) => void;
reject: (reason: any) => void;
}
export class AddDatabaseReferenceDialog {
public dialog: azdata.window.Dialog;
public addDatabaseReferenceTab: azdata.window.DialogTab;
private view: azdata.ModelView | undefined;
private formBuilder: azdata.FormBuilder | undefined;
private systemDatabaseDropdown: azdata.DropDownComponent | undefined;
private systemDatabaseFormComponent: azdata.FormComponent | undefined;
public dacpacTextbox: azdata.InputBoxComponent | undefined;
private dacpacFormComponent: azdata.FormComponent | undefined;
public locationDropdown: azdata.DropDownComponent | undefined;
public databaseNameTextbox: azdata.InputBoxComponent | undefined;
public databaseVariableTextbox: azdata.InputBoxComponent | undefined;
public serverNameTextbox: azdata.InputBoxComponent | undefined;
public serverVariableTextbox: azdata.InputBoxComponent | undefined;
public currentReferenceType: ReferenceType | undefined;
private referenceLocationMap: Map<string, DatabaseReferenceLocation>;
private toDispose: vscode.Disposable[] = [];
private initDialogComplete: Deferred<void> | undefined;
private initDialogPromise: Promise<void> = new Promise<void>((resolve, reject) => this.initDialogComplete = { resolve, reject });
public addReference: ((proj: Project, settings: ISystemDatabaseReferenceSettings | IDacpacReferenceSettings) => any) | undefined;
constructor(private project: Project) {
this.dialog = azdata.window.createModelViewDialog(constants.addDatabaseReferenceDialogName);
this.addDatabaseReferenceTab = azdata.window.createTab(constants.addDatabaseReferenceDialogName);
this.referenceLocationMap = new Map([
[constants.sameDatabase, DatabaseReferenceLocation.sameDatabase],
[constants.differentDbSameServer, DatabaseReferenceLocation.differentDatabaseSameServer],
[constants.differentDbDifferentServer, DatabaseReferenceLocation.differentDatabaseDifferentServer]
]);
}
public async openDialog(): Promise<void> {
this.initializeDialog();
this.dialog.okButton.label = constants.addDatabaseReferenceOkButtonText;
this.dialog.okButton.enabled = false;
this.toDispose.push(this.dialog.okButton.onClick(async () => await this.addReferenceClick()));
this.dialog.cancelButton.label = constants.cancelButtonText;
azdata.window.openDialog(this.dialog);
await this.initDialogPromise;
}
private dispose(): void {
this.toDispose.forEach(disposable => disposable.dispose());
}
private initializeDialog(): void {
this.initializeTab();
this.dialog.content = [this.addDatabaseReferenceTab];
}
private initializeTab(): void {
this.addDatabaseReferenceTab.registerContent(async view => {
this.view = view;
const radioButtonGroup = this.createRadioButtons();
this.systemDatabaseFormComponent = this.createSystemDatabaseDropdown();
this.dacpacFormComponent = this.createDacpacTextbox();
const locationDropdown = this.createLocationDropdown();
const variableSection = this.createVariableSection();
this.formBuilder = <azdata.FormBuilder>view.modelBuilder.formContainer()
.withFormItems([
{
title: '',
components: [
radioButtonGroup,
this.systemDatabaseFormComponent,
locationDropdown,
variableSection
]
}
], {
horizontal: false
})
.withLayout({
width: '100%'
});
let formModel = this.formBuilder.component();
await view.initializeModel(formModel);
this.initDialogComplete?.resolve();
});
}
public async addReferenceClick(): Promise<void> {
let referenceSettings: ISystemDatabaseReferenceSettings | IDacpacReferenceSettings;
if (this.currentReferenceType === ReferenceType.systemDb) {
referenceSettings = {
databaseName: <string>this.databaseNameTextbox?.value,
systemDb: <string>this.systemDatabaseDropdown?.value === constants.master ? SystemDatabase.master : SystemDatabase.msdb
};
} else { // this.currentReferenceType === ReferenceType.dacpac
referenceSettings = {
databaseName: <string>this.databaseNameTextbox?.value,
databaseLocation: <DatabaseReferenceLocation>this.referenceLocationMap.get(<string>this.locationDropdown?.value),
dacpacFileLocation: vscode.Uri.file(<string>this.dacpacTextbox?.value),
databaseVariable: <string>this.databaseVariableTextbox?.value
};
// TODO: add project reference support
}
await this.addReference!(this.project, referenceSettings);
this.dispose();
}
private createRadioButtons(): azdata.FormComponent {
// TODO: add project reference button
const systemDatabaseRadioButton = this.view!.modelBuilder.radioButton()
.withProperties({
name: 'referenceType',
label: constants.systemDatabaseRadioButtonTitle
}).component();
systemDatabaseRadioButton.checked = true;
systemDatabaseRadioButton.onDidClick(() => {
this.systemDbRadioButtonClick();
});
const dacpacRadioButton = this.view!.modelBuilder.radioButton()
.withProperties({
name: 'referenceType',
label: constants.dacpacText
}).component();
dacpacRadioButton.onDidClick(() => {
this.dacpacRadioButtonClick();
});
this.currentReferenceType = ReferenceType.systemDb;
let flexRadioButtonsModel: azdata.FlexContainer = this.view!.modelBuilder.flexContainer()
.withLayout({ flexFlow: 'column' })
.withItems([systemDatabaseRadioButton, dacpacRadioButton])
.withProperties({ ariaRole: 'radiogroup' })
.component();
return {
component: flexRadioButtonsModel,
title: constants.referenceRadioButtonsGroupTitle
};
}
public systemDbRadioButtonClick(): void {
this.formBuilder!.removeFormItem(<azdata.FormComponent>this.dacpacFormComponent);
this.formBuilder!.insertFormItem(<azdata.FormComponent>this.systemDatabaseFormComponent, 2);
// update dropdown values because only different database, same server is a valid location for system db references
this.locationDropdown!.values = constants.systemDbLocationDropdownValues;
this.currentReferenceType = ReferenceType.systemDb;
this.updateEnabledInputBoxes(true);
this.tryEnableAddReferenceButton();
}
public dacpacRadioButtonClick(): void {
this.formBuilder!.removeFormItem(<azdata.FormComponent>this.systemDatabaseFormComponent);
this.formBuilder!.insertFormItem(<azdata.FormComponent>this.dacpacFormComponent, 2);
this.locationDropdown!.values = constants.locationDropdownValues;
this.locationDropdown!.value = constants.differentDbSameServer;
this.currentReferenceType = ReferenceType.dacpac;
this.updateEnabledInputBoxes();
this.tryEnableAddReferenceButton();
}
private createSystemDatabaseDropdown(): azdata.FormComponent {
this.systemDatabaseDropdown = this.view!.modelBuilder.dropDown().withProperties({
values: [constants.master, constants.msdb],
ariaLabel: constants.databaseNameLabel
}).component();
// only master is a valid system db reference for projects targetting Azure
if (this.project.getProjectTargetPlatform().toLowerCase().includes('azure')) {
this.systemDatabaseDropdown.values?.splice(1);
}
return {
component: this.systemDatabaseDropdown,
title: constants.databaseNameLabel
};
}
private createDacpacTextbox(): azdata.FormComponent {
this.dacpacTextbox = this.view!.modelBuilder.inputBox().withProperties({
ariaLabel: constants.dacpacText,
placeHolder: constants.dacpacPlaceholder,
width: '405px'
}).component();
this.dacpacTextbox.onTextChanged(() => {
this.tryEnableAddReferenceButton();
});
const loadDacpacButton = this.createLoadDacpacButton();
const databaseRow = this.view!.modelBuilder.flexContainer().withItems([this.dacpacTextbox], { flex: '0 0 auto', CSSStyles: { 'margin-right': '10px' } }).withLayout({ flexFlow: 'row', alignItems: 'center' }).component();
databaseRow.insertItem(loadDacpacButton, 1);
return {
component: databaseRow,
title: constants.dacpacText
};
}
private createLoadDacpacButton(): azdata.ButtonComponent {
const loadDacpacButton = this.view!.modelBuilder.button().withProperties({
ariaLabel: constants.loadDacpacButton,
iconPath: IconPathHelper.folder,
height: '16px',
width: '15px'
}).component();
loadDacpacButton.onDidClick(async () => {
let fileUris = await vscode.window.showOpenDialog(
{
canSelectFiles: true,
canSelectFolders: false,
canSelectMany: false,
defaultUri: vscode.workspace.workspaceFolders ? (vscode.workspace.workspaceFolders as vscode.WorkspaceFolder[])[0].uri : undefined,
openLabel: constants.selectString,
filters: {
[constants.dacpacFiles]: ['dacpac'],
}
}
);
if (!fileUris || fileUris.length === 0) {
return;
}
this.dacpacTextbox!.value = fileUris[0].fsPath;
});
return loadDacpacButton;
}
private createLocationDropdown(): azdata.FormComponent {
this.locationDropdown = this.view!.modelBuilder.dropDown().withProperties({
ariaLabel: constants.locationDropdown,
values: constants.systemDbLocationDropdownValues
}).component();
this.locationDropdown.onValueChanged(() => {
this.updateEnabledInputBoxes();
this.tryEnableAddReferenceButton();
});
return {
component: this.locationDropdown,
title: constants.locationDropdown
};
}
/**
* Update the enabled input boxes based on what the location of the database reference selected in the dropdown is
* @param isSystemDb
*/
public updateEnabledInputBoxes(isSystemDb: boolean = false): void {
if (this.locationDropdown?.value === constants.sameDatabase) {
this.databaseNameTextbox!.enabled = false;
this.databaseVariableTextbox!.enabled = false;
this.serverNameTextbox!.enabled = false;
this.serverVariableTextbox!.enabled = false;
// clear values in disabled fields
this.databaseNameTextbox!.value = '';
this.databaseVariableTextbox!.value = '';
this.serverNameTextbox!.value = '';
this.serverVariableTextbox!.value = '';
} else if (this.locationDropdown?.value === constants.differentDbSameServer) {
this.databaseNameTextbox!.enabled = true;
this.databaseVariableTextbox!.enabled = !isSystemDb; // database variable is only enabled for non-system database references
this.serverNameTextbox!.enabled = false;
this.serverVariableTextbox!.enabled = false;
// clear values in disabled fields
this.databaseVariableTextbox!.value = isSystemDb ? '' : this.databaseVariableTextbox!.value;
this.serverNameTextbox!.value = '';
this.serverVariableTextbox!.value = '';
} else if (this.locationDropdown?.value === constants.differentDbDifferentServer) {
this.databaseNameTextbox!.enabled = true;
this.databaseVariableTextbox!.enabled = true;
this.serverNameTextbox!.enabled = true;
this.serverVariableTextbox!.enabled = true;
}
}
private createVariableSection(): azdata.FormComponent {
// database name row
this.databaseNameTextbox = this.createInputBox(constants.databaseName, true);
const databaseNameRow = this.view!.modelBuilder.flexContainer().withItems([this.createLabel(constants.databaseName, true), this.databaseNameTextbox], { flex: '0 0 auto' }).withLayout({ flexFlow: 'row', alignItems: 'center' }).component();
// database variable row
this.databaseVariableTextbox = this.createInputBox(constants.databaseVariable, false);
const databaseVariableRow = this.view!.modelBuilder.flexContainer().withItems([this.createLabel(constants.databaseVariable), this.databaseVariableTextbox], { flex: '0 0 auto' }).withLayout({ flexFlow: 'row', alignItems: 'center' }).component();
// server name row
this.serverNameTextbox = this.createInputBox(constants.serverName, false);
const serverNameRow = this.view!.modelBuilder.flexContainer().withItems([this.createLabel(constants.serverName, true), this.serverNameTextbox], { flex: '0 0 auto' }).withLayout({ flexFlow: 'row', alignItems: 'center' }).component();
// server variable row
this.serverVariableTextbox = this.createInputBox(constants.serverVariable, false);
const serverVariableRow = this.view!.modelBuilder.flexContainer().withItems([this.createLabel(constants.serverVariable, true), this.serverVariableTextbox], { flex: '0 0 auto' }).withLayout({ flexFlow: 'row', alignItems: 'center' }).component();
const variableSection = this.view!.modelBuilder.flexContainer().withItems([databaseNameRow, databaseVariableRow, serverNameRow, serverVariableRow]).withLayout({ flexFlow: 'column' }).component();
return {
component: variableSection,
title: ''
};
}
private createLabel(value: string, required: boolean = false): azdata.TextComponent {
const label = this.view!.modelBuilder.text().withProperties<azdata.TextComponentProperties>({
value: value,
width: cssStyles.addDatabaseReferenceDialogLabelWidth,
requiredIndicator: required
}).component();
return label;
}
private createInputBox(ariaLabel: string, enabled: boolean): azdata.InputBoxComponent {
const inputBox = this.view!.modelBuilder.inputBox().withProperties({
ariaLabel: ariaLabel,
enabled: enabled,
width: cssStyles.addDatabaseReferenceInputboxWidth
}).component();
inputBox.onTextChanged(() => {
this.tryEnableAddReferenceButton();
});
return inputBox;
}
/**
* Only enable Add reference button if all enabled fields are filled
*/
public tryEnableAddReferenceButton(): void {
switch (this.currentReferenceType) {
case ReferenceType.systemDb: {
this.dialog.okButton.enabled = !!this.databaseNameTextbox?.value;
break;
}
case ReferenceType.dacpac: {
this.dialog.okButton.enabled = this.dacpacFieldsRequiredFieldsFilled();
break;
}
case ReferenceType.project: {
// TODO
}
}
}
private dacpacFieldsRequiredFieldsFilled(): boolean {
return !!this.dacpacTextbox?.value &&
((this.locationDropdown?.value === constants.sameDatabase)
|| (this.locationDropdown?.value === constants.differentDbSameServer && this.differentDatabaseSameServerRequiredFieldsFilled())
|| ((this.locationDropdown?.value === constants.differentDbDifferentServer && this.differentDatabaseDifferentServerRequiredFieldsFilled())));
}
private differentDatabaseSameServerRequiredFieldsFilled(): boolean {
return !!this.databaseNameTextbox?.value;
}
private differentDatabaseDifferentServerRequiredFieldsFilled(): boolean {
return !!this.databaseNameTextbox?.value && !!this.serverNameTextbox?.value && !!this.serverVariableTextbox?.value;
}
}

View File

@@ -0,0 +1,23 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { DatabaseReferenceLocation, SystemDatabase } from './project';
import { Uri } from 'vscode';
export interface IDatabaseReferenceSettings {
databaseName: string;
}
export interface ISystemDatabaseReferenceSettings extends IDatabaseReferenceSettings {
systemDb: SystemDatabase;
}
export interface IDacpacReferenceSettings extends IDatabaseReferenceSettings {
databaseLocation: DatabaseReferenceLocation;
dacpacFileLocation: Uri;
databaseVariable?: string;
serverName?: string;
serverVariable?: string;
}

View File

@@ -697,7 +697,8 @@ export enum EntryType {
export enum DatabaseReferenceLocation {
sameDatabase,
differentDatabaseSameServer
differentDatabaseSameServer,
differentDatabaseDifferentServer
}
export enum TargetPlatform {

View File

@@ -0,0 +1,114 @@
/*---------------------------------------------------------------------------------------------
* 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 * as path from 'path';
import * as baselines from '../baselines/baselines';
import * as templates from '../../templates/templates';
import * as testUtils from '../testUtils';
import * as constants from '../../common/constants';
import { AddDatabaseReferenceDialog, ReferenceType } from '../../dialogs/addDatabaseReferenceDialog';
describe('Add Database Reference Dialog', () => {
before(async function (): Promise<void> {
await templates.loadTemplates(path.join(__dirname, '..', '..', '..', 'resources', 'templates'));
await baselines.loadBaselines();
});
it('Should open dialog successfully', async function (): Promise<void> {
const project = await testUtils.createTestProject(baselines.newProjectFileBaseline);
const dialog = new AddDatabaseReferenceDialog(project);
await dialog.openDialog();
should.notEqual(dialog.addDatabaseReferenceTab, undefined);
});
it('Should enable ok button correctly', async function (): Promise<void> {
const project = await testUtils.createTestProject(baselines.newProjectFileBaseline);
const dialog = new AddDatabaseReferenceDialog(project);
await dialog.openDialog();
should(dialog.dialog.okButton.enabled).equal(false);
should(dialog.currentReferenceType).equal(ReferenceType.systemDb);
dialog.tryEnableAddReferenceButton();
should(dialog.dialog.okButton.enabled).equal(false);
// fill in db name and ok button should be enabled
dialog.databaseNameTextbox!.value = 'dbName';
dialog.tryEnableAddReferenceButton();
should(dialog.dialog.okButton.enabled).equal(true, 'Ok button should be enabled after the database name textbox is filled');
// change to dacpac reference
dialog.dacpacRadioButtonClick();
should(dialog.currentReferenceType).equal(ReferenceType.dacpac);
should(dialog.locationDropdown?.value).equal(constants.differentDbSameServer);
should(dialog.dialog.okButton.enabled).equal(false, 'Ok button should not be enabled because dacpac input box is not filled');
// fill in dacpac textbox
dialog.dacpacTextbox!.value = 'testDb.dacpac';
dialog.tryEnableAddReferenceButton();
should(dialog.dialog.okButton.enabled).equal(true, 'Ok button should be enabled after the dacpac textbox is filled');
// change location to different database, different server
dialog.locationDropdown!.value = constants.differentDbDifferentServer;
dialog.tryEnableAddReferenceButton();
should(dialog.dialog.okButton.enabled).equal(false, 'Ok button should not be enabled because server fields are not filled');
// fill in server fields
dialog.serverNameTextbox!.value = 'serverName';
dialog.serverVariableTextbox!.value = '$(serverName)';
dialog.tryEnableAddReferenceButton();
should(dialog.dialog.okButton.enabled).equal(true, 'Ok button should be enabled after server fields are filled');
// change location to same database
dialog.locationDropdown!.value = constants.sameDatabase;
dialog.tryEnableAddReferenceButton();
should(dialog.dialog.okButton.enabled).equal(true, 'Ok button should be enabled because only dacpac location is needed for a reference located on the same database');
// change reference type back to system db
dialog.systemDbRadioButtonClick();
should(dialog.databaseNameTextbox?.value).equal('', `Database name textbox should be empty. Actual:${dialog.databaseNameTextbox?.value}`);
should(dialog.dialog.okButton.enabled).equal(false, 'Ok button should not be enabled because database name is not filled out');
});
it('Should enable and disable input boxes depending on the reference type', async function (): Promise<void> {
const project = await testUtils.createTestProject(baselines.newProjectFileBaseline);
const dialog = new AddDatabaseReferenceDialog(project);
await dialog.openDialog();
// dialog starts with system db
should(dialog.currentReferenceType).equal(ReferenceType.systemDb);
validateInputBoxEnabledStates(dialog, { databaseNameEnabled: true, databaseVariableEnabled: false, serverNameEnabled: false, serverVariabledEnabled: false});
// change to dacpac reference
dialog.dacpacRadioButtonClick();
should(dialog.currentReferenceType).equal(ReferenceType.dacpac);
should(dialog.locationDropdown!.value).equal(constants.differentDbSameServer);
validateInputBoxEnabledStates(dialog, { databaseNameEnabled: true, databaseVariableEnabled: true, serverNameEnabled: false, serverVariabledEnabled: false});
// change location to different db, different server
dialog.locationDropdown!.value = constants.differentDbDifferentServer;
dialog.updateEnabledInputBoxes();
validateInputBoxEnabledStates(dialog, { databaseNameEnabled: true, databaseVariableEnabled: true, serverNameEnabled: true, serverVariabledEnabled: true});
// change location to same db
dialog.locationDropdown!.value = constants.sameDatabase;
dialog.updateEnabledInputBoxes();
validateInputBoxEnabledStates(dialog, { databaseNameEnabled: false, databaseVariableEnabled: false, serverNameEnabled: false, serverVariabledEnabled: false});
});
});
interface inputBoxExpectedStates {
databaseNameEnabled: boolean;
databaseVariableEnabled: boolean;
serverNameEnabled: boolean;
serverVariabledEnabled: boolean;
}
function validateInputBoxEnabledStates(dialog: AddDatabaseReferenceDialog, expectedStates: inputBoxExpectedStates): void {
should(dialog.databaseNameTextbox?.enabled).equal(expectedStates.databaseNameEnabled);
should(dialog.databaseVariableTextbox?.enabled).equal(expectedStates.databaseVariableEnabled);
should(dialog.serverNameTextbox?.enabled).equal(expectedStates.serverNameEnabled);
should(dialog.serverVariableTextbox?.enabled).equal(expectedStates.serverVariabledEnabled);
}

View File

@@ -7,20 +7,20 @@ import * as should from 'should';
import * as path from 'path';
import * as os from 'os';
import * as vscode from 'vscode';
import * as baselines from './baselines/baselines';
import * as templates from '../templates/templates';
import * as testUtils from './testUtils';
import * as baselines from '../baselines/baselines';
import * as templates from '../../templates/templates';
import * as testUtils from '../testUtils';
import * as TypeMoq from 'typemoq';
import { PublishDatabaseDialog } from '../dialogs/publishDatabaseDialog';
import { Project } from '../models/project';
import { SqlDatabaseProjectTreeViewProvider } from '../controllers/databaseProjectTreeViewProvider';
import { ProjectsController } from '../controllers/projectController';
import { IPublishSettings, IGenerateScriptSettings } from '../models/IPublishSettings';
import { PublishDatabaseDialog } from '../../dialogs/publishDatabaseDialog';
import { Project } from '../../models/project';
import { SqlDatabaseProjectTreeViewProvider } from '../../controllers/databaseProjectTreeViewProvider';
import { ProjectsController } from '../../controllers/projectController';
import { IPublishSettings, IGenerateScriptSettings } from '../../models/IPublishSettings';
describe.skip('Publish Database Dialog', () => {
before(async function (): Promise<void> {
await templates.loadTemplates(path.join(__dirname, '..', '..', 'resources', 'templates'));
await templates.loadTemplates(path.join(__dirname, '..', '..', '..', 'resources', 'templates'));
await baselines.loadBaselines();
});