public void Ctor()
        {
            CachingEntityMemberRequestFactory cachingEntityMemberRequestFactory;
            IEntityMemberRequestFactory       entityMemberRequestFactory;

            entityMemberRequestFactory        = new EntityMemberRequestFactory();
            cachingEntityMemberRequestFactory = new CachingEntityMemberRequestFactory(entityMemberRequestFactory);

            Assert.That(cachingEntityMemberRequestFactory, Has.Property("Factory").EqualTo(entityMemberRequestFactory));
            Assert.That(cachingEntityMemberRequestFactory, Has.Property("Cache").Count.EqualTo(0));
            Assert.That(cachingEntityMemberRequestFactory, Has.Property("CacheInvalidator").Not.Null);
        }
예제 #2
0
        public void BuildEntityMemberRequest_NoRelationships()
        {
            EntityType          entityType;
            EntityMemberRequest entityMemberRequest;

            entityType = new EntityType();
            entityType.Save();

            entityMemberRequest = new EntityMemberRequestFactory().BuildEntityMemberRequest(entityType, new[] { Permissions.Read });

            Assert.That(entityMemberRequest, Has.Property("Relationships").Empty);
            Assert.That(entityMemberRequest, Has.Property("Fields").Empty);
        }
예제 #3
0
        public void BuildEntityMemberRequest_TwoEntitiesInCycle(bool securesFrom, bool securesTo)
        {
            EntityType          entityType1;
            EntityType          entityType2;
            Relationship        fromRelationship;
            Relationship        toRelationship;
            EntityMemberRequest entityMemberRequest;
            IList <EntityRef>   expectedRelationshipTypeIds;

            entityType1 = new EntityType();
            entityType1.Save();
            entityType2 = new EntityType();
            entityType2.Save();

            fromRelationship           = new Relationship();
            fromRelationship.SecuresTo = securesTo;
            fromRelationship.ToType    = entityType2;
            fromRelationship.FromType  = entityType1;
            fromRelationship.Save();

            toRelationship             = new Relationship();
            toRelationship.SecuresFrom = securesFrom;
            toRelationship.ToType      = entityType1;
            toRelationship.FromType    = entityType2;
            toRelationship.Save();

            entityType2.Relationships.Add(toRelationship);
            entityType2.ReverseRelationships.Add(fromRelationship);
            entityType2.Save();

            entityMemberRequest = new EntityMemberRequestFactory().BuildEntityMemberRequest(entityType2, new [] { Permissions.Read });

            expectedRelationshipTypeIds = new List <EntityRef>();
            if (securesTo)
            {
                expectedRelationshipTypeIds.Add(new EntityRef(fromRelationship));
            }
            if (securesFrom)
            {
                expectedRelationshipTypeIds.Add(new EntityRef(toRelationship));
            }
            Assert.That(entityMemberRequest.Relationships.Select(r => r.RelationshipTypeId),
                        Is.EquivalentTo(expectedRelationshipTypeIds).Using(EntityRefComparer.Instance));
        }
예제 #4
0
        public void BuildEntityMemberRequest_ToAndFromRelationshipToSelf(bool securesFrom, bool securesTo)
        {
            EntityType          entityType;
            Relationship        reverseRelationship;
            Relationship        forwardRelationship;
            EntityMemberRequest entityMemberRequest;
            IList <EntityRef>   expectedRelationshipTypeIds;

            entityType = new EntityType();

            reverseRelationship           = new Relationship();
            reverseRelationship.SecuresTo = securesTo;
            reverseRelationship.ToType    = entityType;
            reverseRelationship.FromType  = new EntityType();
            reverseRelationship.Save();

            forwardRelationship             = new Relationship();
            forwardRelationship.SecuresFrom = securesFrom;
            forwardRelationship.ToType      = new EntityType();
            forwardRelationship.FromType    = entityType;
            forwardRelationship.Save();

            entityType.Relationships.Add(forwardRelationship);
            entityType.ReverseRelationships.Add(reverseRelationship);
            entityType.Save();

            entityMemberRequest = new EntityMemberRequestFactory().BuildEntityMemberRequest(entityType, new [] { Permissions.Read });

            expectedRelationshipTypeIds = new List <EntityRef>();
            if (securesTo)
            {
                expectedRelationshipTypeIds.Add(new EntityRef(reverseRelationship));
            }
            if (securesFrom)
            {
                expectedRelationshipTypeIds.Add(new EntityRef(forwardRelationship));
            }
            Assert.That(entityMemberRequest.Relationships.Select(r => r.RelationshipTypeId),
                        Is.EquivalentTo(expectedRelationshipTypeIds).Using(EntityRefComparer.Instance));
        }
