Ejemplo n.º 1
0
        public void DependenciesSubTreeProviderBase_Defaults()
        {
            var provider = new TestableDependenciesSubTreeProviderBase();

            // by default is false always
            Assert.False(provider.IsInErrorState);

            // by default is false always hide provider's node
            Assert.False(provider.ShouldBeVisibleWhenEmpty);

            // by default OriginalItemSpec
            Assert.Equal("OriginalItemSpec", provider.GetOriginalItemSpecPropertyName());

            // by default both resolved and unresolved rule names are empty
            Assert.False(provider.GetResolvedReferenceRuleNames().Any());
            Assert.False(provider.GetUnresolvedReferenceRuleNames().Any());
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public void DependenciesSubTreeProviderBase_ProcessDependenciesChanges_WhenAnyChangesFalse_ShouldSkip()
        {
            var projectSubscriptionUpdate = IProjectSubscriptionUpdateFactory.FromJson(@"{
    ""ProjectChanges"": {
        ""rulenameResolved"": {
            ""After"": {
                ""Items"": {
                    ""item21"": {
                        ""OriginalItemSpec"":""item1""
                    },
                    ""item22"": {
                        ""OriginalItemSpec"":""item2""
                    },
                    ""itemWithoutOriginalItemSpec"": {
                    }
                },
                ""RuleName"":""rulenameResolved""
            },
            ""Before"": {
                ""Items"": {
                    ""resolvedItemTobeRemoved"": {
                        ""OriginalItemSpec"":""unresolvedItemTobeAddedInsteadOfRemovedResolvedItem""
                    }
                },
                ""RuleName"":""rulenameResolved""
            },
            ""Difference"": {
                ""AddedItems"": [ ""item21"", ""item22"", ""itemWithoutOriginalItemSpec"", ""itemWithoutPropertiesInAfter"" ],
                ""ChangedItems"": [ ],
                ""RemovedItems"": [ ""resolvedItemTobeRemoved"" ],
                ""AnyChanges"": ""false""
            },
        },
        ""rulenameUnresolved"": {
            ""After"": {
                ""Items"": {
                    ""item1"": {
                    },
                    ""item2"": {
                    },
                    ""item3"": {
                    },
                    ""unresolvedItemTobeAddedInsteadOfRemovedResolvedItem"": {
                    }
                },
                ""RuleName"":""rulenameUnresolved""
            },
            ""Difference"": {
                ""AddedItems"": [ ""item1"", ""item2"", ""item3"" ],
                ""ChangedItems"": [ ],
                ""RemovedItems"": [ ""item4"", ""itemNotInRootNode"", ""itemWithoutPropertiesInAfter"" ],
                ""AnyChanges"": ""false""
            },
        }
    }
}");
            var rootNode = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""MyRootNode""
    }
}");

            var item4Node = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""item4"",
        ""ItemType"": ""myUnresolvedItemType""
    }
}");

            var resolvedItemTobeRemovedNode = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""resolvedItemTobeRemoved"",
        ""ItemType"": ""myUnresolvedItemType""
    }
}");

            rootNode.AddChild(item4Node);
            rootNode.AddChild(resolvedItemTobeRemovedNode);

            var catalogs = IProjectCatalogSnapshotFactory.ImplementRulesWithItemTypes(
                new Dictionary <string, string>
            {
                { "rulenameResolved", "myResolvedItemType" },
                { "rulenameUnresolved", "myUnresolvedItemType" }
            });

            var provider = new TestableDependenciesSubTreeProviderBase();

            // set itemTypes to process
            provider.SetResolvedReferenceRuleNames(ImmutableHashSet <string> .Empty.Add("rulenameResolved"));
            provider.SetUnresolvedReferenceRuleNames(ImmutableHashSet <string> .Empty.Add("rulenameUnresolved"));
            provider.SetRootNode(rootNode);

            // Act
            var resultChanges = provider.TestProcessDependenciesChanges(projectSubscriptionUpdate, catalogs);

            // Assert
            Assert.NotNull(resultChanges);
            Assert.Equal(0, resultChanges.AddedNodes.Count);
            Assert.Equal(0, resultChanges.RemovedNodes.Count);
        }
