mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-07 01:25:38 -05:00
Add a few unit tests for dacpac extension (#9194)
* add a few unit tests * fix tests for linux
This commit is contained in:
@@ -1,112 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import 'mocha';
|
||||
import * as should from 'should';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import { isValidFilenameCharacter, sanitizeStringForFilename, isValidBasename } from '../wizard/api/utils';
|
||||
|
||||
const isWindows = os.platform() === 'win32';
|
||||
|
||||
describe('Sanitize database name for filename tests', function (): void {
|
||||
it('Should only validate if one character is passed', async () => {
|
||||
should(isValidFilenameCharacter(null)).equal(false);
|
||||
should(isValidFilenameCharacter('')).equal(false);
|
||||
should(isValidFilenameCharacter('abc')).equal(false);
|
||||
should(isValidFilenameCharacter('c')).equal(true);
|
||||
});
|
||||
|
||||
it('Should determine invalid file name characters', async () => {
|
||||
// invalid for both Windows and non-Windows
|
||||
should(isValidFilenameCharacter('\\')).equal(false);
|
||||
should(isValidFilenameCharacter('/')).equal(false);
|
||||
});
|
||||
|
||||
it('Should determine invalid Windows file name characters', async () => {
|
||||
// invalid only for Windows
|
||||
should(isValidFilenameCharacter('?')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter(':')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('*')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('<')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('>')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('|')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('"')).equal(isWindows ? false : true);
|
||||
});
|
||||
|
||||
it('Should sanitize database name for filename', async () => {
|
||||
let invalidDbName = '"in|valid*<>db/?name';
|
||||
let expectedWindows = '_in_valid___db__name';
|
||||
let expectedNonWindows = '"in|valid*<>db_?name';
|
||||
let isWindows = os.platform() === 'win32';
|
||||
should(sanitizeStringForFilename(invalidDbName)).equal(isWindows ? expectedWindows : expectedNonWindows);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Check for invalid filename tests', function (): void {
|
||||
it('Should determine invalid filenames', async () => {
|
||||
// valid filename
|
||||
should(isValidBasename(formatFileName('ValidName.dacpac'))).equal(true);
|
||||
|
||||
// invalid for both Windows and non-Windows
|
||||
should(isValidBasename(formatFileName(' .dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName(' .dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName(' .dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName('..dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName('...dacpac'))).equal(false);
|
||||
should(isValidBasename(null)).equal(false);
|
||||
should(isValidBasename(undefined)).equal(false);
|
||||
should(isValidBasename('\\')).equal(false);
|
||||
should(isValidBasename('/')).equal(false);
|
||||
|
||||
// most file systems do not allow files > 255 length
|
||||
should(isValidBasename(formatFileName('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.dacpac'))).equal(false);
|
||||
});
|
||||
|
||||
it('Should determine invalid Windows filenames', async () => {
|
||||
// invalid characters only for Windows
|
||||
should(isValidBasename(formatFileName('?.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName(':.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('*.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('<.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('>.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('|.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('".dacpac'))).equal(isWindows ? false : true);
|
||||
|
||||
// Windows filenames cannot end with a whitespace
|
||||
should(isValidBasename(formatFileName('test .dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('test .dacpac'))).equal(isWindows ? false : true);
|
||||
});
|
||||
|
||||
it('Should determine Windows forbidden filenames', async () => {
|
||||
// invalid only for Windows
|
||||
should(isValidBasename(formatFileName('CON.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('PRN.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('AUX.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('NUL.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM1.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM2.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM3.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM4.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM5.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM6.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM7.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM8.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM9.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT1.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT2.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT3.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT4.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT5.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT6.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT7.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT8.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT9.dacpac'))).equal(isWindows ? false : true);
|
||||
});
|
||||
});
|
||||
|
||||
function formatFileName(filename: string): string {
|
||||
return path.join(os.tmpdir(), filename);
|
||||
}
|
||||
200
extensions/dacpac/src/test/utils.test.ts
Normal file
200
extensions/dacpac/src/test/utils.test.ts
Normal file
@@ -0,0 +1,200 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import 'mocha';
|
||||
import * as should from 'should';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import * as loc from '../localizedConstants';
|
||||
import { isValidFilenameCharacter, sanitizeStringForFilename, isValidBasename, isValidBasenameErrorMessage, generateDatabaseName } from '../wizard/api/utils';
|
||||
import { DeployConfigPage } from '../wizard/pages/deployConfigPage';
|
||||
|
||||
const isWindows = os.platform() === 'win32';
|
||||
|
||||
describe('Sanitize database name for filename tests', function (): void {
|
||||
it('Should only validate if one character is passed', async () => {
|
||||
should(isValidFilenameCharacter(null)).equal(false);
|
||||
should(isValidFilenameCharacter('')).equal(false);
|
||||
should(isValidFilenameCharacter('abc')).equal(false);
|
||||
should(isValidFilenameCharacter('c')).equal(true);
|
||||
});
|
||||
|
||||
it('Should determine invalid file name characters', async () => {
|
||||
// invalid for both Windows and non-Windows
|
||||
should(isValidFilenameCharacter('\\')).equal(false);
|
||||
should(isValidFilenameCharacter('/')).equal(false);
|
||||
});
|
||||
|
||||
it('Should determine invalid Windows file name characters', async () => {
|
||||
// invalid only for Windows
|
||||
should(isValidFilenameCharacter('?')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter(':')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('*')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('<')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('>')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('|')).equal(isWindows ? false : true);
|
||||
should(isValidFilenameCharacter('"')).equal(isWindows ? false : true);
|
||||
});
|
||||
|
||||
it('Should sanitize database name for filename', async () => {
|
||||
let invalidDbName = '"in|valid*<>db/?name';
|
||||
let expectedWindows = '_in_valid___db__name';
|
||||
let expectedNonWindows = '"in|valid*<>db_?name';
|
||||
let isWindows = os.platform() === 'win32';
|
||||
should(sanitizeStringForFilename(invalidDbName)).equal(isWindows ? expectedWindows : expectedNonWindows);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Check for invalid filename tests', function (): void {
|
||||
it('Should determine invalid filenames', async () => {
|
||||
// valid filename
|
||||
should(isValidBasename(formatFileName('ValidName.dacpac'))).equal(true);
|
||||
|
||||
// invalid for both Windows and non-Windows
|
||||
should(isValidBasename(formatFileName(' .dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName(' .dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName(' .dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName('..dacpac'))).equal(false);
|
||||
should(isValidBasename(formatFileName('...dacpac'))).equal(false);
|
||||
should(isValidBasename(null)).equal(false);
|
||||
should(isValidBasename(undefined)).equal(false);
|
||||
should(isValidBasename('\\')).equal(false);
|
||||
should(isValidBasename('/')).equal(false);
|
||||
|
||||
// most file systems do not allow files > 255 length
|
||||
should(isValidBasename(formatFileName('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.dacpac'))).equal(false);
|
||||
});
|
||||
|
||||
it('Should determine invalid Windows filenames', async () => {
|
||||
// invalid characters only for Windows
|
||||
should(isValidBasename(formatFileName('?.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName(':.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('*.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('<.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('>.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('|.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('".dacpac'))).equal(isWindows ? false : true);
|
||||
|
||||
// Windows filenames cannot end with a whitespace
|
||||
should(isValidBasename(formatFileName('test .dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('test .dacpac'))).equal(isWindows ? false : true);
|
||||
});
|
||||
|
||||
it('Should determine Windows forbidden filenames', async () => {
|
||||
// invalid only for Windows
|
||||
should(isValidBasename(formatFileName('CON.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('PRN.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('AUX.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('NUL.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM1.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM2.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM3.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM4.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM5.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM6.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM7.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM8.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('COM9.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT1.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT2.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT3.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT4.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT5.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT6.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT7.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT8.dacpac'))).equal(isWindows ? false : true);
|
||||
should(isValidBasename(formatFileName('LPT9.dacpac'))).equal(isWindows ? false : true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Check for invalid filename error tests', function (): void {
|
||||
it('Should determine invalid filenames', async () => {
|
||||
// valid filename
|
||||
should(isValidBasenameErrorMessage(formatFileName('ValidName.dacpac'))).equal('');
|
||||
|
||||
// invalid for both Windows and non-Windows
|
||||
should(isValidBasenameErrorMessage(formatFileName(' .dacpac'))).equal(loc.whitespaceFilenameErrorMessage);
|
||||
should(isValidBasenameErrorMessage(formatFileName(' .dacpac'))).equal(loc.whitespaceFilenameErrorMessage);
|
||||
should(isValidBasenameErrorMessage(formatFileName(' .dacpac'))).equal(loc.whitespaceFilenameErrorMessage);
|
||||
should(isValidBasenameErrorMessage(formatFileName('..dacpac'))).equal(loc.reservedValueErrorMessage);
|
||||
should(isValidBasenameErrorMessage(formatFileName('...dacpac'))).equal(loc.reservedValueErrorMessage);
|
||||
should(isValidBasenameErrorMessage(null)).equal(loc.undefinedFilenameErrorMessage);
|
||||
should(isValidBasenameErrorMessage(undefined)).equal(loc.undefinedFilenameErrorMessage);
|
||||
should(isValidBasenameErrorMessage('\\')).equal(isWindows ? loc.whitespaceFilenameErrorMessage : loc.invalidFileCharsErrorMessage);
|
||||
should(isValidBasenameErrorMessage('/')).equal(loc.whitespaceFilenameErrorMessage);
|
||||
|
||||
// most file systems do not allow files > 255 length
|
||||
should(isValidBasenameErrorMessage(formatFileName('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.dacpac'))).equal(loc.tooLongFilenameErrorMessage);
|
||||
});
|
||||
|
||||
it('Should determine invalid Windows filenames', async () => {
|
||||
// invalid characters only for Windows
|
||||
should(isValidBasenameErrorMessage(formatFileName('?.dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName(':.dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('*.dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('<.dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('>.dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('|.dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('".dacpac'))).equal(isWindows ? loc.invalidFileCharsErrorMessage : '');
|
||||
|
||||
// Windows filenames cannot end with a whitespace
|
||||
should(isValidBasenameErrorMessage(formatFileName('test .dacpac'))).equal(isWindows ? loc.trailingWhitespaceErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('test .dacpac'))).equal(isWindows ? loc.trailingWhitespaceErrorMessage : '');
|
||||
});
|
||||
|
||||
it('Should determine Windows forbidden filenames', async () => {
|
||||
// invalid only for Windows
|
||||
should(isValidBasenameErrorMessage(formatFileName('CON.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('PRN.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('AUX.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('NUL.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM1.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM2.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM3.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM4.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM5.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM6.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM7.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM8.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('COM9.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT1.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT2.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT3.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT4.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT5.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT6.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT7.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT8.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
should(isValidBasenameErrorMessage(formatFileName('LPT9.dacpac'))).equal(isWindows ? loc.reservedWindowsFilenameErrorMessage : '');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('Generate database name from file path tests', function (): void {
|
||||
it('Should generate database name correctly', async () => {
|
||||
should(generateDatabaseName('')).equal('');
|
||||
should(generateDatabaseName('c:\\test\\name.dacpac')).equal(isWindows ? 'name' : 'c:\\test\\name');
|
||||
should(generateDatabaseName('c:\\test\\name.bacpac')).equal(isWindows ? 'name' : 'c:\\test\\name');
|
||||
should(generateDatabaseName('~/users/test/name.dacpac')).equal('name');
|
||||
should(generateDatabaseName('~/users/test/name.bacpac')).equal('name');
|
||||
should(generateDatabaseName('name.dacpac')).equal('name');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Check for unique database name tests', function (): void {
|
||||
it('Should determine if database name is unique correctly', async () => {
|
||||
let page: DeployConfigPage = new DeployConfigPage(undefined, undefined, undefined, undefined);
|
||||
page.databaseValues = ['db1', 'test'];
|
||||
should(page.databaseNameExists('db1')).equal(true);
|
||||
should(page.databaseNameExists('test')).equal(true);
|
||||
should(page.databaseNameExists('Test')).equal(true);
|
||||
should(page.databaseNameExists('TEST')).equal(true);
|
||||
should(page.databaseNameExists('db2')).equal(false);
|
||||
});
|
||||
});
|
||||
|
||||
function formatFileName(filename: string): string {
|
||||
return path.join(os.tmpdir(), filename);
|
||||
}
|
||||
25
extensions/dacpac/src/test/wizard.test.ts
Normal file
25
extensions/dacpac/src/test/wizard.test.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import 'mocha';
|
||||
import * as should from 'should';
|
||||
import * as loc from '../localizedConstants';
|
||||
import { DataTierApplicationWizard, Operation } from '../wizard/dataTierApplicationWizard';
|
||||
|
||||
describe('Dacfx wizard', function (): void {
|
||||
it('Should initialize wizard correctly', async () => {
|
||||
let wizard = new DataTierApplicationWizard();
|
||||
should.notEqual(wizard.wizard, undefined);
|
||||
should.equal(wizard.wizard.title, loc.wizardTitle);
|
||||
|
||||
wizard.setPages();
|
||||
should.notEqual(wizard.pages, undefined);
|
||||
should.equal(wizard.pages.size, 7);
|
||||
should.equal(wizard.wizard.pages.length, 4);
|
||||
|
||||
wizard.setDoneButton(Operation.deploy);
|
||||
should.equal(wizard.selectedOperation, Operation.deploy);
|
||||
});
|
||||
});
|
||||
@@ -12,7 +12,7 @@ export abstract class BasePage {
|
||||
protected readonly wizardPage: azdata.window.WizardPage;
|
||||
protected readonly model: DacFxDataModel;
|
||||
protected readonly view: azdata.ModelView;
|
||||
protected databaseValues: string[];
|
||||
public databaseValues: string[];
|
||||
|
||||
/**
|
||||
* This method constructs all the elements of the page.
|
||||
|
||||
@@ -207,7 +207,7 @@ export abstract class DacFxConfigPage extends BasePage {
|
||||
}
|
||||
|
||||
// Compares database name with existing databases on the server
|
||||
protected databaseNameExists(n: string): boolean {
|
||||
public databaseNameExists(n: string): boolean {
|
||||
for (let i = 0; i < this.databaseValues.length; ++i) {
|
||||
if (this.databaseValues[i].toLowerCase() === n.toLowerCase()) {
|
||||
// database name exists
|
||||
|
||||
@@ -120,7 +120,7 @@ export function isValidBasenameErrorMessage(name: string | null | undefined): st
|
||||
}
|
||||
|
||||
if (basename === '.' || basename === '..') {
|
||||
return loc.reservedWindowsFilenameErrorMessage; // check for reserved values
|
||||
return loc.reservedValueErrorMessage; // check for reserved values
|
||||
}
|
||||
|
||||
if (isWindows && basename.length !== basename.trim().length) {
|
||||
@@ -133,3 +133,7 @@ export function isValidBasenameErrorMessage(name: string | null | undefined): st
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
export function generateDatabaseName(filePath: string): string {
|
||||
return path.parse(filePath).name;
|
||||
}
|
||||
|
||||
@@ -84,6 +84,7 @@ export class DataTierApplicationWizard {
|
||||
public selectedOperation: Operation;
|
||||
|
||||
constructor() {
|
||||
this.wizard = azdata.window.createWizard(loc.wizardTitle);
|
||||
}
|
||||
|
||||
public async start(p: any, ...args: any[]) {
|
||||
@@ -107,8 +108,16 @@ export class DataTierApplicationWizard {
|
||||
}
|
||||
|
||||
this.model.serverId = this.connection.connectionId;
|
||||
this.setPages();
|
||||
|
||||
this.wizard = azdata.window.createWizard(loc.wizardTitle);
|
||||
this.wizard.generateScriptButton.hidden = true;
|
||||
this.wizard.generateScriptButton.onClick(async () => await this.generateDeployScript());
|
||||
this.wizard.doneButton.onClick(async () => await this.executeOperation());
|
||||
|
||||
this.wizard.open();
|
||||
}
|
||||
|
||||
public setPages(): void {
|
||||
let selectOperationWizardPage = azdata.window.createWizardPage(loc.selectOperationPageName);
|
||||
let deployConfigWizardPage = azdata.window.createWizardPage(loc.deployConfigPageName);
|
||||
let deployPlanWizardPage = azdata.window.createWizardPage(loc.deployPlanPageName);
|
||||
@@ -186,11 +195,6 @@ export class DataTierApplicationWizard {
|
||||
});
|
||||
|
||||
this.wizard.pages = [selectOperationWizardPage, deployConfigWizardPage, deployPlanWizardPage, summaryWizardPage];
|
||||
this.wizard.generateScriptButton.hidden = true;
|
||||
this.wizard.generateScriptButton.onClick(async () => await this.generateDeployScript());
|
||||
this.wizard.doneButton.onClick(async () => await this.executeOperation());
|
||||
|
||||
this.wizard.open();
|
||||
}
|
||||
|
||||
public registerNavigationValidator(validator: (pageChangeInfo: azdata.window.WizardPageChangeInfo) => boolean) {
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
import * as azdata from 'azdata';
|
||||
import * as vscode from 'vscode';
|
||||
import * as path from 'path';
|
||||
import * as loc from '../../localizedConstants';
|
||||
import { DacFxDataModel } from '../api/models';
|
||||
import { DataTierApplicationWizard, DeployOperationPath, Operation, DeployNewOperationPath, PageName } from '../dataTierApplicationWizard';
|
||||
import { DacFxConfigPage } from '../api/dacFxConfigPage';
|
||||
import { generateDatabaseName } from '../api/utils';
|
||||
|
||||
export class DeployConfigPage extends DacFxConfigPage {
|
||||
|
||||
@@ -88,7 +88,7 @@ export class DeployConfigPage extends DacFxConfigPage {
|
||||
|
||||
this.fileTextBox.onTextChanged(async () => {
|
||||
this.model.filePath = this.fileTextBox.value;
|
||||
this.databaseTextBox.value = this.generateDatabaseName(this.model.filePath);
|
||||
this.databaseTextBox.value = generateDatabaseName(this.model.filePath);
|
||||
if (!this.model.upgradeExisting) {
|
||||
this.model.database = this.databaseTextBox.value;
|
||||
}
|
||||
@@ -200,9 +200,4 @@ export class DeployConfigPage extends DacFxConfigPage {
|
||||
this.databaseLoader.loading = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private generateDatabaseName(filePath: string): string {
|
||||
let result = path.parse(filePath);
|
||||
return result.name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
import * as azdata from 'azdata';
|
||||
import * as vscode from 'vscode';
|
||||
import * as path from 'path';
|
||||
import * as loc from '../../localizedConstants';
|
||||
import { DacFxDataModel } from '../api/models';
|
||||
import { DataTierApplicationWizard } from '../dataTierApplicationWizard';
|
||||
import { DacFxConfigPage } from '../api/dacFxConfigPage';
|
||||
import { generateDatabaseName } from '../api/utils';
|
||||
|
||||
export class ImportConfigPage extends DacFxConfigPage {
|
||||
|
||||
@@ -75,13 +75,13 @@ export class ImportConfigPage extends DacFxConfigPage {
|
||||
let fileUri = fileUris[0];
|
||||
this.fileTextBox.value = fileUri.fsPath;
|
||||
this.model.filePath = fileUri.fsPath;
|
||||
this.model.database = this.generateDatabaseName(this.model.filePath);
|
||||
this.model.database = generateDatabaseName(this.model.filePath);
|
||||
this.databaseTextBox.value = this.model.database;
|
||||
});
|
||||
|
||||
this.fileTextBox.onTextChanged(async () => {
|
||||
this.model.filePath = this.fileTextBox.value;
|
||||
this.model.database = this.generateDatabaseName(this.model.filePath);
|
||||
this.model.database = generateDatabaseName(this.model.filePath);
|
||||
this.databaseTextBox.value = this.model.database;
|
||||
});
|
||||
|
||||
@@ -91,9 +91,4 @@ export class ImportConfigPage extends DacFxConfigPage {
|
||||
actions: [this.fileButton]
|
||||
};
|
||||
}
|
||||
|
||||
private generateDatabaseName(filePath: string): string {
|
||||
let result = path.parse(filePath);
|
||||
return result.name;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user