Exemplo n.º 1
0
        public void GetFlattenedRelatedObjectGraph_TraversalFilter()
        {
            var repository = new MockRepository();

            Order order    = GetDeepTestGraph();
            var   strategy = repository.StrictMock <IGraphTraversalStrategy>();

            using (repository.Unordered())
            {
                strategy.Expect(mock => mock.ShouldProcessObject(order)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Official)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.OrderTicket)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.OrderItems[0])).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.OrderItems[1])).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer.Ceo)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer.IndustrialSector)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer.IndustrialSector.Companies[1])).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer.IndustrialSector.Companies[1].Ceo)).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer.IndustrialSector.Companies[2])).Return(true);
                strategy.Expect(mock => mock.ShouldProcessObject(order.Customer.IndustrialSector.Companies[2].Ceo)).Return(true);

                strategy.Expect(mock => mock.ShouldFollowLink(order, order, 0, order.Properties[typeof(Order), "Official"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order, 0, order.Properties[typeof(Order), "OrderTicket"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order, 0, order.Properties[typeof(Order), "OrderItems"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order, 0, order.Properties[typeof(Order), "Customer"])).Return(true);

                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Official, 1, order.Official.Properties[typeof(Official), "Orders"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.OrderTicket, 1, order.OrderTicket.Properties[typeof(OrderTicket), "Order"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.OrderItems[0], 1, order.OrderItems[0].Properties[typeof(OrderItem), "Order"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.OrderItems[1], 1, order.OrderItems[1].Properties[typeof(OrderItem), "Order"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer, 1, order.Customer.Properties[typeof(Customer), "Orders"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer, 1, order.Customer.Properties[typeof(Customer), "ContactPerson"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer, 1, order.Customer.Properties[typeof(Company), "Ceo"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer, 1, order.Customer.Properties[typeof(Company), "IndustrialSector"])).Return(true);

                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.Ceo, 2, order.Customer.Ceo.Properties[typeof(Ceo), "Company"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector, 2, order.Customer.IndustrialSector.Properties[typeof(IndustrialSector), "Companies"])).Return(true);

                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector.Companies[1], 3, order.Customer.IndustrialSector.Companies[1].Properties[typeof(Company), "IndustrialSector"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector.Companies[1], 3, order.Customer.IndustrialSector.Companies[1].Properties[typeof(Company), "Ceo"])).Return(true);

                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector.Companies[2], 3, order.Customer.IndustrialSector.Companies[2].Properties[typeof(Company), "IndustrialSector"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector.Companies[2], 3, order.Customer.IndustrialSector.Companies[2].Properties[typeof(Company), "Ceo"])).Return(true);

                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector.Companies[1].Ceo, 4, order.Customer.IndustrialSector.Companies[1].Ceo.Properties[typeof(Ceo), "Company"])).Return(true);
                strategy.Expect(mock => mock.ShouldFollowLink(order, order.Customer.IndustrialSector.Companies[2].Ceo, 4, order.Customer.IndustrialSector.Companies[2].Ceo.Properties[typeof(Ceo), "Company"])).Return(true);
            }

            repository.ReplayAll();

            HashSet <DomainObject> result = new DomainObjectGraphTraverser(order, strategy).GetFlattenedRelatedObjectGraph();
            var expected = new DomainObject[] { order, order.Official, order.OrderTicket, order.OrderItems[0], order.OrderItems[1],
                                                order.Customer, order.Customer.Ceo, order.Customer.IndustrialSector,
                                                order.Customer.IndustrialSector.Companies[1], order.Customer.IndustrialSector.Companies[1].Ceo,
                                                order.Customer.IndustrialSector.Companies[2], order.Customer.IndustrialSector.Companies[2].Ceo };

            repository.VerifyAll();
            Assert.That(result, Is.EquivalentTo(expected));
        }
Exemplo n.º 2
0
        public void GetFlattenedRelatedObjectGraph_ContainsIndirectRelatedObjects()
        {
            Order order = GetTestGraph();
            HashSet <DomainObject> graph = new DomainObjectGraphTraverser(order, FullGraphTraversalStrategy.Instance).GetFlattenedRelatedObjectGraph();

            Assert.That(graph, Has.Member(order.Customer.Ceo));
        }
Exemplo n.º 3
0
        public void GetFlattenedRelatedObjectGraph_WithTraversalFilter_FollowLink()
        {
            Order order = DomainObjectIDs.Order1.GetObject <Order> ();
            HashSet <DomainObject> graph = new DomainObjectGraphTraverser(order, new TestTraversalStrategy(true, false)).GetFlattenedRelatedObjectGraph();

            var expected = new HashSet <DomainObject>
            {
                order,
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.OrderTicket1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.OrderItem1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.OrderItem2, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Customer1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Official1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.IndustrialSector1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Partner1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.PartnerWithoutCeo, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Supplier1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Distributor2, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Person1, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Person7, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Person3, false),
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Person6, false)
            };

            Assert.That(graph, Is.EquivalentTo(expected));
        }
Exemplo n.º 4
0
        public void GetFlattenedRelatedObjectGraph_ContainsRelatedObjects()
        {
            Order order = GetTestGraph();
            HashSet <DomainObject> graph = new DomainObjectGraphTraverser(order, FullGraphTraversalStrategy.Instance).GetFlattenedRelatedObjectGraph();

            foreach (DomainObject relatedObject in order.Properties.GetAllRelatedObjects())
            {
                Assert.That(graph, Has.Member(relatedObject));
            }
        }
Exemplo n.º 5
0
        public void Traversal_NotAffectedByNotProcessingAnObject()
        {
            Order order = DomainObjectIDs.Order1.GetObject <Order> ();
            HashSet <DomainObject> graph = new DomainObjectGraphTraverser(order, new TestTraversalStrategy(false, true)).GetFlattenedRelatedObjectGraph();

            var expected = new HashSet <DomainObject> {
                LifetimeService.GetObject(TestableClientTransaction, DomainObjectIDs.Distributor2, false)
            };

            Assert.That(graph, Is.EquivalentTo(expected));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Loads the object with the specified <see cref="ObjectID"/> plus all objects directly or indirectly referenced by it into the
        /// transporter, as specified by the <see cref="IGraphTraversalStrategy"/>. Each object behaves as if it were loaded via <see cref="Load"/>.
        /// </summary>
        /// <param name="objectID">The <see cref="ObjectID"/> of the object which is to be loaded together with its related objects.</param>
        /// <param name="strategy">An <see cref="IGraphTraversalStrategy"/> instance defining which related object links to follow and which
        /// objects to include in the set of transported objects.</param>
        /// <returns>The loaded objects, whose properties can be manipulated before they are transported.</returns>
        /// <seealso cref="DomainObjectGraphTraverser.GetFlattenedRelatedObjectGraph"/>
        public IEnumerable <DomainObject> LoadRecursive(ObjectID objectID, IGraphTraversalStrategy strategy)
        {
            ArgumentUtility.CheckNotNull("objectID", objectID);
            ArgumentUtility.CheckNotNull("strategy", strategy);

            DomainObject sourceObject = _transportTransaction.GetObject(objectID, false);

            using (_transportTransaction.EnterNonDiscardingScope())
            {
                HashSet <DomainObject> graph = new DomainObjectGraphTraverser(sourceObject, strategy).GetFlattenedRelatedObjectGraph();
                foreach (DomainObject domainObject in graph)
                {
                    Load(domainObject.ID); // explicitly call load rather than just implicitly loading it into the transaction for consistency
                }
                return(graph);
            }
        }