mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-12 19:18:32 -05:00
Code refactoring for extension testing (#10529)
* Setting up tests on import extension * -Added API wrappers for all the azdata and vscode APIs to make them easily mockable -Added some unit tests for the import extension -Some code logic separations * -added code report for the import extension in ci * Did some more code refractoring * -Added json report generation * updated vscodetestcoverage to latest version in import extension. * -remove duplicate codecoverageConfig.json
This commit is contained in:
88
extensions/import/src/common/apiWrapper.ts
Normal file
88
extensions/import/src/common/apiWrapper.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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 azdata from 'azdata';
|
||||
/**
|
||||
* Wrapper class to act as a facade over VSCode and Data APIs and allow us to test/mock callbacks into
|
||||
* this API from our code
|
||||
*/
|
||||
|
||||
export class ApiWrapper {
|
||||
|
||||
public createOutputChannel(name: string): vscode.OutputChannel {
|
||||
return vscode.window.createOutputChannel(name);
|
||||
}
|
||||
|
||||
public getExtension(extensionId: string): vscode.Extension<any> | undefined {
|
||||
return vscode.extensions.getExtension(extensionId);
|
||||
}
|
||||
|
||||
public getUriForConnection(connectionId: string): Thenable<string> {
|
||||
return azdata.connection.getUriForConnection(connectionId);
|
||||
}
|
||||
|
||||
public getProvider<T extends azdata.DataProvider>(providerId: string, providerType: azdata.DataProviderType): T {
|
||||
return azdata.dataprotocol.getProvider<T>(providerId, providerType);
|
||||
}
|
||||
|
||||
public getCurrentConnection(): Thenable<azdata.connection.ConnectionProfile> {
|
||||
return azdata.connection.getCurrentConnection();
|
||||
}
|
||||
|
||||
public openConnectionDialog(providers?: string[]): Thenable<azdata.connection.Connection> {
|
||||
return azdata.connection.openConnectionDialog(providers);
|
||||
}
|
||||
|
||||
public showErrorMessage(message: string, ...items: string[]): Thenable<string | undefined> {
|
||||
return vscode.window.showErrorMessage(message, ...items);
|
||||
}
|
||||
|
||||
public createWizard(title: string): azdata.window.Wizard {
|
||||
return azdata.window.createWizard(title);
|
||||
}
|
||||
|
||||
public createWizardPage(title: string): azdata.window.WizardPage {
|
||||
return azdata.window.createWizardPage(title);
|
||||
}
|
||||
|
||||
public createButton(lable: string) {
|
||||
return azdata.window.createButton(lable);
|
||||
}
|
||||
|
||||
public showOpenDialog(options: vscode.OpenDialogOptions): Thenable<vscode.Uri[] | undefined> {
|
||||
return vscode.window.showOpenDialog(options);
|
||||
}
|
||||
|
||||
public getActiveConnections(): Thenable<azdata.connection.Connection[]> {
|
||||
return azdata.connection.getActiveConnections();
|
||||
}
|
||||
|
||||
public listDatabases(connectionId: string): Thenable<string[]> {
|
||||
return azdata.connection.listDatabases(connectionId);
|
||||
}
|
||||
|
||||
public openExternal(target: vscode.Uri): Thenable<boolean> {
|
||||
return vscode.env.openExternal(target);
|
||||
}
|
||||
|
||||
public getConfiguration(section?: string, resource?: vscode.Uri | null): vscode.WorkspaceConfiguration {
|
||||
return vscode.workspace.getConfiguration(section, resource);
|
||||
}
|
||||
|
||||
public registerTask(task: string, callback: azdata.tasks.ITaskHandler) {
|
||||
azdata.tasks.registerTask(task, callback);
|
||||
}
|
||||
|
||||
public getCredentials(connectionId: string) {
|
||||
return azdata.connection.getCredentials(connectionId);
|
||||
}
|
||||
|
||||
public getConnectionString(connectionId: string, includePassword: boolean) {
|
||||
return azdata.connection.getConnectionString(connectionId, includePassword);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
60
extensions/import/src/common/constants.ts
Normal file
60
extensions/import/src/common/constants.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
export const extensionConfigSectionName = 'flatFileImport';
|
||||
export const serviceName = 'Flat File Import Service';
|
||||
export const providerId = 'FlatFileImport';
|
||||
export const configLogDebugInfo = 'logDebugInfo';
|
||||
export const sqlConfigSectionName = 'sql';
|
||||
export const mssqlProvider = 'MSSQL';
|
||||
|
||||
export const supportedProviders = [mssqlProvider];
|
||||
|
||||
// Links
|
||||
export const serviceCrashLink = 'https://github.com/Microsoft/azuredatastudio/issues/2090';
|
||||
|
||||
// Tasks
|
||||
export const flatFileImportStartCommand = 'flatFileImport.start';
|
||||
|
||||
// Localized texts
|
||||
export const crashButtonText = localize('import.serviceCrashButton', "Give Feedback");
|
||||
export const serviceCrashMessageText = localize('serviceCrashMessage', "service component could not start");
|
||||
export const serverDropDownTitleText = localize('flatFileImport.serverDropdownTitle', "Server the database is in");
|
||||
export const databaseDropdownTitleText = localize('flatFileImport.databaseDropdownTitle', "Database the table is created in");
|
||||
export const browseFilesText = localize('flatFileImport.browseFiles', "Browse");
|
||||
export const openFileText = localize('flatFileImport.openFile', "Open");
|
||||
export const fileTextboxTitleText = localize('flatFileImport.fileTextboxTitle', "Location of the file to be imported");
|
||||
export const tableTextboxTitleText = localize('flatFileImport.tableTextboxTitle', "New table name");
|
||||
export const schemaTextboxTitleText = localize('flatFileImport.schemaTextboxTitle', "Table schema");
|
||||
export const importDataText = localize('flatFileImport.importData', "Import Data");
|
||||
export const nextText = localize('flatFileImport.next', "Next");
|
||||
export const columnNameText = localize('flatFileImport.columnName', "Column Name");
|
||||
export const dataTypeText = localize('flatFileImport.dataType', "Data Type");
|
||||
export const primaryKeyText = localize('flatFileImport.primaryKey', "Primary Key");
|
||||
export const allowNullsText = localize('flatFileImport.allowNulls', "Allow Nulls");
|
||||
export const successTitleText = localize('flatFileImport.prosePreviewMessage', "This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.");
|
||||
export const failureTitleText = localize('flatFileImport.prosePreviewMessageFail', "This operation was unsuccessful. Please try a different input file.");
|
||||
export const refreshText = localize('flatFileImport.refresh', "Refresh");
|
||||
export const importInformationText = localize('flatFileImport.importInformation', "Import information");
|
||||
export const importStatusText = localize('flatFileImport.importStatus', "Import status");
|
||||
export const serverNameText = localize('flatFileImport.serverName', "Server name");
|
||||
export const databaseText = localize('flatFileImport.databaseName', "Database name");
|
||||
export const tableNameText = localize('flatFileImport.tableName', "Table name");
|
||||
export const tableSchemaText = localize('flatFileImport.tableSchema', "Table schema");
|
||||
export const fileImportText = localize('flatFileImport.fileImport', "File to be imported");
|
||||
export const updateText = localize('flatFileImport.success.norows', "✔ You have successfully inserted the data into a table.");
|
||||
export const needConnectionText = localize('import.needConnection', "Please connect to a server before using this wizard.");
|
||||
export const needSqlConnectionText = localize('import.needSQLConnection', "SQL Server Import extension does not support this type of connection");
|
||||
export const wizardNameText = localize('flatFileImport.wizardName', "Import flat file wizard");
|
||||
export const page1NameText = localize('flatFileImport.page1Name', "Specify Input File");
|
||||
export const page2NameText = localize('flatFileImport.page2Name', "Preview Data");
|
||||
export const page3NameText = localize('flatFileImport.page3Name', "Modify Columns");
|
||||
export const page4NameText = localize('flatFileImport.page4Name', "Summary");
|
||||
export const importNewFileText = localize('flatFileImport.importNewFile', "Import new file");
|
||||
|
||||
// SQL Queries
|
||||
export const selectSchemaQuery = `SELECT name FROM sys.schemas`;
|
||||
Reference in New Issue
Block a user