public void NuGetDependenciesSubTreeProvider_ProcessDependenciesChanges_EmptyTreeAndBothResolvedAndUnresolvedAreProvided( string projectSubscriptionUpdateJson, string existingTopLevelNodesJson, string existingDependenciesChanges) { // Arrange var projectSubscriptionUpdate = IProjectSubscriptionUpdateFactory.FromJson(projectSubscriptionUpdateJson); var mockRootNode = IDependencyNodeFactory.Implement(existingTopLevelNodesJson); var provider = new TestableNuGetDependenciesSubTreeProvider(); provider.SetRootNode(mockRootNode); // Act var resultDependenciesChange = provider.TestDependenciesChanged(projectSubscriptionUpdate, catalogs: null); // Assert // check that DependenciesChange returned is as expected var expectedResult = DependenciesChangeFactory.FromJson(existingDependenciesChanges); Assert.True(DependenciesChangeFactory.AreEqual(expectedResult, resultDependenciesChange)); // Check if all added items were added to Snapshot var currentSnapshot = provider.GetCurrentSnapshotDependenciesWorld(); foreach (var addedNode in expectedResult.AddedNodes) { if (addedNode.Id.ItemSpec.Contains("/")) { // if it is a resolved package Assert.True(currentSnapshot.Any(x => x.Equals(addedNode.Id.ItemSpec, StringComparison.OrdinalIgnoreCase))); } } }
public void NuGetDependenciesSubTreeProvider_ProcessDuplicatedNodes_VerifyDoesNoChanges() { var existingTopLevelNodesJson = @" { ""Nodes"": [ { ""Id"": { ""ProviderType"": ""NuGetDependency"", ""ItemSpec"": ""tfm1/Package1/1.0.0"", ""ItemType"": ""PackageReference"" } }, { ""Id"": { ""ProviderType"": ""NuGetDependency"", ""ItemSpec"": ""tfm1/Package2/2.0.0"", ""ItemType"": ""PackageReference"" } } ] }"; var mockRootNode = IDependencyNodeFactory.Implement(existingTopLevelNodesJson); var provider = new TestableNuGetDependenciesSubTreeProvider(); provider.SetRootNode(mockRootNode); var expectedDependenciesChanges = @" { ""AddedNodes"": [ { ""Id"": { ""ProviderType"": ""NuGetDependency"", ""ItemSpec"": ""tfm1/package1/1.0.0"", ""ItemType"": ""PackageReference"" } } ], ""UpdatedNodes"": [ ], ""RemovedNodes"": [ ] }"; var dependenciesChanges = DependenciesChangeFactory.FromJson(expectedDependenciesChanges); var expectedChanges = DependenciesChangeFactory.FromJson(expectedDependenciesChanges); // Act provider.TestProcessDuplicatedNodes(dependenciesChanges); Assert.True(DependenciesChangeFactory.AreEqual(expectedChanges, dependenciesChanges)); }
public void NuGetDependenciesSubTreeProvider_ProcessDependenciesChanges( string projectSubscriptionUpdateJson, string existingTopLevelNodesJson, string packageToTestVersionUpdate, string existingDependenciesChanges) { // Arrange var projectSubscriptionUpdate = IProjectSubscriptionUpdateFactory.FromJson(projectSubscriptionUpdateJson); var mockRootNode = IDependencyNodeFactory.Implement(existingTopLevelNodesJson); var provider = new TestableNuGetDependenciesSubTreeProvider(); provider.SetRootNode(mockRootNode); // Act var resultDependenciesChange = provider.TestDependenciesChanged(projectSubscriptionUpdate, catalogs: null); // Assert // Check that for updated/changed nodes, properties were updated var propertyToCheck = "Version"; var itemsProperties = projectSubscriptionUpdate.ProjectChanges.Values .Where(y => y.Difference.AnyChanges && y.Difference.ChangedItems.Any(x => x.Equals(packageToTestVersionUpdate))) .Select(x => x.After.Items) .FirstOrDefault(); var expectedPropertyValue = itemsProperties[packageToTestVersionUpdate][propertyToCheck]; var properties = provider.GetDependencyProperties(packageToTestVersionUpdate); Assert.Equal(expectedPropertyValue, properties[propertyToCheck]); // check that DependenciesChange returned is as expected var expectedResult = DependenciesChangeFactory.FromJson(existingDependenciesChanges); Assert.True(DependenciesChangeFactory.AreEqual(expectedResult, resultDependenciesChange)); // Check if all added items were added to Snapshot var currentSnapshot = provider.GetCurrentSnapshotDependenciesWorld(); foreach (var addedNode in expectedResult.AddedNodes) { if (addedNode.Id.ItemSpec.Contains("/")) { // if it is a resolved package Assert.True(currentSnapshot.Any(x => x.Equals(addedNode.Id.ItemSpec, StringComparison.OrdinalIgnoreCase))); } } }
public void DependenciesSubTreeProviderBase_ProcessDuplicatedNodes() { // Arrange var rootNode = IDependencyNodeFactory.FromJson(@" { ""Id"": { ""ProviderType"": ""MyProvider"", ""ItemSpec"": ""MyRootNode"" } }"); var topNode1 = IDependencyNodeFactory.FromJson(@" { ""Id"": { ""ProviderType"": ""MyProvider"", ""ItemSpec"": ""TopNodeItemSpec1"" } }"); topNode1.SetProperties(caption: "Caption1"); var topNode2 = IDependencyNodeFactory.FromJson(@" { ""Id"": { ""ProviderType"": ""MyProvider"", ""ItemSpec"": ""TopNodeItemSpec2"" } }"); topNode2.SetProperties(caption: "Caption2"); var topNode3 = IDependencyNodeFactory.FromJson(@" { ""Id"": { ""ProviderType"": ""MyProvider"", ""ItemSpec"": ""TopNodeItemSpec3"" } }"); topNode3.SetProperties(caption: "Caption3"); topNode2.SetProperties(caption: topNode2.Alias); rootNode.AddChild(topNode1); rootNode.AddChild(topNode2); rootNode.AddChild(topNode3); var dependenciesChange = DependenciesChangeFactory.FromJson(@" { ""AddedNodes"": [ { ""Id"": { ""ProviderType"": ""MyProvider"", ""ItemSpec"": ""TopNodeItemSpec1"", ""ItemType"": ""OtherItemType"" } }, { ""Id"": { ""ProviderType"": ""MyProvider"", ""ItemSpec"": ""TopNodeItemSpec2"", ""ItemType"": ""OtherItemType"" } } ], ""UpdatedNodes"": [ ], ""RemovedNodes"": [ ] }"); var addedNodesArray = dependenciesChange.AddedNodes.ToArray(); addedNodesArray[0].SetProperties(caption: "Caption1"); addedNodesArray[1].SetProperties(caption: "Caption2"); var provider = new TestableDependenciesSubTreeProviderBase(); provider.SetRootNode(rootNode); // Act provider.TestProcessDuplicatedNodes(dependenciesChange); // Assert Assert.Equal(1, dependenciesChange.UpdatedNodes.Count); Assert.Equal(topNode1.Alias, topNode1.Caption); Assert.Equal(5, provider.RootNode.Children.Count); var childrenArray = provider.RootNode.Children.ToArray(); Assert.Equal(childrenArray[3].Alias, childrenArray[3].Caption); Assert.Equal(childrenArray[4].Alias, childrenArray[4].Caption); }