public void Has1ToNRelatedEntityRecords_ReturnsDataCorrectly()
        {
            var testEntity1Id        = Guid.NewGuid();
            var testEntity1String    = "dshajdsghjk";
            var testEntity2FirstId   = Guid.NewGuid();
            var testEntity2SecondId  = Guid.NewGuid();
            var testEntity2FirstInt  = 3;
            var testEntity2SecondInt = 5;

            var flatData = new List <Entity>();

            var first = new Entity(EntityNameAttribute.GetFromType <RetrieveMultipleTestEntity1>(), testEntity1Id);

            first["id"]         = testEntity1Id;
            first["createdon"]  = DateTime.Now;
            first["modifiedon"] = DateTime.Now;
            first["teststring"] = testEntity1String;
            first["retrievemultipletestentity2.id"]      = new AliasedValue("retrievemultipletestentity2", "id", testEntity2FirstId);
            first["retrievemultipletestentity2.testint"] = new AliasedValue("retrievemultipletestentity2", "testint", testEntity2FirstInt);

            var second = new Entity(EntityNameAttribute.GetFromType <RetrieveMultipleTestEntity1>(), testEntity1Id);

            second["id"]         = testEntity1Id;
            second["createdon"]  = DateTime.Now;
            second["modifiedon"] = DateTime.Now;
            second["teststring"] = testEntity1String;
            second["retrievemultipletestentity2.id"]      = new AliasedValue("retrievemultipletestentity2", "id", testEntity2SecondId);
            second["retrievemultipletestentity2.testint"] = new AliasedValue("retrievemultipletestentity2", "testint", testEntity2SecondInt);

            flatData.Add(first);
            flatData.Add(second);

            var service = A.Fake <IOrganizationService>();

            A.CallTo(() => service.RetrieveMultiple(A <QueryBase> ._))
            .Returns(new EntityCollection(flatData));

            var crmPlusPlusEntityClient = new CrmPlusPlusEntityClient(service);

            var result = crmPlusPlusEntityClient.RetrieveMultiple(Query.ForEntity <RetrieveMultipleTestEntity1>());

            Assert.Equal(1, result.Count());
            Assert.Equal(2, result.Single().RelatedEntities.Count());

            var firstEntity = result.Single();

            Assert.Equal(testEntity1String, firstEntity.TestString);
            Assert.Contains(testEntity2FirstInt, firstEntity.RelatedEntities.Select(e => e.TestInt));
            Assert.Contains(testEntity2SecondInt, firstEntity.RelatedEntities.Select(e => e.TestInt));
        }
        public void HasNTo1RelatedEntityRecords_ReturnsDataCorrectly()
        {
            var testEntity2Id     = Guid.NewGuid();
            var testEntity2Int    = 2;
            var testEntity1Id     = Guid.NewGuid();
            var testEntity1String = "dshjakl";

            var flatData = new List <Entity>();

            var entity = new Entity(EntityNameAttribute.GetFromType <RetrieveMultipleTestEntity2>(), testEntity2Id);

            entity["id"]         = testEntity2Id;
            entity["createdon"]  = DateTime.Now;
            entity["modifiedon"] = DateTime.Now;
            entity["testint"]    = testEntity2Int;
            entity["retrievemultipletestentity1.id"]         = new AliasedValue("retrievemultipletestentity2", "id", testEntity1Id);
            entity["retrievemultipletestentity1.teststring"] = new AliasedValue("retrievemultipletestentity2", "testint", testEntity1String);

            flatData.Add(entity);

            var service = A.Fake <IOrganizationService>();

            A.CallTo(() => service.RetrieveMultiple(A <QueryBase> ._))
            .Returns(new EntityCollection(flatData));

            var crmPlusPlusEntityClient = new CrmPlusPlusEntityClient(service);

            var result = crmPlusPlusEntityClient.RetrieveMultiple(Query.ForEntity <RetrieveMultipleTestEntity2>());

            Assert.Equal(1, result.Count());

            var singleResult = result.Single();

            Assert.Equal(testEntity2Int, singleResult.TestInt);
            Assert.NotNull(singleResult.RetrieveMultipleTestEntity1Lookup);
            Assert.Equal(testEntity1Id, singleResult.RetrieveMultipleTestEntity1Lookup.Id);
            Assert.NotNull(singleResult.RetrieveMultipleTestEntity1Lookup.Entity);

            Assert.Equal(testEntity1Id, singleResult.RetrieveMultipleTestEntity1Lookup.Entity.Id);
            Assert.Equal(testEntity1String, singleResult.RetrieveMultipleTestEntity1Lookup.Entity.TestString);
        }