public void GetNewItemsTest()
        {
            // Arrange.
            var crEdit1 = Mock.Create<IEditableRoot>();
            Mock.Arrange(() => crEdit1.Id).Returns(111);

            var crEdit2 = Mock.Create<IEditableRoot>();
            Mock.Arrange(() => crEdit2.Id).Returns(222);

            SetupGetEditableRoot(ReferencedProcess, crEdit1, crEdit2);

            var retriever = new MultiCrossReferenceSourceItemsRetriever
                                {
                                    DynamicTypeManager = _dtm,
                                    FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().MultiCR),
                                    ReferencedProcess = ReferencedProcess
                                };

            var cr1 = Mock.Create<ICrossRefItemInfo>();
            Mock.Arrange(() => cr1.Id).Returns(111);
            var cr2 = Mock.Create<ICrossRefItemInfo>();
            Mock.Arrange(() => cr2.Id).Returns(222);

            var oldItem = new TestEdit();
            var newItem = new TestEdit();
            newItem.MultiCR.NewItems.Add(cr1);
            newItem.MultiCR.NewItems.Add(cr2);

            // Act.
            var result = retriever.GetNewItems(newItem, oldItem);

            // Assert.
            Assert.AreEqual(2, result.Count);
            Assert.IsTrue(result.Contains(crEdit1));
            Assert.IsTrue(result.Contains(crEdit2));

            // Arrange.
            var innerEdit1 = Mock.Create<IEditableRoot>();
            var innerEdit2 = Mock.Create<IEditableRoot>();
            var innerEdit3 = Mock.Create<IEditableRoot>();

            var innerRetriever = Mock.Create<ISourceItemsRetriever>();
            Mock.Arrange(() => innerRetriever.GetAllItems(crEdit1)).Returns(new[] { innerEdit1 });
            Mock.Arrange(() => innerRetriever.GetAllItems(crEdit2)).Returns(new[] { innerEdit2, innerEdit3 });
            retriever.Subretriever = innerRetriever;

            // Act.
            result = retriever.GetNewItems(newItem, oldItem);

            // Assert.
            Assert.AreEqual(3, result.Count);
            Assert.IsTrue(result.Contains(innerEdit1));
            Assert.IsTrue(result.Contains(innerEdit2));
            Assert.IsTrue(result.Contains(innerEdit3));
        }
        public void InitializeTest()
        {
            // Arrange.
            const string ProcessName = "TestProcess";

            var dtm = Mock.Create<IDynamicTypeManager>();
            Mock.Arrange(() => dtm.GetEditableRootType(ProcessName)).Returns(typeof(TestEdit));

            var retriever = new MultiCrossReferenceSourceItemsRetriever { DynamicTypeManager = dtm };

            // Act.
            retriever.Initialize(ProcessName, TestsHelper.ExtractPropertyName(() => new TestEdit().MultiCR));

            // Assert.
            Assert.AreEqual(TestsHelper.ExtractPropertyName(() => new TestEdit().MultiCR), retriever.FieldName);
            Assert.AreEqual(ReferencedProcess, retriever.ReferencedProcess);
        }