diff --git a/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/ext/Newtonsoft.Json/project.json b/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/ext/Newtonsoft.Json/project.json index baf23136c..49f740598 100644 --- a/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/ext/Newtonsoft.Json/project.json +++ b/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/ext/Newtonsoft.Json/project.json @@ -1,8 +1,8 @@ { - "version": "6.0.8", + "version": "9.0.1", "dependencies": { }, "frameworks": { - "dnx451": { } + "netstandard1.5": { } } } diff --git a/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/home/src/MainProject/project.json b/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/home/src/MainProject/project.json index fb6c9c4e9..aa50018cd 100644 --- a/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/home/src/MainProject/project.json +++ b/TestAssets/ProjectModelServer/DthUpdateSearchPathSample/home/src/MainProject/project.json @@ -1,8 +1,8 @@ { "dependencies": { - "Newtonsoft.Json": "6.0.8" + "Newtonsoft.Json": "9.0.1" }, "frameworks": { - "dnx451": { } + "netstandard1.5": {} } -} +} \ No newline at end of file diff --git a/src/dotnet/commands/dotnet-projectmodel-server/Helpers/DependencyTypeChangeFinder.cs b/src/dotnet/commands/dotnet-projectmodel-server/Helpers/DependencyTypeChangeFinder.cs index ac13b6cc4..7865c3126 100644 --- a/src/dotnet/commands/dotnet-projectmodel-server/Helpers/DependencyTypeChangeFinder.cs +++ b/src/dotnet/commands/dotnet-projectmodel-server/Helpers/DependencyTypeChangeFinder.cs @@ -9,13 +9,13 @@ namespace Microsoft.DotNet.ProjectModel.Server.Helpers { public static IEnumerable Diagnose( ProjectContext context, - IEnumerable currentSearchPaths) + IEnumerable previousSearchPaths) { var result = new List(); var project = context.ProjectFile; var libraries = context.LibraryManager.GetLibraries(); - var updatedSearchPath = GetUpdatedSearchPaths(currentSearchPaths, project.ResolveSearchPaths()); + var updatedSearchPath = GetUpdatedSearchPaths(previousSearchPaths, project.ResolveSearchPaths()); var projectCandiates = GetProjectCandidates(updatedSearchPath); var rootDependencies = libraries.FirstOrDefault(library => string.Equals(library.Identity.Name, project.Name)) ?.Dependencies diff --git a/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectContextSnapshot.cs b/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectContextSnapshot.cs index 73c8f91d4..1307714d0 100644 --- a/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectContextSnapshot.cs +++ b/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectContextSnapshot.cs @@ -24,13 +24,13 @@ namespace Microsoft.DotNet.ProjectModel.Server public IReadOnlyList DependencyDiagnostics { get; set; } public IDictionary Dependencies { get; set; } - public static ProjectContextSnapshot Create(ProjectContext context, string configuration, IEnumerable currentSearchPaths) + public static ProjectContextSnapshot Create(ProjectContext context, string configuration, IEnumerable previousSearchPaths) { var snapshot = new ProjectContextSnapshot(); var allDependencyDiagnostics = new List(); allDependencyDiagnostics.AddRange(context.LibraryManager.GetAllDiagnostics()); - allDependencyDiagnostics.AddRange(DependencyTypeChangeFinder.Diagnose(context, currentSearchPaths)); + allDependencyDiagnostics.AddRange(DependencyTypeChangeFinder.Diagnose(context, previousSearchPaths)); var diagnosticsLookup = allDependencyDiagnostics.ToLookup(d => d.Source); diff --git a/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectSnapshot.cs b/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectSnapshot.cs index 9b44f7652..0b28210bf 100644 --- a/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectSnapshot.cs +++ b/src/dotnet/commands/dotnet-projectmodel-server/InternalModels/ProjectSnapshot.cs @@ -22,7 +22,7 @@ namespace Microsoft.DotNet.ProjectModel.Server public static ProjectSnapshot Create(string projectDirectory, string configuration, DesignTimeWorkspace workspaceContext, - IReadOnlyList projectSearchPaths, + IReadOnlyList previousSearchPaths, bool clearWorkspaceContextCache) { var projectContextsCollection = workspaceContext.GetProjectContextCollection(projectDirectory, clearWorkspaceContextCache); @@ -42,7 +42,7 @@ namespace Microsoft.DotNet.ProjectModel.Server foreach (var projectContext in projectContextsCollection.FrameworkOnlyContexts) { snapshot.ProjectContexts[projectContext.TargetFramework] = - ProjectContextSnapshot.Create(projectContext, configuration, currentSearchPaths); + ProjectContextSnapshot.Create(projectContext, configuration, previousSearchPaths); } return snapshot; diff --git a/test/dotnet-projectmodel-server.Tests/DthTests.cs b/test/dotnet-projectmodel-server.Tests/DthTests.cs index 8e87426e1..77db2d429 100644 --- a/test/dotnet-projectmodel-server.Tests/DthTests.cs +++ b/test/dotnet-projectmodel-server.Tests/DthTests.cs @@ -257,11 +257,11 @@ namespace Microsoft.DotNet.ProjectModel.Server.Tests } } - [Fact(Skip = "Require dotnet restore integration test")] + [Fact] public void DthDependencies_UpdateGlobalJson_RefreshDependencies() { - var assets = new TestAssetsManager(Path.Combine(AppContext.BaseDirectory, "TestAssets", "ProjectModelServer")); - var projectPath = assets.CreateTestInstance("DthUpdateSearchPathSample").WithLockFiles().TestRoot; + var assetsManager = new TestAssetsManager(Path.Combine(RepoRoot, "TestAssets", "ProjectModelServer")); + var projectPath = assetsManager.CreateTestInstance("DthUpdateSearchPathSample").WithLockFiles().TestRoot; Assert.True(Directory.Exists(projectPath)); using (var server = new DthTestServer()) @@ -290,7 +290,7 @@ namespace Microsoft.DotNet.ProjectModel.Server.Tests // Overwrite the global.json to remove search path to ext File.WriteAllText( Path.Combine(projectPath, "home", GlobalSettings.FileName), - JsonConvert.SerializeObject(new { project = new string[] { "src" } })); + JsonConvert.SerializeObject(new { projects = new string[] { "src" } })); client.SendPayload(testProject, "RefreshDependencies"); @@ -302,17 +302,63 @@ namespace Microsoft.DotNet.ProjectModel.Server.Tests client.DrainTillFirst("Dependencies") .RetrieveDependency("Newtonsoft.Json") - .AssertProperty("Type", "") .AssertProperty("Resolved", false) + .AssertProperty("Type", "Project") .RetrievePropertyAs("Errors") .AssertJArrayCount(1) .RetrieveArraryElementAs(0) - .AssertProperty("ErrorCode", "NU1010"); + .AssertProperty("ErrorCode", ErrorCodes.NU1010); client.DrainTillFirst("DependencyDiagnostics") .RetrieveDependencyDiagnosticsCollection() .RetrieveDependencyDiagnosticsErrorAt(0) - .AssertProperty("ErrorCode", "NU1010"); + .AssertProperty("ErrorCode", ErrorCodes.NU1010); + + var restoreCommand = new RestoreCommand(); + restoreCommand.WorkingDirectory = projectPath; + restoreCommand.Execute().Should().Pass(); + + client.SendPayload(testProject, "RefreshDependencies"); + + client.DrainTillFirst("Dependencies") + .RetrieveDependency("Newtonsoft.Json") + .AssertProperty("Resolved", true) + .AssertProperty("Type", "Package") + .RetrievePropertyAs("Errors") + .AssertJArrayCount(0); + + client.DrainTillFirst("DependencyDiagnostics") + .RetrievePayloadAs() + .AssertProperty("Errors", array => array.Count == 0) + .AssertProperty("Warnings", array => array.Count == 0); + + // Overwrite the global.json to add search path to ext back + File.WriteAllText( + Path.Combine(projectPath, "home", GlobalSettings.FileName), + JsonConvert.SerializeObject(new { projects = new string[] { "src", "../ext" } })); + + client.SendPayload(testProject, "RefreshDependencies"); + + client.DrainTillFirst("ProjectInformation") + .RetrievePayloadAs() + .RetrievePropertyAs("ProjectSearchPaths") + .AssertJArrayCount(2) + .AssertJArrayElement(0, Path.Combine(projectPath, "home", "src")) + .AssertJArrayElement(1, Path.Combine(projectPath, "ext")); + + client.DrainTillFirst("Dependencies") + .RetrieveDependency("Newtonsoft.Json") + .AssertProperty("Resolved", false) + .AssertProperty("Type", "Package") + .RetrievePropertyAs("Errors") + .AssertJArrayCount(1) + .RetrieveArraryElementAs(0) + .AssertProperty("ErrorCode", ErrorCodes.NU1010); + + client.DrainTillFirst("DependencyDiagnostics") + .RetrieveDependencyDiagnosticsCollection() + .RetrieveDependencyDiagnosticsErrorAt(0) + .AssertProperty("ErrorCode", ErrorCodes.NU1010); } }