예제 #5
0
        public void BuildEntityMemberRequest_RelationshipsWithFlagsUnset()
        {
            EntityType          entityType;
            Relationship        fromRelationship;
            Relationship        toRelationship;
            EntityMemberRequest entityMemberRequest;

            fromRelationship = new Relationship();
            fromRelationship.Save();

            toRelationship = new Relationship();
            toRelationship.Save();

            entityType = new EntityType();
            entityType.Relationships.Add(toRelationship);
            entityType.ReverseRelationships.Add(fromRelationship);
            entityType.Save();

            entityMemberRequest = new EntityMemberRequestFactory().BuildEntityMemberRequest(entityType, new [] { Permissions.Read });

            Assert.That(entityMemberRequest, Has.Property("Relationships").Empty);
            Assert.That(entityMemberRequest, Has.Property("Fields").Empty);
        }
예제 #6
0
        public void BuildEntityMemberRequest_TreeSecuredByMultipleRoots(string entityType,
                                                                        string expectedRelationships)
        {
            Dictionary <string, EntityType>   entityTypes;
            Dictionary <string, Relationship> relationships;
            EntityMemberRequest entityMemberRequest;
            IList <IEntityRef>  expectedRelationshipTypeIds;
            IList <IEntityRef>  actualRelationshipTypeIds;

            // Build the following entity/relationship graph:
            //
            // root1
            //   |
            //   -> parentEntityType1
            //        |
            //        -> childEntityType11
            //        |
            //   -> parentEntityType2
            //   |
            // root2

            const string rootEntityType1   = "rootEntityType1";
            const string parentEntityType1 = "parentEntityType1";
            const string childEntityType11 = "childEntityType11";
            const string parentEntityType2 = "parentEntityType2";
            const string rootEntityType2   = "rootEntityType2";
            const string root1ToParent1    = "root1ToParent1";
            const string parent1ToChild11  = "parent1ToChild11";
            const string parent2ToChild11  = "parent2ToChild11";
            const string root2ToParent2    = "root2ToParent2";

            // Create the types
            entityTypes = new Dictionary <string, EntityType>();
            foreach (string type in new[]
            {
                rootEntityType1,
                parentEntityType1,
                childEntityType11,
                parentEntityType2,
                rootEntityType2
            })
            {
                entityTypes[type] = new EntityType();
                entityTypes[type].Save();
            }

            // Create relationships and assign the to types for each
            relationships = new Dictionary <string, Relationship>();
            foreach (KeyValuePair <string, string> relationshipToEntityType in new Dictionary <string, string>
            {
                { root1ToParent1, parentEntityType1 },
                { parent1ToChild11, childEntityType11 },
                { parent2ToChild11, childEntityType11 },
                { root2ToParent2, parentEntityType2 }
            })
            {
                relationships[relationshipToEntityType.Key] = new Relationship
                {
                    SecuresTo = true,
                    ToType    = entityTypes[relationshipToEntityType.Value]
                };
                relationships[relationshipToEntityType.Key].Save();
            }

            // Add each relationship to the originating (from) entity type
            foreach (
                KeyValuePair <string, IEnumerable <string> > entityTypeToRelationship in
                new Dictionary <string, IEnumerable <string> >
            {
                { rootEntityType1, new[] { root1ToParent1 } },
                { parentEntityType1, new[] { parent1ToChild11 } },
                { parentEntityType2, new[] { parent2ToChild11 } },
                { rootEntityType2, new[] { root2ToParent2 } }
            })
            {
                entityTypes[entityTypeToRelationship.Key].Relationships.AddRange(
                    entityTypeToRelationship.Value.Select(r => relationships[r]));
                entityTypes[entityTypeToRelationship.Key].Save();
            }

            entityMemberRequest = new EntityMemberRequestFactory().BuildEntityMemberRequest(entityTypes[entityType], new [] { Permissions.Read });

            expectedRelationshipTypeIds =
                expectedRelationships.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(s => new EntityRef(relationships[s]))
                .ToList <IEntityRef>();
            actualRelationshipTypeIds =
                Delegates.WalkGraph(entityMemberRequest.Relationships, rr => rr.RequestedMembers.Relationships)
                .Select(rr => rr.RelationshipTypeId)
                .ToList <IEntityRef>();
            Assert.That(actualRelationshipTypeIds,
                        Is.EquivalentTo(expectedRelationshipTypeIds).Using(EntityRefComparer.Instance));
        }