Add dacpac references to sqlproj with relative path (#14877)

* relative paths written to sqlproj, but can't delete yet

* only keep track of relative path

* remove leading slash

* add test

* use path.relative

* Add error message if dacpac reference is located on a different drive
This commit is contained in:
Kim Santiago
2021-03-30 17:06:04 -07:00
committed by GitHub
parent af4ad1fcb1
commit f4e1f85e0f
5 changed files with 87 additions and 1 deletions

View File

@@ -601,6 +601,62 @@ describe('ProjectsController', function (): void {
should(showErrorMessageSpy.called).be.true('showErrorMessage should have been called');
});
it('Should add dacpac references as relative paths', async function (): Promise<void> {
const projFilePath = await testUtils.createTestSqlProjFile(baselines.newProjectFileBaseline);
const projController = new ProjectsController();
const project1 = await Project.openProject(vscode.Uri.file(projFilePath).fsPath);
const showErrorMessageSpy = sinon.spy(vscode.window, 'showErrorMessage');
const dataWorkspaceMock = TypeMoq.Mock.ofType<dataworkspace.IExtension>();
sinon.stub(vscode.extensions, 'getExtension').returns(<any>{ exports: dataWorkspaceMock.object });
// add dacpac reference to something in the same folder
should(project1.databaseReferences.length).equal(0, 'There should not be any database references to start with');
await projController.addDatabaseReferenceCallback(project1, {
databaseName: <string>this.databaseNameTextbox?.value,
dacpacFileLocation: vscode.Uri.file(path.join(path.dirname(projFilePath), 'sameFolderTest.dacpac')),
suppressMissingDependenciesErrors: false
},
{ treeDataProvider: new SqlDatabaseProjectTreeViewProvider(), element: undefined });
should(showErrorMessageSpy.notCalled).be.true('showErrorMessage should not have been called');
should(project1.databaseReferences.length).equal(1, 'Dacpac reference should have been added');
should(project1.databaseReferences[0].databaseName).equal('sameFolderTest');
should(project1.databaseReferences[0].pathForSqlProj()).equal('sameFolderTest.dacpac');
// make sure reference to sameFolderTest.dacpac was added to project file
let projFileText = (await fs.readFile(projFilePath)).toString();
should(projFileText).containEql('sameFolderTest.dacpac');
// add dacpac reference to something in the a nested folder
await projController.addDatabaseReferenceCallback(project1, {
databaseName: <string>this.databaseNameTextbox?.value,
dacpacFileLocation: vscode.Uri.file(path.join(path.dirname(projFilePath), 'refs', 'nestedFolderTest.dacpac')),
suppressMissingDependenciesErrors: false
},
{ treeDataProvider: new SqlDatabaseProjectTreeViewProvider(), element: undefined });
should(showErrorMessageSpy.notCalled).be.true('showErrorMessage should not have been called');
should(project1.databaseReferences.length).equal(2, 'Another dacpac reference should have been added');
should(project1.databaseReferences[1].databaseName).equal('nestedFolderTest');
should(project1.databaseReferences[1].pathForSqlProj()).equal('refs\\nestedFolderTest.dacpac');
// make sure reference to nestedFolderTest.dacpac was added to project file
projFileText = (await fs.readFile(projFilePath)).toString();
should(projFileText).containEql('refs\\nestedFolderTest.dacpac');
// add dacpac reference to something in the a folder outside of the project
await projController.addDatabaseReferenceCallback(project1, {
databaseName: <string>this.databaseNameTextbox?.value,
dacpacFileLocation: vscode.Uri.file(path.join(path.dirname(projFilePath), '..','someFolder', 'outsideFolderTest.dacpac')),
suppressMissingDependenciesErrors: false
},
{ treeDataProvider: new SqlDatabaseProjectTreeViewProvider(), element: undefined });
should(showErrorMessageSpy.notCalled).be.true('showErrorMessage should not have been called');
should(project1.databaseReferences.length).equal(3, 'Another dacpac reference should have been added');
should(project1.databaseReferences[2].databaseName).equal('outsideFolderTest');
should(project1.databaseReferences[2].pathForSqlProj()).equal('..\\someFolder\\outsideFolderTest.dacpac');
// make sure reference to outsideFolderTest.dacpac was added to project file
projFileText = (await fs.readFile(projFilePath)).toString();
should(projFileText).containEql('..\\someFolder\\outsideFolderTest.dacpac');
});
});
});