diff --git a/src/Microsoft.Build.Sql/sdk/Sdk.targets b/src/Microsoft.Build.Sql/sdk/Sdk.targets index 432794d..83b798b 100644 --- a/src/Microsoft.Build.Sql/sdk/Sdk.targets +++ b/src/Microsoft.Build.Sql/sdk/Sdk.targets @@ -53,6 +53,9 @@ + + @@ -70,6 +73,8 @@ + + diff --git a/test/Microsoft.Build.Sql.Tests/BuildTests.cs b/test/Microsoft.Build.Sql.Tests/BuildTests.cs index b20f123..9b3eb47 100644 --- a/test/Microsoft.Build.Sql.Tests/BuildTests.cs +++ b/test/Microsoft.Build.Sql.Tests/BuildTests.cs @@ -56,6 +56,66 @@ public void SuccessfulBuildWithPostDeployScript() this.VerifyDacPackage(expectPostDeployScript: true); } + [Test] + [Description("Verifies build with deployment extension configuration script.")] + public void SuccessfulBuildWithDeploymentExtensionConfigurationScript() + { + this.RemoveBuildFiles("Table2.sql"); + this.AddDeploymentExtensionConfigurationScripts("Table2.sql"); + + string stdOutput, stdError; + int exitCode = this.RunDotnetCommandOnProject("build", out stdOutput, out stdError); + + // Verify success + Assert.AreEqual(0, exitCode, "Build failed with error " + stdError); + Assert.AreEqual(string.Empty, stdError); + this.VerifyDacPackage(); + + // Verify the Table2 is not part of the model + using (TSqlModel model = new TSqlModel(this.GetDacpacPath())) + { + var tables = model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table); + Assert.IsTrue(tables.Any(), "Expected at least 1 table in the model."); + foreach (var table in tables) + { + if (table.Name.ToString().IndexOf("Table2", StringComparison.OrdinalIgnoreCase) >= 0) + { + Assert.Fail("Table2 should have been excluded from the model."); + } + } + } + } + + [Test] + [Description("Verifies build with build extension configuration script.")] + public void SuccessfulBuildWithBuildExtensionConfigurationScript() + { + this.RemoveBuildFiles("Table2.sql"); + this.AddBuildExtensionConfigurationScripts("Table2.sql"); + + string stdOutput, stdError; + int exitCode = this.RunDotnetCommandOnProject("build", out stdOutput, out stdError); + + // Verify success + Assert.AreEqual(0, exitCode, "Build failed with error " + stdError); + Assert.AreEqual(string.Empty, stdError); + this.VerifyDacPackage(); + + // Verify the Table2 is not part of the model + using (TSqlModel model = new TSqlModel(this.GetDacpacPath())) + { + var tables = model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table); + Assert.IsTrue(tables.Any(), "Expected at least 1 table in the model."); + foreach (var table in tables) + { + if (table.Name.ToString().IndexOf("Table2", StringComparison.OrdinalIgnoreCase) >= 0) + { + Assert.Fail("Table2 should have been excluded from the model."); + } + } + } + } + [Test] [Description("Verifies build with excluding file from project.")] public void BuildWithExclude() diff --git a/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs b/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs index 7af9b19..e077a72 100644 --- a/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs +++ b/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs @@ -250,6 +250,22 @@ protected void AddPostDeployScripts(params string[] files) ProjectUtils.AddItemGroup(this.GetProjectFilePath(), "PostDeploy", files); } + /// + /// Add deploymentextensionconfiguration scripts to the project. paths are relative. + /// + protected void AddDeploymentExtensionConfigurationScripts(params string[] files) + { + ProjectUtils.AddItemGroup(this.GetProjectFilePath(), "DeploymentExtensionConfiguration", files); + } + + /// + /// Add buildextensionconfiguration scripts to the project. paths are relative. + /// + protected void AddBuildExtensionConfigurationScripts(params string[] files) + { + ProjectUtils.AddItemGroup(this.GetProjectFilePath(), "BuildExtensionConfiguration", files); + } + /// /// Add scripts to the project that are not part of build. paths are relative. /// diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql new file mode 100644 index 0000000..c4cde37 --- /dev/null +++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql @@ -0,0 +1,5 @@ +CREATE TABLE [dbo].[Table1] +( + c1 int NOT NULL PRIMARY KEY, + c2 int NULL +) \ No newline at end of file diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql new file mode 100644 index 0000000..7927950 --- /dev/null +++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql @@ -0,0 +1,6 @@ +-- This file to be excluded from project by the test +CREATE TABLE [dbo].[Table2] +( + c1 int NOT NULL PRIMARY KEY, + c2 int NULL +) \ No newline at end of file diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql new file mode 100644 index 0000000..c4cde37 --- /dev/null +++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql @@ -0,0 +1,5 @@ +CREATE TABLE [dbo].[Table1] +( + c1 int NOT NULL PRIMARY KEY, + c2 int NULL +) \ No newline at end of file diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql new file mode 100644 index 0000000..7927950 --- /dev/null +++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql @@ -0,0 +1,6 @@ +-- This file to be excluded from project by the test +CREATE TABLE [dbo].[Table2] +( + c1 int NOT NULL PRIMARY KEY, + c2 int NULL +) \ No newline at end of file