diff --git a/extensions/schema-compare/src/schemaCompareMainWindow.ts b/extensions/schema-compare/src/schemaCompareMainWindow.ts index 80def1cce2..619cd4bf1e 100644 --- a/extensions/schema-compare/src/schemaCompareMainWindow.ts +++ b/extensions/schema-compare/src/schemaCompareMainWindow.ts @@ -15,7 +15,6 @@ import { getTelemetryErrorType, getEndpointName, verifyConnectionAndGetOwnerUri import { SchemaCompareDialog } from './dialogs/schemaCompareDialog'; import { isNullOrUndefined } from 'util'; const localize = nls.loadMessageBundle(); -const msSqlProvider = 'MSSQL'; const diffEditorTitle = localize('schemaCompare.CompareDetailsTitle', 'Compare Details'); const applyConfirmation = localize('schemaCompare.ApplyConfirmation', 'Are you sure you want to update the target?'); const reCompareToRefeshMessage = localize('schemaCompare.RecompareToRefresh', 'Press Compare to refresh the comparison.'); @@ -74,7 +73,7 @@ export class SchemaCompareMainWindow { public sourceEndpointInfo: mssql.SchemaCompareEndpointInfo; public targetEndpointInfo: mssql.SchemaCompareEndpointInfo; - constructor() { + constructor(private schemaCompareService?: mssql.ISchemaCompareService) { this.SchemaCompareActionMap = new Map(); this.SchemaCompareActionMap[mssql.SchemaUpdateAction.Delete] = localize('schemaCompare.deleteAction', 'Delete'); this.SchemaCompareActionMap[mssql.SchemaUpdateAction.Change] = localize('schemaCompare.changeAction', 'Change'); @@ -274,7 +273,7 @@ export class SchemaCompareMainWindow { public async execute(): Promise { Telemetry.sendTelemetryEvent('SchemaComparisonStarted'); - const service = await SchemaCompareMainWindow.getService(msSqlProvider); + const service = await this.getService(); if (!this.operationId) { // create once per page this.operationId = generateGuid(); @@ -590,7 +589,7 @@ export class SchemaCompareMainWindow { // cancel compare if (this.operationId) { - const service = await SchemaCompareMainWindow.getService(msSqlProvider); + const service = await this.getService(); const result = await service.schemaCompareCancel(this.operationId); if (!result || !result.success) { @@ -622,7 +621,7 @@ export class SchemaCompareMainWindow { 'startTime:': Date.now().toString(), 'operationId': this.comparisonResult.operationId }); - const service = await SchemaCompareMainWindow.getService(msSqlProvider); + const service = await this.getService(); const result = await service.schemaCompareGenerateScript(this.comparisonResult.operationId, this.targetEndpointInfo.serverName, this.targetEndpointInfo.databaseName, azdata.TaskExecutionMode.script); if (!result || !result.success) { Telemetry.sendTelemetryEvent('SchemaCompareGenerateScriptFailed', { @@ -682,7 +681,7 @@ export class SchemaCompareMainWindow { // disable apply and generate script buttons because the results are no longer valid after applying the changes this.setButtonsForRecompare(); - const service = await SchemaCompareMainWindow.getService(msSqlProvider); + const service = await this.getService(); const result = await service.schemaComparePublishChanges(this.comparisonResult.operationId, this.targetEndpointInfo.serverName, this.targetEndpointInfo.databaseName, azdata.TaskExecutionMode.execute); if (!result || !result.success) { Telemetry.sendTelemetryEvent('SchemaCompareApplyFailed', { @@ -870,7 +869,7 @@ export class SchemaCompareMainWindow { } let fileUri = fileUris[0]; - const service = await SchemaCompareMainWindow.getService('MSSQL'); + const service = await this.getService(); let startTime = Date.now(); const result = await service.schemaCompareOpenScmp(fileUri.fsPath); if (!result || !result.success) { @@ -969,7 +968,7 @@ export class SchemaCompareMainWindow { let startTime = Date.now(); Telemetry.sendTelemetryEvent('SchemaCompareSaveScmp'); - const service = await SchemaCompareMainWindow.getService(msSqlProvider); + const service = await this.getService(); const result = await service.schemaCompareSaveScmp(this.sourceEndpointInfo, this.targetEndpointInfo, azdata.TaskExecutionMode.execute, this.deploymentOptions, filePath.fsPath, sourceExcludes, targetExcludes); if (!result || !result.success) { Telemetry.sendTelemetryEvent('SchemaCompareSaveScmpFailed', { @@ -1012,14 +1011,16 @@ export class SchemaCompareMainWindow { } } - private static async getService(providerName: string): Promise { - let service = (vscode.extensions.getExtension(mssql.extension.name).exports as mssql.IExtension).schemaCompare; - return service; + private async getService(): Promise { + if (isNullOrUndefined(this.schemaCompareService)) { + this.schemaCompareService = (vscode.extensions.getExtension(mssql.extension.name).exports as mssql.IExtension).schemaCompare; + } + return this.schemaCompareService; } private async GetDefaultDeploymentOptions(): Promise { // Same as dacfx default options - const service = await SchemaCompareMainWindow.getService(msSqlProvider); + const service = await this.getService(); let result = await service.schemaCompareGetDefaultOptions(); this.setDeploymentOptions(result.defaultDeploymentOptions); } diff --git a/extensions/schema-compare/src/test/schemaCompare.test.ts b/extensions/schema-compare/src/test/schemaCompare.test.ts index dc015c4935..77a8673ca8 100644 --- a/extensions/schema-compare/src/test/schemaCompare.test.ts +++ b/extensions/schema-compare/src/test/schemaCompare.test.ts @@ -69,7 +69,7 @@ describe('SchemaCompareResult.start', function (): void { it('Should be correct when created.', async function (): Promise { let sc = new SchemaCompareTestService(); - let result = new SchemaCompareMainWindow(); + let result = new SchemaCompareMainWindow(sc); await result.start(null); let promise = new Promise(resolve => setTimeout(resolve, 5000)); // to ensure comparison result view is initialized await promise; @@ -80,6 +80,6 @@ describe('SchemaCompareResult.start', function (): void { await result.execute(); should(result.getComparisonResult() !== undefined); - should(result.getComparisonResult().operationId !== undefined); + should(result.getComparisonResult().operationId === 'Test Operation Id'); }); });