Add support for System database package references for SDK-style sql projects (#23309)

* add package reference type for system db references

* Add radio buttons

* hookup

* add test

* handle changing reference type radio buttons

* cleanup

* update strings

* change style to type

* change more places with style to type

* blank lines
This commit is contained in:
Kim Santiago
2023-06-13 13:06:12 -10:00
committed by GitHub
parent 398a91456d
commit 1ff0a07217
12 changed files with 136 additions and 24 deletions

View File

@@ -17,7 +17,7 @@ import { Uri, window } from 'vscode';
import { IDacpacReferenceSettings, INugetPackageReferenceSettings, IProjectReferenceSettings, ISystemDatabaseReferenceSettings } from '../models/IDatabaseReferenceSettings';
import { ItemType } from 'sqldbproj';
import { SystemDatabaseReferenceProjectEntry, SqlProjectReferenceProjectEntry, DacpacReferenceProjectEntry } from '../models/projectEntry';
import { ProjectType, SystemDatabase } from 'mssql';
import { ProjectType, SystemDatabase, SystemDbReferenceType } from 'mssql';
describe('Project: sqlproj content operations', function (): void {
before(async function (): Promise<void> {
@@ -551,15 +551,40 @@ describe('Project: database references', function (): void {
should(ref).equal(undefined, 'msdb reference should be deleted');
});
it('Should add system database reference correctly', async function (): Promise<void> {
it('Should add system database artifact reference correctly', async function (): Promise<void> {
let project = await testUtils.createTestSqlProject(this.test);
const msdbRefSettings: ISystemDatabaseReferenceSettings = { databaseVariableLiteralValue: systemDatabaseToString(SystemDatabase.MSDB), systemDb: SystemDatabase.MSDB, suppressMissingDependenciesErrors: true };
const msdbRefSettings: ISystemDatabaseReferenceSettings = {
databaseVariableLiteralValue: systemDatabaseToString(SystemDatabase.MSDB),
systemDb: SystemDatabase.MSDB,
suppressMissingDependenciesErrors: true,
systemDbReferenceType: SystemDbReferenceType.ArtifactReference
};
await project.addSystemDatabaseReference(msdbRefSettings);
(project.databaseReferences.length).should.equal(1, 'There should be one database reference after adding a reference to msdb');
(project.databaseReferences[0].referenceName).should.equal(msdbRefSettings.databaseVariableLiteralValue, 'databaseName');
(project.databaseReferences[0].suppressMissingDependenciesErrors).should.equal(msdbRefSettings.suppressMissingDependenciesErrors, 'suppressMissingDependenciesErrors');
const projFileText = (await fs.readFile(project.projectFilePath)).toString();
(projFileText).should.containEql('<ArtifactReference Include="$(SystemDacpacsLocation)');
});
it('Should add system database package reference correctly', async function (): Promise<void> {
let project = await testUtils.createTestSqlProject(this.test);
const msdbRefSettings: ISystemDatabaseReferenceSettings = {
databaseVariableLiteralValue: systemDatabaseToString(SystemDatabase.MSDB),
systemDb: SystemDatabase.MSDB,
suppressMissingDependenciesErrors: true,
systemDbReferenceType: SystemDbReferenceType.PackageReference
};
await project.addSystemDatabaseReference(msdbRefSettings);
(project.databaseReferences.length).should.equal(1, 'There should be one database reference after adding a reference to msdb');
(project.databaseReferences[0].referenceName).should.equal(msdbRefSettings.databaseVariableLiteralValue, 'databaseName');
(project.databaseReferences[0].suppressMissingDependenciesErrors).should.equal(msdbRefSettings.suppressMissingDependenciesErrors, 'suppressMissingDependenciesErrors');
const projFileText = (await fs.readFile(project.projectFilePath)).toString();
(projFileText).should.containEql('Include="Microsoft.SqlServer.Dacpacs.Msdb">');
});
it('Should add a dacpac reference to the same database correctly', async function (): Promise<void> {
@@ -783,7 +808,12 @@ describe('Project: database references', function (): void {
should(project.databaseReferences.length).equal(0, 'There should be no database references to start with');
const systemDbReference: ISystemDatabaseReferenceSettings = { databaseVariableLiteralValue: systemDatabaseToString(SystemDatabase.Master), systemDb: SystemDatabase.Master, suppressMissingDependenciesErrors: false };
const systemDbReference: ISystemDatabaseReferenceSettings = {
databaseVariableLiteralValue: systemDatabaseToString(SystemDatabase.Master),
systemDb: SystemDatabase.Master,
suppressMissingDependenciesErrors: false,
systemDbReferenceType: SystemDbReferenceType.ArtifactReference
};
await project.addSystemDatabaseReference(systemDbReference);
project = await Project.openProject(projFilePath);
should(project.databaseReferences.length).equal(1, 'There should be one database reference after adding a reference to master');

View File

@@ -686,7 +686,7 @@ describe('ProjectsController', function (): void {
addDbReferenceDialog.callBase = true;
addDbReferenceDialog.setup(x => x.addReferenceClick()).returns(() => {
return projController.object.addDatabaseReferenceCallback(proj,
{ systemDb: SystemDatabase.Master, databaseName: 'master', suppressMissingDependenciesErrors: false },
{ systemDb: SystemDatabase.Master, databaseName: 'master', suppressMissingDependenciesErrors: false, systemDbReferenceType: mssql.SystemDbReferenceType.ArtifactReference },
{ treeDataProvider: new SqlDatabaseProjectTreeViewProvider(), element: undefined });
});
addDbReferenceDialog.setup(x => x.openDialog()).returns(() => Promise.resolve());