public void Can_retrieve_related()
        {
            var relatedEntity = new Entity("xts_relatedentity")
            {
                Id = Guid.NewGuid()
            };

            var service = Substitute.For <IOrganizationService>();

            service.Retrieve(Arg.Is(relatedEntity.LogicalName), Arg.Is(relatedEntity.Id), Arg.Any <ColumnSet>())
            .Returns(relatedEntity);

            var context = Substitute.For <ITransactionContextBase>();

            context.Service.Returns(service);

            var entity = new Entity("xts_entity")
            {
                Id = Guid.NewGuid()
            };

            entity["xts_attribute"] = relatedEntity.ToEntityReference();;

            var wrapper = new TestWrapper(entity, context);

            Assert.Equal(relatedEntity.ToEntityReference(), wrapper.GetRelated("xts_attribute", new ColumnSet()).ToEntityReference());

            var genericWrapper = new XtsEntityWrapper(entity.ToEntity <xts_entity>(), context);

            Assert.Equal(relatedEntity.ToEntityReference(), genericWrapper.GetRelated("xts_attribute", new ColumnSet()).ToEntityReference());
            Assert.Equal(relatedEntity.ToEntityReference(), genericWrapper.GetRelated(e => e.xts_attribute, new ColumnSet <xts_relatedentity>()).ToEntityReference());
            Assert.Equal(relatedEntity.ToEntityReference(), genericWrapper.GetRelated <xts_relatedentity, XtsRelatedEntityWrapper>(e => e.xts_attribute, new ColumnSet <xts_relatedentity>()).ToEntityReference());
        }
        public void Can_retrieve_all_related()
        {
            var relatedEntity = new Entity("xts_relatedentity")
            {
                Id = Guid.NewGuid()
            };

            var entity = new Entity("xts_entity")
            {
                Id = Guid.NewGuid()
            };

            var service = Substitute.For <IOrganizationService>();

            service.RetrieveMultiple(Arg.Any <QueryBase>()).Returns(ci =>
            {
                var query     = ci.ArgAt <QueryExpression>(0);
                var condition = query.Criteria.Conditions[0];
                Assert.Equal("xts_relatedentity", query.EntityName);
                Assert.Equal("xts_relatedid", condition.AttributeName);
                Assert.Equal(ConditionOperator.Equal, condition.Operator);
                Assert.Equal(entity.Id, condition.Values[0]);
                return(new EntityCollection {
                    Entities = { relatedEntity }
                });
            });

            var context = Substitute.For <ITransactionContextBase>();

            context.Service.Returns(service);

            var wrapper = new TestWrapper(entity, context);

            Assert.Equal(relatedEntity.ToEntityReference(), wrapper.GetAllRelated("xts_relatedentity", "xts_relatedid", new ColumnSet()).First().ToEntityReference());
            Assert.Equal(relatedEntity.ToEntityReference(), wrapper.GetAllRelated(e => e.xts_relatedid, new ColumnSet <xts_relatedentity>()).First().ToEntityReference());
            Assert.Equal(relatedEntity.ToEntityReference(), wrapper.GetAllRelated <xts_relatedentity, XtsRelatedEntityWrapper>(e => e.xts_relatedid, new ColumnSet <xts_relatedentity>()).First().ToEntityReference());

            var genericWrapper = new XtsEntityWrapper(entity.ToEntity <xts_entity>(), context);

            Assert.Equal(relatedEntity.ToEntityReference(), genericWrapper.GetAllRelated("xts_relatedentity", "xts_relatedid", new ColumnSet()).First().ToEntityReference());
            Assert.Equal(relatedEntity.ToEntityReference(), genericWrapper.GetAllRelated(e => e.xts_relatedid, new ColumnSet <xts_relatedentity>()).First().ToEntityReference());
            Assert.Equal(relatedEntity.ToEntityReference(), genericWrapper.GetAllRelated <xts_relatedentity, XtsRelatedEntityWrapper>(e => e.xts_relatedid, new ColumnSet <xts_relatedentity>()).First().ToEntityReference());
        }