mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Add a few dacpac extension tests (#10322)
* add controller test * Add a few wizard tests * Addressing comment * fix compile error
This commit is contained in:
@@ -1,26 +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 * as vscode from 'vscode';
|
|
||||||
|
|
||||||
export default abstract class ControllerBase implements vscode.Disposable {
|
|
||||||
protected _context: vscode.ExtensionContext;
|
|
||||||
|
|
||||||
protected constructor(context: vscode.ExtensionContext) {
|
|
||||||
this._context = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
public get extensionContext(): vscode.ExtensionContext {
|
|
||||||
return this._context;
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract activate(): Promise<boolean>;
|
|
||||||
|
|
||||||
abstract deactivate(): void;
|
|
||||||
|
|
||||||
public dispose(): void {
|
|
||||||
this.deactivate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,20 +4,17 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import ControllerBase from './controllerBase';
|
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import { DataTierApplicationWizard } from '../wizard/dataTierApplicationWizard';
|
import { DataTierApplicationWizard } from '../wizard/dataTierApplicationWizard';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main controller class that initializes the extension
|
* The main controller class that initializes the extension
|
||||||
*/
|
*/
|
||||||
export default class MainController extends ControllerBase {
|
export default class MainController implements vscode.Disposable {
|
||||||
|
|
||||||
public constructor(context: vscode.ExtensionContext) {
|
public constructor(private context: vscode.ExtensionContext) {
|
||||||
super(context);
|
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public deactivate(): void {
|
public deactivate(): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,4 +26,12 @@ export default class MainController extends ControllerBase {
|
|||||||
private initializeDacFxWizard() {
|
private initializeDacFxWizard() {
|
||||||
azdata.tasks.registerTask('dacFx.start', (profile: azdata.IConnectionProfile, ...args: any[]) => new DataTierApplicationWizard().start(profile, args));
|
azdata.tasks.registerTask('dacFx.start', (profile: azdata.IConnectionProfile, ...args: any[]) => new DataTierApplicationWizard().start(profile, args));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get extensionContext(): vscode.ExtensionContext {
|
||||||
|
return this.context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public dispose(): void {
|
||||||
|
this.deactivate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,9 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
import ControllerBase from './controllers/controllerBase';
|
|
||||||
import MainController from './controllers/mainController';
|
import MainController from './controllers/mainController';
|
||||||
|
|
||||||
let controllers: ControllerBase[] = [];
|
let controllers: MainController[] = [];
|
||||||
|
|
||||||
export function activate(context: vscode.ExtensionContext) {
|
export function activate(context: vscode.ExtensionContext) {
|
||||||
let activations: Promise<boolean>[] = [];
|
let activations: Promise<boolean>[] = [];
|
||||||
|
|||||||
27
extensions/dacpac/src/test/mainController.test.ts
Normal file
27
extensions/dacpac/src/test/mainController.test.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* 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 MainController from '../controllers/mainController';
|
||||||
|
import { TestContext, createContext } from './testContext';
|
||||||
|
|
||||||
|
let testContext: TestContext;
|
||||||
|
|
||||||
|
function createController(): MainController {
|
||||||
|
let controller = new MainController(testContext.context);
|
||||||
|
return controller;
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('MainController', function (): void {
|
||||||
|
before(async function (): Promise<void> {
|
||||||
|
testContext = createContext();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should create new instance successfully', async function (): Promise<void> {
|
||||||
|
let controller: MainController;
|
||||||
|
should.doesNotThrow(() => controller = createController());
|
||||||
|
should.notEqual(controller.extensionContext, undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
36
extensions/dacpac/src/test/testContext.ts
Normal file
36
extensions/dacpac/src/test/testContext.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
|
export interface TestContext {
|
||||||
|
context: vscode.ExtensionContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createContext(): TestContext {
|
||||||
|
let extensionPath = path.join(__dirname, '..', '..');
|
||||||
|
|
||||||
|
return {
|
||||||
|
context: {
|
||||||
|
subscriptions: [],
|
||||||
|
workspaceState: {
|
||||||
|
get: () => { return Promise.resolve(); },
|
||||||
|
update: () => { return Promise.resolve(); }
|
||||||
|
},
|
||||||
|
globalState: {
|
||||||
|
get: () => { return Promise.resolve(); },
|
||||||
|
update: () => { return Promise.resolve(); }
|
||||||
|
},
|
||||||
|
extensionPath: extensionPath,
|
||||||
|
asAbsolutePath: () => { return ''; },
|
||||||
|
storagePath: '',
|
||||||
|
globalStoragePath: '',
|
||||||
|
logPath: '',
|
||||||
|
extensionUri: vscode.Uri.parse(''),
|
||||||
|
environmentVariableCollection: undefined as any
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -7,10 +7,16 @@ import 'mocha';
|
|||||||
import * as should from 'should';
|
import * as should from 'should';
|
||||||
import * as loc from '../localizedConstants';
|
import * as loc from '../localizedConstants';
|
||||||
import { DataTierApplicationWizard, Operation } from '../wizard/dataTierApplicationWizard';
|
import { DataTierApplicationWizard, Operation } from '../wizard/dataTierApplicationWizard';
|
||||||
|
import { DacFxDataModel } from '../wizard/api/models';
|
||||||
|
|
||||||
|
let wizard: DataTierApplicationWizard;
|
||||||
describe('Dacfx wizard', function (): void {
|
describe('Dacfx wizard', function (): void {
|
||||||
|
beforeEach(async function (): Promise<void> {
|
||||||
|
wizard = new DataTierApplicationWizard();
|
||||||
|
wizard.model = <DacFxDataModel>{};
|
||||||
|
});
|
||||||
|
|
||||||
it('Should initialize wizard correctly', async () => {
|
it('Should initialize wizard correctly', async () => {
|
||||||
let wizard = new DataTierApplicationWizard();
|
|
||||||
should.notEqual(wizard.wizard, undefined);
|
should.notEqual(wizard.wizard, undefined);
|
||||||
should.equal(wizard.wizard.title, loc.wizardTitle);
|
should.equal(wizard.wizard.title, loc.wizardTitle);
|
||||||
|
|
||||||
@@ -18,8 +24,50 @@ describe('Dacfx wizard', function (): void {
|
|||||||
should.notEqual(wizard.pages, undefined);
|
should.notEqual(wizard.pages, undefined);
|
||||||
should.equal(wizard.pages.size, 7);
|
should.equal(wizard.pages.size, 7);
|
||||||
should.equal(wizard.wizard.pages.length, 4);
|
should.equal(wizard.wizard.pages.length, 4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should determine summary page correctly', async () => {
|
||||||
|
// summary page should be 2 for deploy
|
||||||
|
wizard.selectedOperation = Operation.deploy;
|
||||||
|
wizard.model.upgradeExisting = false;
|
||||||
|
should.equal(wizard.isSummaryPage(2), true);
|
||||||
|
|
||||||
|
// summary page should be 3 for deploy - upgrade existing db
|
||||||
|
wizard.selectedOperation = Operation.deploy;
|
||||||
|
wizard.model.upgradeExisting = true;
|
||||||
|
should.equal(wizard.isSummaryPage(3), true);
|
||||||
|
|
||||||
|
// summary page should be 3 for generate deploy script
|
||||||
|
wizard.selectedOperation = Operation.generateDeployScript;
|
||||||
|
should.equal(wizard.isSummaryPage(3), true);
|
||||||
|
|
||||||
|
// summary page should be 2 for import
|
||||||
|
wizard.selectedOperation = Operation.import;
|
||||||
|
should.equal(wizard.isSummaryPage(2), true);
|
||||||
|
|
||||||
|
// summary page should be 2 for export
|
||||||
|
wizard.selectedOperation = Operation.export;
|
||||||
|
should.equal(wizard.isSummaryPage(2), true);
|
||||||
|
|
||||||
|
// summary page should be 2 for extract
|
||||||
|
wizard.selectedOperation = Operation.extract;
|
||||||
|
should.equal(wizard.isSummaryPage(2), true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should set Done button and operation correctly', async () => {
|
||||||
wizard.setDoneButton(Operation.deploy);
|
wizard.setDoneButton(Operation.deploy);
|
||||||
should.equal(wizard.selectedOperation, Operation.deploy);
|
should.equal(wizard.selectedOperation, Operation.deploy);
|
||||||
|
|
||||||
|
wizard.setDoneButton(Operation.generateDeployScript);
|
||||||
|
should.equal(wizard.selectedOperation, Operation.generateDeployScript);
|
||||||
|
|
||||||
|
wizard.setDoneButton(Operation.extract);
|
||||||
|
should.equal(wizard.selectedOperation, Operation.extract);
|
||||||
|
|
||||||
|
wizard.setDoneButton(Operation.import);
|
||||||
|
should.equal(wizard.selectedOperation, Operation.import);
|
||||||
|
|
||||||
|
wizard.setDoneButton(Operation.export);
|
||||||
|
should.equal(wizard.selectedOperation, Operation.export);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export enum PageName {
|
|||||||
export class DataTierApplicationWizard {
|
export class DataTierApplicationWizard {
|
||||||
public wizard: azdata.window.Wizard;
|
public wizard: azdata.window.Wizard;
|
||||||
private connection: azdata.connection.ConnectionProfile;
|
private connection: azdata.connection.ConnectionProfile;
|
||||||
private model: DacFxDataModel;
|
public model: DacFxDataModel;
|
||||||
public pages: Map<string, Page> = new Map<string, Page>();
|
public pages: Map<string, Page> = new Map<string, Page>();
|
||||||
public selectedOperation: Operation;
|
public selectedOperation: Operation;
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ export class DataTierApplicationWizard {
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
private isSummaryPage(idx: number): boolean {
|
public isSummaryPage(idx: number): boolean {
|
||||||
return this.selectedOperation === Operation.import && idx === ImportOperationPath.summary
|
return this.selectedOperation === Operation.import && idx === ImportOperationPath.summary
|
||||||
|| this.selectedOperation === Operation.export && idx === ExportOperationPath.summary
|
|| this.selectedOperation === Operation.export && idx === ExportOperationPath.summary
|
||||||
|| this.selectedOperation === Operation.extract && idx === ExtractOperationPath.summary
|
|| this.selectedOperation === Operation.extract && idx === ExtractOperationPath.summary
|
||||||
|
|||||||
Reference in New Issue
Block a user