diff --git a/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateTSqlModelRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateTSqlModelRequest.cs index f9d9e561..7bb613f3 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateTSqlModelRequest.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/DacFx/Contracts/GenerateTSqlModelRequest.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using Microsoft.SqlTools.Hosting.Protocol.Contracts; -using Microsoft.SqlTools.ServiceLayer.Utility; namespace Microsoft.SqlTools.ServiceLayer.DacFx.Contracts { @@ -33,7 +32,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx.Contracts /// class GenerateTSqlModelRequest { - public static readonly RequestType Type = - RequestType.Create("dacFx/generateTSqlModel"); + public static readonly RequestType Type = + RequestType.Create("dacFx/generateTSqlModel"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs b/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs index 2671485b..af5c4cd0 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/DacFx/DacFxService.cs @@ -12,7 +12,6 @@ using Microsoft.SqlTools.ServiceLayer.DacFx.Contracts; using Microsoft.SqlTools.ServiceLayer.Hosting; using Microsoft.SqlTools.ServiceLayer.TaskServices; using Microsoft.SqlServer.Dac.Model; -using Microsoft.SqlTools.ServiceLayer.Utility; using DacTableDesigner = Microsoft.Data.Tools.Sql.DesignServices.TableDesigner.TableDesigner; namespace Microsoft.SqlTools.ServiceLayer.DacFx @@ -271,7 +270,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx }); } - public async Task HandleGenerateTSqlModelRequest(GenerateTSqlModelParams requestParams, RequestContext requestContext) + public async Task HandleGenerateTSqlModelRequest(GenerateTSqlModelParams requestParams, RequestContext requestContext) { try { @@ -279,11 +278,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DacFx TSqlModel model = operation.GenerateTSqlModel(); projectModels.Value[operation.Parameters.ProjectUri] = model; - await requestContext.SendResult(new ResultStatus - { - Success = true, - ErrorMessage = null - }); + await requestContext.SendResult(true); } catch (Exception e) { diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxServiceTests.cs index ab5cd971..70addd64 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/DacFx/DacFxServiceTests.cs @@ -17,7 +17,6 @@ using Microsoft.SqlTools.ServiceLayer.DacFx.Contracts; using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility; using Microsoft.SqlTools.ServiceLayer.TaskServices; using Microsoft.SqlTools.ServiceLayer.Test.Common; -using Microsoft.SqlTools.ServiceLayer.Utility; using Microsoft.SqlServer.Dac.Model; using NUnit.Framework; using Moq; @@ -28,7 +27,6 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.DacFx public class DacFxServiceTests { private string publishProfileFolder = Path.Combine("..", "..", "..", "DacFx", "PublishProfiles"); - private string TSqlModelTestFolder = Path.Combine("..", "..", "..", "DacFx", "TSqlModels"); private const string SourceScript = @"CREATE TABLE [dbo].[table1] ( [ID] INT NOT NULL PRIMARY KEY, @@ -930,102 +928,106 @@ Streaming query statement contains a reference to missing output stream 'Missing Assert.That(actualValue, Is.EqualTo(expectedValue), $"Actual Property from Service is not equal to default property for {optionRow.Key}"); } } - - /// - /// Verify the generate Tsql model operation - /// - [Test] - public void GenerateTSqlModelFromSqlFiles() - { - DacFxService service = new DacFxService(); - Directory.CreateDirectory(TSqlModelTestFolder); - string sqlTable1DefinitionPath = Path.Join(TSqlModelTestFolder, "table1.sql"); - string sqlTable2DefinitionPath = Path.Join(TSqlModelTestFolder, "table2.sql"); - const string table1 = @"CREATE TABLE [dbo].[table1] - ( - [ID] INT NOT NULL PRIMARY KEY, - )"; - const string table2 = @"CREATE TABLE [dbo].[table2] - ( - [ID] INT NOT NULL PRIMARY KEY, - )"; - // create sql file - File.WriteAllText(sqlTable1DefinitionPath, table1); - File.WriteAllText(sqlTable2DefinitionPath, table2); - - var generateTSqlScriptParams = new GenerateTSqlModelParams - { - ProjectUri = Path.Join(TSqlModelTestFolder, "test.sqlproj"), - ModelTargetVersion = "Sql160", - FilePaths = new[] { sqlTable1DefinitionPath, sqlTable2DefinitionPath } - }; - - GenerateTSqlModelOperation op = new GenerateTSqlModelOperation(generateTSqlScriptParams); - var model = op.GenerateTSqlModel(); - var objects = model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table).ToList(); - - VerifyAndCleanup(sqlTable1DefinitionPath); - VerifyAndCleanup(sqlTable2DefinitionPath); - Directory.Delete(TSqlModelTestFolder); - - Assert.That(model.Version.ToString(), Is.EqualTo(generateTSqlScriptParams.ModelTargetVersion), $"Model version is not equal to {generateTSqlScriptParams.ModelTargetVersion}"); - Assert.That(objects, Is.Not.Empty); - - var tableNames = objects.Select(o => o.Name.ToString()).ToList(); - - Assert.That(tableNames.Count, Is.EqualTo(2), "Model was not populated correctly"); - CollectionAssert.AreEquivalent(tableNames, new[] { "[dbo].[table1]", "[dbo].[table2]" }, "Table names do not match"); - } - - /// - /// Verify the generate Tsql model operation, creates an empty model when files are empty - /// - [Test] - public void GenerateEmptyTSqlModel() - { - DacFxService service = new DacFxService(); - Directory.CreateDirectory(TSqlModelTestFolder); - - var generateTSqlScriptParams = new GenerateTSqlModelParams - { - ProjectUri = Path.Join(TSqlModelTestFolder, "test.sqlproj"), - ModelTargetVersion = "Sql160", - FilePaths = new string[] { } - }; - - GenerateTSqlModelOperation op = new GenerateTSqlModelOperation(generateTSqlScriptParams); - var model = op.GenerateTSqlModel(); - - // clean up - Directory.Delete(TSqlModelTestFolder); - - Assert.That(model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table).ToList().Count, Is.EqualTo(0), "Model is not empty"); - Assert.That(model.Version.ToString(), Is.EqualTo(generateTSqlScriptParams.ModelTargetVersion), $"Model version is not equal to {generateTSqlScriptParams.ModelTargetVersion}"); - } - - /// - /// Verify the generate TSql Model handle - /// - [Test] - public async Task VerifyGenerateTSqlModelHandle() - { - DacFxService service = new DacFxService(); - Directory.CreateDirectory(TSqlModelTestFolder); - - var generateTSqlScriptParams = new GenerateTSqlModelParams - { - ProjectUri = Path.Join(TSqlModelTestFolder, "test.sqlproj"), - ModelTargetVersion = "Sql160", - FilePaths = new string[] { } - }; - - var requestContext = new Mock>(); - requestContext.Setup((RequestContext x) => x.SendResult(It.Is((result) => result.Success == true))).Returns(Task.FromResult(new object())); - await service.HandleGenerateTSqlModelRequest(generateTSqlScriptParams, requestContext.Object); - - Directory.Delete(TSqlModelTestFolder); - - Assert.True(service.projectModels.Value.Keys.Contains(generateTSqlScriptParams.ProjectUri), "Model was not stored under project uri"); - } + } +} + +[TestFixture] +public class TSqlModelRequestTests +{ + private string TSqlModelTestFolder = string.Empty; + + private DacFxService service = new DacFxService(); + + [SetUp] + public void Create() + { + TSqlModelTestFolder = Path.Combine("..", "..", "..", "DacFx", "TSqlModels", Guid.NewGuid().ToString()); + Directory.CreateDirectory(TSqlModelTestFolder); + } + + [TearDown] + public void CleanUp() + { + Directory.Delete(TSqlModelTestFolder, true); + } + + /// + /// Verify the generate Tsql model operation + /// + [Test] + public void GenerateTSqlModelFromSqlFiles() + { + string sqlTable1DefinitionPath = Path.Join(TSqlModelTestFolder, "table1.sql"); + string sqlTable2DefinitionPath = Path.Join(TSqlModelTestFolder, "table2.sql"); + const string table1 = @"CREATE TABLE [dbo].[table1] + ( + [ID] INT NOT NULL PRIMARY KEY, + )"; + const string table2 = @"CREATE TABLE [dbo].[table2] + ( + [ID] INT NOT NULL PRIMARY KEY, + )"; + // create sql file + File.WriteAllText(sqlTable1DefinitionPath, table1); + File.WriteAllText(sqlTable2DefinitionPath, table2); + + var generateTSqlScriptParams = new GenerateTSqlModelParams + { + ProjectUri = Path.Join(TSqlModelTestFolder, "test.sqlproj"), + ModelTargetVersion = "Sql160", + FilePaths = new[] { sqlTable1DefinitionPath, sqlTable2DefinitionPath } + }; + + GenerateTSqlModelOperation op = new GenerateTSqlModelOperation(generateTSqlScriptParams); + var model = op.GenerateTSqlModel(); + var objects = model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table).ToList(); + + Assert.That(model.Version.ToString(), Is.EqualTo(generateTSqlScriptParams.ModelTargetVersion), $"Model version is not equal to {generateTSqlScriptParams.ModelTargetVersion}"); + Assert.That(objects, Is.Not.Empty, "Model is empty"); + + var tableNames = objects.Select(o => o.Name.ToString()).ToList(); + + Assert.That(tableNames.Count, Is.EqualTo(2), "Model was not populated correctly"); + CollectionAssert.AreEquivalent(tableNames, new[] { "[dbo].[table1]", "[dbo].[table2]" }, "Table names do not match"); + } + + /// + /// Verify the generate Tsql model operation, creates an empty model when files are empty + /// + [Test] + public void GenerateEmptyTSqlModel() + { + var generateTSqlScriptParams = new GenerateTSqlModelParams + { + ProjectUri = Path.Join(TSqlModelTestFolder, "test.sqlproj"), + ModelTargetVersion = "Sql160", + FilePaths = new string[] { } + }; + + GenerateTSqlModelOperation op = new GenerateTSqlModelOperation(generateTSqlScriptParams); + var model = op.GenerateTSqlModel(); + + Assert.That(model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table).ToList().Count, Is.EqualTo(0), "Model is not empty"); + Assert.That(model.Version.ToString(), Is.EqualTo(generateTSqlScriptParams.ModelTargetVersion), $"Model version is not equal to {generateTSqlScriptParams.ModelTargetVersion}"); + } + + /// + /// Verify the generate TSql Model handle + /// + [Test] + public async Task VerifyGenerateTSqlModelHandle() + { + var generateTSqlScriptParams = new GenerateTSqlModelParams + { + ProjectUri = Path.Join(TSqlModelTestFolder, "test.sqlproj"), + ModelTargetVersion = "Sql160", + FilePaths = new string[] { } + }; + + var requestContext = new Mock>(); + requestContext.Setup((RequestContext x) => x.SendResult(It.Is((result) => result == true))).Returns(Task.FromResult(new object())); + + await service.HandleGenerateTSqlModelRequest(generateTSqlScriptParams, requestContext.Object); + Assert.That(service.projectModels.Value, Contains.Key(generateTSqlScriptParams.ProjectUri), "Model was not stored under project uri"); } }