public void ReparentingCostCentreMustUpdateChildren()
        {
            //Arrange
            var ctx = CreateContext();

            centres[1].ParentCostCentre = centres[0];
            mockCentres
            .Setup(set => set.Find(It.Is <object[]>(objects => (string)objects[0] == CostCentre1)))
            .Returns(() => centres[1]);
            mockCentres
            .Setup(set => set.Find(It.Is <object[]>(objects => (string)objects[0] == CostCentre5)))
            .Returns(() => centres[5]);

            ctx
            .SetupGet(c => c.CostCentres)
            .Returns(mockCentres.Object);
            ctx
            .SetupGet(c => c.CarbonEmissionEntries)
            .Returns(mockEntries.Object);
            var sut = new CostCentreController(ctx.Object);

            //Act
            sut.ReParent(CostCentre1, CostCentre5);

            //Assert
            Assert.AreEqual(new HierarchyId("/2/2/"), centres[1].Node);
            Assert.AreEqual(new HierarchyId("/2/2/1/"), centres[2].Node);
            Assert.AreEqual(new HierarchyId("/2/2/2/"), centres[3].Node);
            Assert.AreEqual(new HierarchyId("/2/2/2/1/"), centres[4].Node);
        }
        public void ReOrderingAscendinglyMustUpdateChildNodesAsWell()
        {
            //Arrange
            var ctx = CreateContext();

            mockCentres
            .Setup(set => set.Find(It.Is <object[]>(objects => (string)objects[0] == CostCentre0)))
            .Returns(() => centres[0]);
            mockCentres
            .Setup(set => set.Find(It.Is <object[]>(objects => (string)objects[0] == CostCentre7)))
            .Returns(() => centres[7]);

            ctx
            .SetupGet(c => c.CostCentres)
            .Returns(mockCentres.Object);
            ctx
            .SetupGet(c => c.CarbonEmissionEntries)
            .Returns(mockEntries.Object);
            var sut = new CostCentreController(ctx.Object);

            //Act
            sut.ReOrder(CostCentre7, 1);

            //Assert
            Assert.AreEqual(new HierarchyId("/2/"), centres[1].Node);
            Assert.AreEqual(new HierarchyId("/2/1/"), centres[2].Node);
            Assert.AreEqual(new HierarchyId("/2/2/"), centres[3].Node);
            Assert.AreEqual(new HierarchyId("/2/2/1/"), centres[4].Node);
            Assert.AreEqual(new HierarchyId("/3/"), centres[5].Node);
            Assert.AreEqual(new HierarchyId("/3/1/"), centres[6].Node);
            Assert.AreEqual(new HierarchyId("/1/"), centres[7].Node);
        }
        public void NewCostCentreMustUseParentHeirarchyInNode()
        {
            //Arrange
            var ctx = CreateContext();

            mockCentres
            .Setup(set => set.Find(It.Is <object[]>(objects => (string)objects[0] == CostCentre1)))
            .Returns(() => centres[1]);
            mockCentres
            .Setup(set => set.Create())
            .Returns(new CostCentre())
            .Verifiable();
            mockCentres
            .Setup(set => set.Add(It.Is <CostCentre>(c => c.Node == new HierarchyId("/1/3/"))))
            .Verifiable();
            ctx
            .SetupGet(c => c.CostCentres)
            .Returns(mockCentres.Object);
            var sut       = new CostCentreController(ctx.Object);
            var newCentre = new CostCentreModel
            {
                costCode       = "new",
                parentCostCode = CostCentre1,
                name           = "name",
                color          = "FFFFFF",
                currencyCode   = new Select2Model()
            };

            //Act
            sut.UpsertCostCentre(newCentre);

            //Assert
            mockCentres.Verify();
        }