From d75cf2b657b1091b33d939e5fcd9b94d4b26d458 Mon Sep 17 00:00:00 2001 From: Kim Santiago <31145923+kisantia@users.noreply.github.com> Date: Thu, 23 Feb 2023 16:44:08 -0800 Subject: [PATCH] Hookup sqlcmdvar delete (#22018) * delete sqlcmd variable working * undo add * add test --- .../src/controllers/projectController.ts | 4 ++- .../src/models/tree/sqlcmdVariableTreeItem.ts | 2 +- .../src/projectProvider/projectProvider.ts | 7 ++++- .../src/test/projectController.test.ts | 28 +++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index d342f76701..18361ed0d3 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -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); diff --git a/extensions/sql-database-projects/src/models/tree/sqlcmdVariableTreeItem.ts b/extensions/sql-database-projects/src/models/tree/sqlcmdVariableTreeItem.ts index 6fd65edd42..6b9eb4a7d3 100644 --- a/extensions/sql-database-projects/src/models/tree/sqlcmdVariableTreeItem.ts +++ b/extensions/sql-database-projects/src/models/tree/sqlcmdVariableTreeItem.ts @@ -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); } diff --git a/extensions/sql-database-projects/src/projectProvider/projectProvider.ts b/extensions/sql-database-projects/src/projectProvider/projectProvider.ts index 1ed64f162f..a8cb43ee47 100644 --- a/extensions/sql-database-projects/src/projectProvider/projectProvider.ts +++ b/extensions/sql-database-projects/src/projectProvider/projectProvider.ts @@ -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> { 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; } diff --git a/extensions/sql-database-projects/src/test/projectController.test.ts b/extensions/sql-database-projects/src/test/projectController.test.ts index 3bc4bcf486..e0b3967e9d 100644 --- a/extensions/sql-database-projects/src/test/projectController.test.ts +++ b/extensions/sql-database-projects/src/test/projectController.test.ts @@ -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 { + 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(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(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]> {