From cf5928ee4f665f8918408ee136fa723e0c40577e Mon Sep 17 00:00:00 2001 From: Rigvita Sharma Date: Tue, 9 Jul 2024 10:02:15 +0530 Subject: [PATCH] Adding VS support * Importing ssdt targets if in VS * Updating Sdk.targets to bring support for BuildExtensionConfiguration and DeployExtnsionConfiguration and adding tests for the same --- src/Microsoft.Build.Sql/sdk/Sdk.targets | 5 ++ test/Microsoft.Build.Sql.Tests/BuildTests.cs | 60 +++++++++++++++++++ .../DotnetTestBase.cs | 16 +++++ .../Table1.sql | 5 ++ .../Table2.sql | 6 ++ .../Table1.sql | 5 ++ .../Table2.sql | 6 ++ 7 files changed, 103 insertions(+) create mode 100644 test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql create mode 100644 test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql create mode 100644 test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql create mode 100644 test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql 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