Пример #1
0
        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)));
                }
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        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)));
                }
            }
        }
Пример #4
0
        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);
        }