Пример #1
0
        public ActionResult <CatalogNodeDto> GetTree(int id)
        {
            CatalogsTreeBuilder <CatalogNodeDto> treeBuilder = new CatalogsTreeBuilder <CatalogNodeDto>(_directoryFacade);
            var tree = treeBuilder.BuildTree(id, isAddTextBlocks: true);

            return(tree);
        }
        public void CatalogsTreeBuilder_BuildTree_DirectoryFacadeWithOnlyTextBlocks_CorrectlyBuildedTree()
        {
            // Arrange

            List <TextBlock> allTextBlocks = new List <TextBlock>
            {
                new TextBlock {
                    Id = 1, Name = "TextBlock1", Text = "Text1", ParentCatalogId = 0, OrderInParentCatalog = 1
                },
                new TextBlock {
                    Id = 2, Name = "TextBlock2", Text = "Text2", ParentCatalogId = 0, OrderInParentCatalog = 2
                },
                new TextBlock {
                    Id = 3, Name = "TextBlock3", Text = "Text3", ParentCatalogId = 0, OrderInParentCatalog = 3
                },
                new TextBlock {
                    Id = 4, Name = "TextBlock4", Text = "Text4", ParentCatalogId = 0, OrderInParentCatalog = 4
                }
            };
            Mock <IDirectorySystemFacade> mockDirectorySystemFacade = new Mock <IDirectorySystemFacade>(MockBehavior.Strict);

            mockDirectorySystemFacade.Setup(m => m.GetSubcatalogs(It.IsAny <int>())).Returns <int>(x => new List <Catalog>());

            mockDirectorySystemFacade.Setup(m => m.GetCatalogAttachments(It.Is <int>(id => id == 0)))
            .Returns <int>(x => allTextBlocks);

            // Act

            CatalogNode expectedTree = new CatalogNode {
                CatalogAttachments = allTextBlocks
            };
            CatalogsTreeBuilder <CatalogNode> catalogsTreeBuilder = new CatalogsTreeBuilder <CatalogNode>(mockDirectorySystemFacade.Object);
            CatalogNode tree = catalogsTreeBuilder.BuildTree(isAddTextBlocks: true);

            // Assert

            Assert.Equal(expectedTree.ChildrenNodes.Count, tree.ChildrenNodes.Count);
            Assert.Equal(expectedTree.CatalogAttachments.Count, tree.CatalogAttachments.Count);
            for (int j = 0; j < expectedTree.CatalogAttachments.Count; j++)
            {
                TextBlock currentExpectedTextBlock = expectedTree.CatalogAttachments[j];
                TextBlock currentActualTextBlock   = tree.CatalogAttachments[j];
                Assert.Equal(currentExpectedTextBlock.Id, currentActualTextBlock.Id);
                Assert.Equal(currentExpectedTextBlock.Name, currentActualTextBlock.Name);
                Assert.Equal(currentExpectedTextBlock.OrderInParentCatalog, currentActualTextBlock.OrderInParentCatalog);
                Assert.Equal(currentExpectedTextBlock.ParentCatalogId, currentActualTextBlock.ParentCatalogId);
                Assert.Equal(currentExpectedTextBlock.Text, currentActualTextBlock.Text);
            }
            mockDirectorySystemFacade.VerifyAll();
        }
        public void CatalogsTreeBuilder_BuildTree_DirectoryFacadeWithoutElements_EmptyTree()
        {
            // Arrange

            Mock <IDirectorySystemFacade> mockDirectorySystemFacade = new Mock <IDirectorySystemFacade>(MockBehavior.Strict);

            mockDirectorySystemFacade.Setup(m => m.GetSubcatalogs(It.IsAny <int>())).Returns <int>(x => new List <Catalog>());

            // Act

            CatalogsTreeBuilder <CatalogNode> catalogsTreeBuilder = new CatalogsTreeBuilder <CatalogNode>(mockDirectorySystemFacade.Object);
            CatalogNode tree = catalogsTreeBuilder.BuildTree();

            // Assert

            Assert.Empty(tree.ChildrenNodes);
            Assert.Empty(tree.CatalogAttachments);
            mockDirectorySystemFacade.VerifyAll();
        }
        public void CatalogsTreeBuilder_BuildTree_DirectoryFacadeWithOnlyCatalogs_CorrectlyBuildTree()
        {
            // Arrange

            List <Catalog> catalogs = new List <Catalog>
            {
                new Catalog {
                    Id = 1, Name = "Catalog1", ParentCatalogId = 0, OrderInParentCatalog = 1
                },
                new Catalog {
                    Id = 2, Name = "Catalog2", ParentCatalogId = 0, OrderInParentCatalog = 2
                },
                new Catalog {
                    Id = 3, Name = "SubCatalog1", ParentCatalogId = 1, OrderInParentCatalog = 1
                },
                new Catalog {
                    Id = 4, Name = "SubCatalog2", ParentCatalogId = 1, OrderInParentCatalog = 2
                },
                new Catalog {
                    Id = 5, Name = "SubSubCatalog1", ParentCatalogId = 3, OrderInParentCatalog = 1
                }
            };
            Mock <IDirectorySystemFacade> mockDirectorySystemFacade = new Mock <IDirectorySystemFacade>(MockBehavior.Strict);

            foreach (Catalog catalog in catalogs)
            {
                List <Catalog> currSubcatalogs = new List <Catalog>();
                foreach (Catalog subcatalog in catalogs.FindAll(x => x.ParentCatalogId == catalog.Id))
                {
                    currSubcatalogs.Add(subcatalog);
                }
                mockDirectorySystemFacade.Setup(m => m.GetSubcatalogs(It.Is <int>(id => id == catalog.Id))).Returns <int>(x => currSubcatalogs);
            }
            mockDirectorySystemFacade.Setup(m => m.GetSubcatalogs(It.Is <int>(id => id == 0)))
            .Returns <int>(x => catalogs.FindAll(catalog => catalog.ParentCatalogId == 0));

            // Act

            CatalogNode expectedTree = new CatalogNode
            {
                ChildrenNodes = new List <ICatalogNode>
                {
                    new CatalogNode
                    {
                        Id            = 1, Name = "Catalog1", Order = 1,
                        ChildrenNodes = new List <ICatalogNode>
                        {
                            new CatalogNode
                            {
                                Id            = 3, Name = "SubCatalog1", Order = 1,
                                ChildrenNodes = new List <ICatalogNode>
                                {
                                    new CatalogNode
                                    {
                                        Id            = 5, Name = "SubSubCatalog1", Order = 1,
                                        ChildrenNodes = new List <ICatalogNode>()
                                    }
                                },
                            },
                            new CatalogNode
                            {
                                Id            = 4, Name = "SubCatalog2", Order = 2,
                                ChildrenNodes = new List <ICatalogNode>()
                            }
                        },
                    },
                    new CatalogNode
                    {
                        Id            = 2, Name = "Catalog2", Order = 2,
                        ChildrenNodes = new List <ICatalogNode>()
                    }
                }
            };
            CatalogsTreeBuilder <CatalogNode> catalogsTreeBuilder = new CatalogsTreeBuilder <CatalogNode>(mockDirectorySystemFacade.Object);
            CatalogNode tree = catalogsTreeBuilder.BuildTree();

            // Assert

            List <ICatalogNode> expectedNodesOnCurrDepthLevel = expectedTree.ChildrenNodes;
            List <ICatalogNode> actualNodesOnCurrDepthLevel   = tree.ChildrenNodes;

            while (expectedNodesOnCurrDepthLevel.Count > 0 && actualNodesOnCurrDepthLevel.Count > 0)
            {
                List <ICatalogNode> expectedNodesOnNextDepthLevel = new List <ICatalogNode>();
                List <ICatalogNode> actualNodesOnNextDepthLevel   = new List <ICatalogNode>();
                Assert.Equal(expectedNodesOnCurrDepthLevel.Count, actualNodesOnCurrDepthLevel.Count);
                for (int i = 0; i < expectedNodesOnCurrDepthLevel.Count; i++)
                {
                    ICatalogNode expectedCatalogNode = expectedNodesOnCurrDepthLevel[i];
                    ICatalogNode actualCatalogNode   = actualNodesOnCurrDepthLevel[i];
                    expectedNodesOnNextDepthLevel.AddRange(expectedCatalogNode.ChildrenNodes);
                    actualNodesOnNextDepthLevel.AddRange(actualCatalogNode.ChildrenNodes);

                    Assert.Equal(expectedCatalogNode.Id, actualCatalogNode.Id);
                    Assert.Equal(expectedCatalogNode.Name, actualCatalogNode.Name);
                    Assert.Equal(expectedCatalogNode.Order, actualCatalogNode.Order);
                }
                expectedNodesOnCurrDepthLevel = expectedNodesOnNextDepthLevel;
                actualNodesOnCurrDepthLevel   = actualNodesOnNextDepthLevel;
            }
            mockDirectorySystemFacade.VerifyAll();
        }
        public void CatalogsTreeBuilder_BuildTree_DirectoryFacadeWithCatalogsAndTextBlocks_CorrectlyBuildedTree()
        {
            // Arrange

            List <Catalog> allCatalogs = new List <Catalog>
            {
                new Catalog {
                    Id = 1, Name = "Catalog1", ParentCatalogId = 0, OrderInParentCatalog = 1
                },
                new Catalog {
                    Id = 2, Name = "Catalog2", ParentCatalogId = 0, OrderInParentCatalog = 2
                },
                new Catalog {
                    Id = 3, Name = "SubCatalog1", ParentCatalogId = 1, OrderInParentCatalog = 1
                },
                new Catalog {
                    Id = 4, Name = "SubCatalog2", ParentCatalogId = 1, OrderInParentCatalog = 2
                },
                new Catalog {
                    Id = 5, Name = "SubSubCatalog1", ParentCatalogId = 3, OrderInParentCatalog = 1
                }
            };
            List <TextBlock> allTextBlocks = new List <TextBlock>
            {
                new TextBlock {
                    Id = 1, Name = "TextBlock1", Text = "Text1", ParentCatalogId = 0, OrderInParentCatalog = 3
                },
                new TextBlock {
                    Id = 2, Name = "TextBlock2", Text = "Text2", ParentCatalogId = 1, OrderInParentCatalog = 3
                },
                new TextBlock {
                    Id = 3, Name = "TextBlock3", Text = "Text3", ParentCatalogId = 3, OrderInParentCatalog = 2
                },
                new TextBlock {
                    Id = 4, Name = "TextBlock4", Text = "Text4", ParentCatalogId = 4, OrderInParentCatalog = 1
                }
            };
            Mock <IDirectorySystemFacade> mockDirectorySystemFacade = new Mock <IDirectorySystemFacade>(MockBehavior.Strict);

            foreach (Catalog catalog in allCatalogs)
            {
                List <Catalog>   currSubcatalogs = new List <Catalog>();
                List <TextBlock> currTextBlocks  = new List <TextBlock>();
                foreach (Catalog subcatalog in allCatalogs.FindAll(x => x.ParentCatalogId == catalog.Id))
                {
                    currSubcatalogs.Add(subcatalog);
                }
                foreach (TextBlock textBlock in allTextBlocks.FindAll(x => x.ParentCatalogId == catalog.Id))
                {
                    currTextBlocks.Add(textBlock);
                }
                mockDirectorySystemFacade.Setup(m => m.GetSubcatalogs(It.Is <int>(id => id == catalog.Id))).Returns <int>(x => currSubcatalogs);
                mockDirectorySystemFacade.Setup(m => m.GetCatalogAttachments(It.Is <int>(id => id == catalog.Id))).Returns <int>(x => currTextBlocks);
            }
            mockDirectorySystemFacade.Setup(m => m.GetSubcatalogs(It.Is <int>(id => id == 0)))
            .Returns <int>(x => allCatalogs.FindAll(catalog => catalog.ParentCatalogId == 0));

            mockDirectorySystemFacade.Setup(m => m.GetCatalogAttachments(It.Is <int>(id => id == 0)))
            .Returns <int>(x => allTextBlocks.FindAll(textBlock => textBlock.ParentCatalogId == 0));

            // Act

            CatalogNode expectedTree = new CatalogNode
            {
                ChildrenNodes = new List <ICatalogNode>
                {
                    new CatalogNode
                    {
                        Id = 1, Name = "Catalog1", Order = 1,
                        CatalogAttachments = new List <TextBlock>
                        {
                            new TextBlock {
                                Id = 2, Name = "TextBlock2", Text = "Text2", ParentCatalogId = 1, OrderInParentCatalog = 3
                            }
                        },
                        ChildrenNodes = new List <ICatalogNode>
                        {
                            new CatalogNode
                            {
                                Id = 3, Name = "SubCatalog1", Order = 1,
                                CatalogAttachments = new List <TextBlock>
                                {
                                    new TextBlock {
                                        Id = 3, Name = "TextBlock3", Text = "Text3", ParentCatalogId = 3, OrderInParentCatalog = 2
                                    }
                                },
                                ChildrenNodes = new List <ICatalogNode>
                                {
                                    new CatalogNode
                                    {
                                        Id            = 5, Name = "SubSubCatalog1", Order = 1,
                                        ChildrenNodes = new List <ICatalogNode>()
                                    }
                                }
                            },
                            new CatalogNode
                            {
                                Id                 = 4, Name = "SubCatalog2", Order = 2,
                                ChildrenNodes      = new List <ICatalogNode>(),
                                CatalogAttachments = new List <TextBlock>
                                {
                                    new TextBlock {
                                        Id = 4, Name = "TextBlock4", Text = "Text4", ParentCatalogId = 4, OrderInParentCatalog = 1
                                    }
                                }
                            }
                        },
                    },
                    new CatalogNode
                    {
                        Id            = 2, Name = "Catalog2", Order = 2,
                        ChildrenNodes = new List <ICatalogNode>()
                    }
                },
                CatalogAttachments = new List <TextBlock>
                {
                    new TextBlock {
                        Id = 1, Name = "TextBlock1", Text = "Text1", ParentCatalogId = 0, OrderInParentCatalog = 3
                    }
                }
            };
            CatalogsTreeBuilder <CatalogNode> catalogsTreeBuilder = new CatalogsTreeBuilder <CatalogNode>(mockDirectorySystemFacade.Object);
            CatalogNode tree = catalogsTreeBuilder.BuildTree(isAddTextBlocks: true);

            // Assert

            List <ICatalogNode> expectedNodesOnCurrDepthLevel = expectedTree.ChildrenNodes;
            List <ICatalogNode> actualNodesOnCurrDepthLevel   = tree.ChildrenNodes;

            while (expectedNodesOnCurrDepthLevel.Count > 0 && actualNodesOnCurrDepthLevel.Count > 0)
            {
                List <ICatalogNode> expectedNodesOnNextDepthLevel = new List <ICatalogNode>();
                List <ICatalogNode> actualNodesOnNextDepthLevel   = new List <ICatalogNode>();
                Assert.Equal(expectedNodesOnCurrDepthLevel.Count, actualNodesOnCurrDepthLevel.Count);
                for (int i = 0; i < expectedNodesOnCurrDepthLevel.Count; i++)
                {
                    // Проверка равенства каталогов
                    ICatalogNode expectedCatalogNode = expectedNodesOnCurrDepthLevel[i];
                    ICatalogNode actualCatalogNode   = actualNodesOnCurrDepthLevel[i];
                    expectedNodesOnNextDepthLevel.AddRange(expectedCatalogNode.ChildrenNodes);
                    actualNodesOnNextDepthLevel.AddRange(actualCatalogNode.ChildrenNodes);
                    Assert.Equal(expectedCatalogNode.Id, actualCatalogNode.Id);
                    Assert.Equal(expectedCatalogNode.Name, actualCatalogNode.Name);
                    Assert.Equal(expectedCatalogNode.Order, actualCatalogNode.Order);

                    // Проверка равенства текстовых блоков
                    List <TextBlock> expectedTextBlocks = expectedCatalogNode.CatalogAttachments;
                    List <TextBlock> actualTextBlocks   = actualCatalogNode.CatalogAttachments;
                    Assert.Equal(expectedTextBlocks.Count, actualTextBlocks.Count);
                    for (int j = 0; j < expectedTextBlocks.Count; j++)
                    {
                        TextBlock currentExpectedTextBlock = expectedTextBlocks[j];
                        TextBlock currentActualTextBlock   = actualTextBlocks[j];
                        Assert.Equal(currentExpectedTextBlock.Id, currentActualTextBlock.Id);
                        Assert.Equal(currentExpectedTextBlock.Name, currentActualTextBlock.Name);
                        Assert.Equal(currentExpectedTextBlock.OrderInParentCatalog, currentActualTextBlock.OrderInParentCatalog);
                        Assert.Equal(currentExpectedTextBlock.ParentCatalogId, currentActualTextBlock.ParentCatalogId);
                        Assert.Equal(currentExpectedTextBlock.Text, currentActualTextBlock.Text);
                    }
                }
                expectedNodesOnCurrDepthLevel = expectedNodesOnNextDepthLevel;
                actualNodesOnCurrDepthLevel   = actualNodesOnNextDepthLevel;
            }
            mockDirectorySystemFacade.VerifyAll();
        }