Ejemplo n.º 4
0
        public void DependenciesSubTreeProviderBase_ProcessDependenciesChanges()
        {
            var projectSubscriptionUpdate = IProjectSubscriptionUpdateFactory.FromJson(@"{
    ""ProjectChanges"": {
        ""rulenameResolved"": {
            ""After"": {
                ""Items"": {
                    ""item21"": {
                        ""OriginalItemSpec"":""item1""
                    },
                    ""item22"": {
                        ""OriginalItemSpec"":""item2""
                    },
                    ""itemWithoutOriginalItemSpec"": {
                    },
                    ""unresolvedItemTobeRemoved"": {
                        ""OriginalItemSpec"":""unresolvedItemTobeRemoved""
                    },
                },
                ""RuleName"":""rulenameResolved""
            },
            ""Before"": {
                ""Items"": {
                    ""resolvedItemTobeRemoved"": {
                        ""OriginalItemSpec"":""unresolvedItemTobeAddedInsteadOfRemovedResolvedItem""
                    },
                    ""resolvedItemTobeRemovedWithNonExistentOriginalItemSpec"": {
                        ""OriginalItemSpec"":""nonExistentUnresolvedOriginalItemSpec""
                    },
                },
                ""RuleName"":""rulenameResolved""
            },
            ""Difference"": {
                ""AddedItems"": [ ""item21"", ""item22"", ""itemWithoutOriginalItemSpec"", ""itemWithoutPropertiesInAfter"", 
                                  ""unresolvedItemTobeRemoved"" ],
                ""ChangedItems"": [ ],
                ""RemovedItems"": [ ""resolvedItemTobeRemoved"", ""resolvedItemTobeRemovedWithNonExistentOriginalItemSpec"" ],
                ""AnyChanges"": ""true""
            },
        },
        ""rulenameUnresolved"": {
            ""After"": {
                ""Items"": {
                    ""item1"": {
                    },
                    ""item2"": {
                    },
                    ""item3"": {
                    },
                    ""unresolvedItemTobeAddedInsteadOfRemovedResolvedItem"": {
                    },
                    ""unresolvedItemTobeRemoved"": {
                    }
                },
                ""RuleName"":""rulenameUnresolved""
            },
            ""Difference"": {
                ""AddedItems"": [ ""item1"", ""item2"", ""item3"" ],
                ""ChangedItems"": [ ],
                ""RemovedItems"": [ ""item4"", ""itemNotInRootNode"", ""itemWithoutPropertiesInAfter"" ],
                ""AnyChanges"": ""true""
            },
        },
        ""rulenameUnknown"": {
            ""After"": {
                ""Items"": {
                    ""shouldNotApper"": {
                    }
                },
                ""RuleName"":""rulenameUnknown""
            },
            ""Difference"": {
                ""AddedItems"": [ ""shouldNotApper"" ],
                ""ChangedItems"": [ ],
                ""RemovedItems"": [ ],
                ""AnyChanges"": ""true""
            },
        }
    }
}");
            var rootNode = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""MyRootNode""
    }
}");

            var item4Node = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""item4"",
        ""ItemType"": ""myUnresolvedItemType""
    }
}");

            var resolvedItemTobeRemovedNode = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""unresolvedItemTobeAddedInsteadOfRemovedResolvedItem"",
        ""ItemType"": ""myUnresolvedItemType""
    }
}");

            var unresolvedItemTobeRemovedNode = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""unresolvedItemTobeRemoved"",
        ""ItemType"": ""myUnresolvedItemType""
    }
}");

            var unresolvedItemTobeRemovedNodeWithNonExistentOriginalItemSpecNode = IDependencyNodeFactory.FromJson(@"
{
    ""Id"": {
        ""ProviderType"": ""MyProvider"",
        ""ItemSpec"": ""resolvedItemTobeRemovedWithNonExistentOriginalItemSpec"",
        ""ItemType"": ""myUnresolvedItemType""
    }
}");

            rootNode.AddChild(item4Node);
            rootNode.AddChild(resolvedItemTobeRemovedNode);
            rootNode.AddChild(unresolvedItemTobeRemovedNode);
            rootNode.AddChild(unresolvedItemTobeRemovedNodeWithNonExistentOriginalItemSpecNode);

            var catalogs = IProjectCatalogSnapshotFactory.ImplementRulesWithItemTypes(
                new Dictionary <string, string>
            {
                { "rulenameResolved", "myResolvedItemType" },
                { "rulenameUnresolved", "myUnresolvedItemType" },
                { "unresolvedItemTobeRemoved", "myUnresolvedItemType" },
                { "unresolvedItemTobeAddedInsteadOfRemovedResolvedItem", "myUnresolvedItemType" }
            });

            var provider = new TestableDependenciesSubTreeProviderBase();

            // set itemTypes to process
            provider.SetResolvedReferenceRuleNames(ImmutableHashSet <string> .Empty.Add("rulenameResolved"));
            provider.SetUnresolvedReferenceRuleNames(ImmutableHashSet <string> .Empty.Add("rulenameUnresolved"));
            provider.SetRootNode(rootNode);

            // Act
            var resultChanges = provider.TestProcessDependenciesChanges(projectSubscriptionUpdate, catalogs);

            // Assert
            Assert.NotNull(resultChanges);
            Assert.Equal(5, resultChanges.AddedNodes.Count);

            var addedNodesArray = resultChanges.AddedNodes.ToArray();

            // unresolved items added first
            Assert.False(addedNodesArray[0].Properties.ContainsKey("OriginalItemSpec"));
            Assert.False(addedNodesArray[0].Resolved);
            Assert.Equal("item3", addedNodesArray[0].Caption);

            Assert.False(addedNodesArray[1].Properties.ContainsKey("OriginalItemSpec"));
            Assert.False(addedNodesArray[1].Resolved);
            Assert.Equal("unresolvedItemTobeAddedInsteadOfRemovedResolvedItem", addedNodesArray[1].Caption);

            Assert.True(addedNodesArray[2].Properties.ContainsKey("OriginalItemSpec"));
            Assert.True(addedNodesArray[2].Resolved);
            Assert.Equal("item1", addedNodesArray[2].Caption);
            Assert.True(addedNodesArray[3].Properties.ContainsKey("OriginalItemSpec"));
            Assert.True(addedNodesArray[3].Resolved);
            Assert.Equal("item2", addedNodesArray[3].Caption);

            Assert.True(addedNodesArray[4].Properties.ContainsKey("OriginalItemSpec"));
            Assert.True(addedNodesArray[4].Resolved);
            Assert.Equal("unresolvedItemTobeRemoved", addedNodesArray[4].Caption);

            Assert.Equal(4, resultChanges.RemovedNodes.Count);

            var removedNodesArray = resultChanges.RemovedNodes.ToArray();

            Assert.Equal(item4Node.Id, removedNodesArray[0].Id);
            Assert.Equal(resolvedItemTobeRemovedNode.Id, removedNodesArray[1].Id);
            Assert.Equal(unresolvedItemTobeRemovedNodeWithNonExistentOriginalItemSpecNode.Id, removedNodesArray[2].Id);
            Assert.Equal(unresolvedItemTobeRemovedNode.Id, removedNodesArray[3].Id);
        }