Hookup sqlcmdvar delete (#22018)

* delete sqlcmd variable working

* undo add

* add test
This commit is contained in:
Kim Santiago
2023-02-23 16:44:08 -08:00
committed by GitHub
parent f53119c2a6
commit d75cf2b657
4 changed files with 38 additions and 3 deletions

View File

@@ -809,7 +809,9 @@ export class ProjectsController {
success = true;
}
} else if (node instanceof SqlCmdVariableTreeItem) {
// TODO: handle deleting sqlcmd var from project after swap
const sqlProjectsService = await utils.getSqlProjectsService();
const result = await sqlProjectsService.deleteSqlCmdVariable(project.projectFilePath, node.friendlyName);
success = result.success;
} else if (node instanceof FileNode || FolderNode) {
const fileEntry = this.getFileProjectEntry(project, node);

View File

@@ -58,7 +58,7 @@ export class SqlCmdVariablesTreeItem extends BaseProjectTreeItem {
* Represents a SQLCMD variable in a .sqlproj
*/
export class SqlCmdVariableTreeItem extends BaseProjectTreeItem {
constructor(private sqlcmdVar: string, sqlprojUri: vscode.Uri, sqlCmdNodeRelativeProjectUri: vscode.Uri) {
constructor(private sqlcmdVar: string, sqlCmdNodeRelativeProjectUri: vscode.Uri, sqlprojUri: vscode.Uri,) {
super(vscode.Uri.file(path.join(sqlCmdNodeRelativeProjectUri.fsPath, sqlcmdVar)), sqlprojUri);
}

View File

@@ -9,7 +9,7 @@ import * as sqldbproj from 'sqldbproj';
import * as vscode from 'vscode';
import * as constants from '../common/constants';
import { IconPathHelper } from '../common/iconHelper';
import { getDataWorkspaceExtensionApi } from '../common/utils';
import { getDataWorkspaceExtensionApi, getSqlProjectsService } from '../common/utils';
import { SqlDatabaseProjectTreeViewProvider } from '../controllers/databaseProjectTreeViewProvider';
import { ProjectsController } from '../controllers/projectController';
import { Project } from '../models/project';
@@ -41,6 +41,11 @@ export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvide
public async getProjectTreeDataProvider(projectFilePath: vscode.Uri): Promise<vscode.TreeDataProvider<BaseProjectTreeItem>> {
const provider = new SqlDatabaseProjectTreeViewProvider();
const project = await Project.openProject(projectFilePath.fsPath);
// open project in STS
const sqlProjectsService = await getSqlProjectsService();
await sqlProjectsService.openProject(projectFilePath.fsPath);
provider.load([project]);
return provider;
}

View File

@@ -922,6 +922,34 @@ describe('ProjectsController', function (): void {
should(proj1.files.find(f => f.relativePath === 'script1.sql') !== undefined).be.true(`The file path should not have been updated when trying to move script1.sql to proj2`);
});
});
describe('SqlCmd Variables', function (): void {
it('Should delete sqlcmd variable', async function (): Promise<void> {
let project = await testUtils.createTestProject(baselines.openSdkStyleSqlProjectBaseline);
const sqlProjectsService = await utils.getSqlProjectsService();
await sqlProjectsService.openProject(project.projectFilePath);
const projController = new ProjectsController(testContext.outputChannel);
const projRoot = new ProjectRootTreeItem(project);
should(Object.keys(project.sqlCmdVariables).length).equal(2, 'The project should start with 2 sqlcmd variables');
sinon.stub(vscode.window, 'showWarningMessage').returns(<any>Promise.resolve('Cancel'));
await projController.delete(createWorkspaceTreeItem(projRoot.children.find(x => x.friendlyName === constants.sqlcmdVariablesNodeName)!.children[0]));
// reload project
project = await Project.openProject(project.projectFilePath);
should(Object.keys(project.sqlCmdVariables).length).equal(2, 'The project should still have 2 sqlcmd variables if no was selected');
sinon.restore();
sinon.stub(vscode.window, 'showWarningMessage').returns(<any>Promise.resolve('Yes'));
await projController.delete(createWorkspaceTreeItem(projRoot.children.find(x => x.friendlyName === constants.sqlcmdVariablesNodeName)!.children[0]));
// reload project
project = await Project.openProject(project.projectFilePath);
should(Object.keys(project.sqlCmdVariables).length).equal(1, 'The project should only have 1 sqlcmd variable after deletion');
});
});
});
async function setupDeleteExcludeTest(proj: Project): Promise<[FileProjectEntry, ProjectRootTreeItem, FileProjectEntry, FileProjectEntry, FileProjectEntry]> {