mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 10:58:30 -05:00
Adding missing nuget references for SqlProjects functionality (#1827)
* Adding test messages * Adding file system globbing reference * fixing string * fixing string again * Sigh
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
<PackageReference Update="Microsoft.Rest.ClientRuntime" Version="2.3.21" />
|
<PackageReference Update="Microsoft.Rest.ClientRuntime" Version="2.3.21" />
|
||||||
<PackageReference Update="Microsoft.Rest.ClientRuntime.Azure" Version="3.3.19" />
|
<PackageReference Update="Microsoft.Rest.ClientRuntime.Azure" Version="3.3.19" />
|
||||||
<PackageReference Update="Microsoft.Extensions.DependencyModel" Version="3.1.4" />
|
<PackageReference Update="Microsoft.Extensions.DependencyModel" Version="3.1.4" />
|
||||||
|
<PackageReference Update="Microsoft.Extensions.FileSystemGlobbing" Version="7.0.0" />
|
||||||
|
|
||||||
<PackageReference Update="Microsoft.Azure.Management.ResourceManager" Version="3.7.1-preview" />
|
<PackageReference Update="Microsoft.Azure.Management.ResourceManager" Version="3.7.1-preview" />
|
||||||
<PackageReference Update="Microsoft.Azure.Management.Sql" Version="1.41.0-preview" />
|
<PackageReference Update="Microsoft.Azure.Management.Sql" Version="1.41.0-preview" />
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" />
|
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" />
|
||||||
<PackageReference Include="Microsoft.SqlServer.DacFx" />
|
<PackageReference Include="Microsoft.SqlServer.DacFx" />
|
||||||
<PackageReference Include="Microsoft.SqlServer.DacFx.Projects" />
|
<PackageReference Include="Microsoft.SqlServer.DacFx.Projects" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" />
|
||||||
<PackageReference Include="Microsoft.Data.SqlClient" />
|
<PackageReference Include="Microsoft.Data.SqlClient" />
|
||||||
<PackageReference Include="Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider" />
|
<PackageReference Include="Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider" />
|
||||||
<PackageReference Include="Microsoft.SqlServer.Assessment" />
|
<PackageReference Include="Microsoft.SqlServer.Assessment" />
|
||||||
|
|||||||
@@ -32,8 +32,10 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
|
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsFalse(requestMock.Result.Success);
|
Assert.IsFalse(requestMock.Result.Success, $"{nameof(service.HandleNewSqlProjectRequest)} when file already exists expected to fail");
|
||||||
Assert.IsTrue(requestMock.Result.ErrorMessage!.Contains("Cannot create a new SQL project"));
|
Assert.IsTrue(requestMock.Result.ErrorMessage!.Contains("Cannot create a new SQL project")
|
||||||
|
&& requestMock.Result.ErrorMessage!.Contains("a file already exists at that location"),
|
||||||
|
$"Error message expected to mention that a file already exists, but instead was: '{requestMock.Result.ErrorMessage}'");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -48,7 +50,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
|
|
||||||
SqlProjectsService service = new();
|
SqlProjectsService service = new();
|
||||||
|
|
||||||
Assert.AreEqual(0, service.Projects.Count);
|
Assert.AreEqual(0, service.Projects.Count, "Baseline number of loaded projects");
|
||||||
|
|
||||||
// Validate creating SDK-style project
|
// Validate creating SDK-style project
|
||||||
MockRequest<ResultStatus> requestMock = new();
|
MockRequest<ResultStatus> requestMock = new();
|
||||||
@@ -56,13 +58,12 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
{
|
{
|
||||||
ProjectUri = sdkProjectUri,
|
ProjectUri = sdkProjectUri,
|
||||||
SqlProjectType = ProjectType.SdkStyle
|
SqlProjectType = ProjectType.SdkStyle
|
||||||
|
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleNewSqlProjectRequest), "SDK");
|
||||||
Assert.AreEqual(1, service.Projects.Count);
|
Assert.AreEqual(1, service.Projects.Count, "Number of loaded projects after creating SDK not as expected");
|
||||||
Assert.IsTrue(service.Projects.ContainsKey(sdkProjectUri));
|
Assert.IsTrue(service.Projects.ContainsKey(sdkProjectUri), "Loaded project list expected to contain SDK project URI");
|
||||||
Assert.AreEqual(service.Projects[sdkProjectUri].SqlProjStyle, ProjectType.SdkStyle);
|
Assert.AreEqual(ProjectType.SdkStyle, service.Projects[sdkProjectUri].SqlProjStyle, "SqlProj style expected to be SDK");
|
||||||
|
|
||||||
// Validate creating Legacy-style project
|
// Validate creating Legacy-style project
|
||||||
requestMock = new();
|
requestMock = new();
|
||||||
@@ -72,26 +73,26 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
SqlProjectType = ProjectType.LegacyStyle
|
SqlProjectType = ProjectType.LegacyStyle
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleNewSqlProjectRequest), "Legacy");
|
||||||
Assert.AreEqual(2, service.Projects.Count);
|
Assert.AreEqual(2, service.Projects.Count, "Number of loaded projects after creating Legacy");
|
||||||
Assert.IsTrue(service.Projects.ContainsKey(legacyProjectUri));
|
Assert.IsTrue(service.Projects.ContainsKey(legacyProjectUri), "Loaded project list expected to contain Legacy project URI");
|
||||||
Assert.AreEqual(service.Projects[legacyProjectUri].SqlProjStyle, ProjectType.LegacyStyle);
|
Assert.AreEqual(service.Projects[legacyProjectUri].SqlProjStyle, ProjectType.LegacyStyle, "SqlProj style");
|
||||||
|
|
||||||
// Validate closing a project
|
// Validate closing a project
|
||||||
requestMock = new();
|
requestMock = new();
|
||||||
await service.HandleCloseSqlProjectRequest(new SqlProjectParams() { ProjectUri = sdkProjectUri }, requestMock.Object);
|
await service.HandleCloseSqlProjectRequest(new SqlProjectParams() { ProjectUri = sdkProjectUri }, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleCloseSqlProjectRequest));
|
||||||
Assert.AreEqual(1, service.Projects.Count);
|
Assert.AreEqual(1, service.Projects.Count, "Number of loaded projects after closing SDK project");
|
||||||
Assert.IsTrue(!service.Projects.ContainsKey(sdkProjectUri));
|
Assert.IsTrue(!service.Projects.ContainsKey(sdkProjectUri), "Loaded project list should not contain SDK after closing");
|
||||||
|
|
||||||
// Validate opening a project
|
// Validate opening a project
|
||||||
requestMock = new();
|
requestMock = new();
|
||||||
await service.HandleOpenSqlProjectRequest(new SqlProjectParams() { ProjectUri = sdkProjectUri }, requestMock.Object);
|
await service.HandleOpenSqlProjectRequest(new SqlProjectParams() { ProjectUri = sdkProjectUri }, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleOpenSqlProjectRequest));
|
||||||
Assert.AreEqual(2, service.Projects.Count);
|
Assert.AreEqual(2, service.Projects.Count, "Number of loaded projects after re-opening");
|
||||||
Assert.IsTrue(service.Projects.ContainsKey(sdkProjectUri));
|
Assert.IsTrue(service.Projects.ContainsKey(sdkProjectUri), "Loaded project list expected to contain SDK project URI after re-opening");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -100,13 +101,14 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
// Setup
|
// Setup
|
||||||
SqlProjectsService service = new();
|
SqlProjectsService service = new();
|
||||||
string projectUri = await service.CreateSqlProject();
|
string projectUri = await service.CreateSqlProject();
|
||||||
Assert.AreEqual(0, service.Projects[projectUri].SqlObjectScripts.Count);
|
Assert.AreEqual(0, service.Projects[projectUri].SqlObjectScripts.Count, "Baseline number of SqlObjectScripts");
|
||||||
|
|
||||||
// Validate adding a SQL object script
|
// Validate adding a SQL object script
|
||||||
MockRequest<ResultStatus> requestMock = new();
|
MockRequest<ResultStatus> requestMock = new();
|
||||||
string scriptRelativePath = "MyTable.sql";
|
string scriptRelativePath = "MyTable.sql";
|
||||||
string scriptFullPath = Path.Join(Path.GetDirectoryName(projectUri), scriptRelativePath);
|
string scriptFullPath = Path.Join(Path.GetDirectoryName(projectUri), scriptRelativePath);
|
||||||
await File.WriteAllTextAsync(scriptFullPath, "CREATE TABLE [MyTable] ([Id] INT)");
|
await File.WriteAllTextAsync(scriptFullPath, "CREATE TABLE [MyTable] ([Id] INT)");
|
||||||
|
Assert.IsTrue(File.Exists(scriptFullPath), $"{scriptFullPath} expected to be on disk");
|
||||||
|
|
||||||
await service.HandleAddSqlObjectScriptRequest(new SqlProjectScriptParams()
|
await service.HandleAddSqlObjectScriptRequest(new SqlProjectScriptParams()
|
||||||
{
|
{
|
||||||
@@ -114,9 +116,9 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
Path = scriptRelativePath
|
Path = scriptRelativePath
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleAddSqlObjectScriptRequest));
|
||||||
Assert.AreEqual(1, service.Projects[projectUri].SqlObjectScripts.Count);
|
Assert.AreEqual(1, service.Projects[projectUri].SqlObjectScripts.Count, "SqlObjectScripts count after add");
|
||||||
Assert.IsTrue(service.Projects[projectUri].SqlObjectScripts.Contains(scriptRelativePath));
|
Assert.IsTrue(service.Projects[projectUri].SqlObjectScripts.Contains(scriptRelativePath), $"SqlObjectScripts expected to contain {scriptRelativePath}");
|
||||||
|
|
||||||
// Validate excluding a SQL object script
|
// Validate excluding a SQL object script
|
||||||
requestMock = new();
|
requestMock = new();
|
||||||
@@ -126,9 +128,9 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
Path = scriptRelativePath
|
Path = scriptRelativePath
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleExcludeSqlObjectScriptRequest));
|
||||||
Assert.AreEqual(0, service.Projects[projectUri].SqlObjectScripts.Count);
|
Assert.AreEqual(0, service.Projects[projectUri].SqlObjectScripts.Count, "SqlObjectScripts count after exclude");
|
||||||
Assert.IsTrue(File.Exists(scriptFullPath));
|
Assert.IsTrue(File.Exists(scriptFullPath), $"{scriptFullPath} expected to still exist on disk");
|
||||||
|
|
||||||
// Re-add to set up for Delete
|
// Re-add to set up for Delete
|
||||||
requestMock = new();
|
requestMock = new();
|
||||||
@@ -138,8 +140,8 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
Path = scriptRelativePath
|
Path = scriptRelativePath
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleAddSqlObjectScriptRequest));
|
||||||
Assert.AreEqual(1, service.Projects[projectUri].SqlObjectScripts.Count);
|
Assert.AreEqual(1, service.Projects[projectUri].SqlObjectScripts.Count, "SqlObjectScripts count after re-add");
|
||||||
|
|
||||||
// Validate deleting a SQL object script
|
// Validate deleting a SQL object script
|
||||||
requestMock = new();
|
requestMock = new();
|
||||||
@@ -149,9 +151,9 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
Path = scriptRelativePath
|
Path = scriptRelativePath
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
requestMock.AssertSuccess(nameof(service.HandleDeleteSqlObjectScriptRequest));
|
||||||
Assert.AreEqual(0, service.Projects[projectUri].SqlObjectScripts.Count);
|
Assert.AreEqual(0, service.Projects[projectUri].SqlObjectScripts.Count, "SqlObjectScripts count after delete");
|
||||||
Assert.IsFalse(File.Exists(scriptFullPath));
|
Assert.IsFalse(File.Exists(scriptFullPath), $"{scriptFullPath} expected to have been deleted from disk");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +176,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.SqlProjects
|
|||||||
|
|
||||||
}, requestMock.Object);
|
}, requestMock.Object);
|
||||||
|
|
||||||
Assert.IsTrue(requestMock.Result.Success);
|
Assert.IsTrue(requestMock.Result.Success, $"Failed to create project: {requestMock.Result.ErrorMessage}");
|
||||||
|
|
||||||
return projectUri;
|
return projectUri;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ using System;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.SqlTools.Hosting.Protocol;
|
using Microsoft.SqlTools.Hosting.Protocol;
|
||||||
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
|
using Microsoft.SqlTools.Hosting.Protocol.Contracts;
|
||||||
|
using Microsoft.SqlTools.ServiceLayer.Utility;
|
||||||
using Moq;
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
||||||
{
|
{
|
||||||
@@ -61,7 +63,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MockRequest<T>
|
public class MockRequest<T> where T : ResultStatus
|
||||||
{
|
{
|
||||||
private T? result;
|
private T? result;
|
||||||
public T Result => result ?? throw new InvalidOperationException("No result has been sent for the request");
|
public T Result => result ?? throw new InvalidOperationException("No result has been sent for the request");
|
||||||
@@ -73,5 +75,15 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking
|
|||||||
{
|
{
|
||||||
Mock = RequestContextMocks.Create<T>(actual => result = actual);
|
Mock = RequestContextMocks.Create<T>(actual => result = actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asserts that this request was successful
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="handlerName">Name of the handler, recommended to use nameof(service.MyHandler), used in the failure message</param>
|
||||||
|
/// <param name="descriptor">Optional extra descriptor, parenthesized in the failure message</param>
|
||||||
|
public void AssertSuccess(string handlerName, string? descriptor = null)
|
||||||
|
{
|
||||||
|
Assert.IsTrue(this.Result.Success, $"{handlerName}{(descriptor != null ? $" ({descriptor})" : String.Empty)} expected to succeed, but failed with error: '{this.Result.ErrorMessage}'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user