Пример #1
0
        internal async Task <List <RelatedEntityCollection> > GetRelatedExtensionEntitiesAsync(IEnumerable <TInterface> entities, IEnumerable <string> extensionEntitiesToExpand)
        {
            if (entities == null || !entities.Any())
            {
                return(null);
            }
            var list   = new List <RelatedEntityCollection>();
            var entity = typeof(TEntity).Name;

            foreach (var extensionEntity in extensionEntitiesToExpand)
            {
                var client            = ClientsCache.Json[extensionEntity];
                var entityIdentifiers = entities.Select(e => new EntityIdentifier {
                    Entity = entity, EntityId = e.Id.ToString()
                }).ToList();
                var json = await client.GetByCustomUrlAsync($"{client.EntityPluralized}/EntityIdentifiers", client.HttpClient.PostAsync, entityIdentifiers);

                var extensionEntities = JsonConvert.DeserializeObject <OdataObjectCollection>(json);
                var sortDetails       = new SortDetails(entity, extensionEntity, RelatedEntity.Type.OneToMany)
                {
                    EntityToRelatedEntityProperty = "EntityId"
                };
                RelatedEntityCollection collection = extensionEntities;
                var collections = Sorter.Sort(entities, collection, sortDetails);
                if (collections != null && collections.Any())
                {
                    list.AddRange(collections);
                }
            }
            return(list);
        }
        public void OneToManySortTest()
        {
            // Arrange
            var user1 = new User {
                Id = 1, Name = "User1", UserTypeId = 3
            };
            var user2 = new User {
                Id = 2, Name = "User2", UserTypeId = 3
            };
            var entities = new List <User> {
                user1, user2
            };

            var membership1 = new UserGroupMembership {
                Id = 11, UserId = 1, UserGroupId = 7
            };
            var relatedObjectJson1 = new JRaw(JsonConvert.SerializeObject(membership1));
            var relatedEntity1     = new RelatedEntity {
                Object = relatedObjectJson1
            };

            var membership2 = new UserGroupMembership {
                Id = 14, UserId = 2, UserGroupId = 8
            };
            var relatedObjectJson2 = new JRaw(JsonConvert.SerializeObject(membership2));
            var relatedEntity2     = new RelatedEntity {
                Object = relatedObjectJson2
            };

            var relatedEntities = new List <RelatedEntity> {
                relatedEntity1, relatedEntity2
            };

            var sorterDictionary = new SortMethodDictionary <User>();
            var sortDetails      = new SortDetails
            {
                EntityName    = "User",
                RelatedEntity = "UserGroupMembership",
                EntityToRelatedEntityProperty = "UserId",
                RelatedEntityType             = RelatedEntity.Type.OneToMany
            };

            // Act
            var actualCollections = sorterDictionary[RelatedEntity.Type.OneToMany](entities, relatedEntities, sortDetails);

            // Assert
            Assert.AreEqual(2, actualCollections.Count);

            Assert.AreEqual("User", actualCollections[0].Entity);
            Assert.AreEqual("UserGroupMembership", actualCollections[0].RelatedEntity);
            Assert.AreEqual("1", actualCollections[0].EntityId);
            Assert.AreEqual(1, actualCollections[0].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson1, actualCollections[0].RelatedEntities[0].Object);

            Assert.AreEqual("User", actualCollections[1].Entity);
            Assert.AreEqual("UserGroupMembership", actualCollections[1].RelatedEntity);
            Assert.AreEqual("2", actualCollections[1].EntityId);
            Assert.AreEqual(1, actualCollections[1].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson2, actualCollections[1].RelatedEntities[0].Object);
        }
Пример #3
0
        public void SetRelatedEntityPropertyNotPresetTests()
        {
            // Arrange
            // Act
            var sortDetails = new SortDetails("User", "UserType", RelatedEntity.Type.OneToOne);

            // Assert
            Assert.AreEqual("UserTypeId", sortDetails.EntityToRelatedEntityProperty);
        }
Пример #4
0
        public void SortTest()
        {
            // Arrange
            var user1 = new User {
                Id = 1, Name = "User1", UserTypeId = 3
            };
            var user2 = new User {
                Id = 2, Name = "User2", UserTypeId = 3
            };
            var user3 = new User {
                Id = 3, Name = "User3", UserTypeId = 4
            };
            var users = new [] { user1, user2, user3 };

            var userType1 = new UserType {
                Id = 3, Name = "Example Users"
            };
            var userType2 = new UserType {
                Id = 4, Name = "Example Users"
            };
            var userType1Json = new JRaw(JsonConvert.SerializeObject(userType1.AsOdata <UserType, int>()));
            var userType2Json = new JRaw(JsonConvert.SerializeObject(userType2.AsOdata <UserType, int>()));

            var relatedEntity1 = new RelatedEntity {
                Object = userType1Json
            };
            var relatedEntity2 = new RelatedEntity {
                Object = userType1Json
            };
            var relatedEntity3 = new RelatedEntity {
                Object = userType2Json
            };
            var relatedEntitites = new[] { relatedEntity1, relatedEntity2, relatedEntity3 };

            var sorter      = new RelatedEntitySorter <User, int>();
            var sortDetails = new SortDetails("User", "UserType", RelatedEntity.Type.ManyToOne);

            // Act
            var collection = sorter.Sort(users, relatedEntitites, sortDetails);

            // Assert
            Assert.AreEqual(3, collection.Count);
            Assert.AreEqual("User", collection[0].Entity);
            Assert.AreEqual("UserType", collection[0].RelatedEntity);
            Assert.AreEqual("1", collection[0].EntityId);
            Assert.AreEqual(2, collection[0].RelatedEntities.Count);

            Assert.AreEqual("User", collection[1].Entity);
            Assert.AreEqual("UserType", collection[1].RelatedEntity);
            Assert.AreEqual("2", collection[1].EntityId);
            Assert.AreEqual(2, collection[1].RelatedEntities.Count);

            Assert.AreEqual("User", collection[2].Entity);
            Assert.AreEqual("UserType", collection[2].RelatedEntity);
            Assert.AreEqual("3", collection[2].EntityId);
            Assert.AreEqual(1, collection[2].RelatedEntities.Count);
        }
Пример #5
0
        public void SetRelatedEntityPropertyPresetTests()
        {
            // Arrange
            var sortDetails = new SortDetails();

            sortDetails.EntityToRelatedEntityProperty = "TypeId";
            // Act
            sortDetails.RelatedEntity = "UserType";

            // Assert
            Assert.AreEqual("TypeId", sortDetails.EntityToRelatedEntityProperty);
        }
Пример #6
0
        public void ManyToOneSortByPropertyOtherThanIdTest()
        {
            // Arrange
            var user1 = new User2 {
                Id = 1, Name = "User1", UserTypeName = "Example Users"
            };
            var user2 = new User2 {
                Id = 2, Name = "User2", UserTypeName = "Example Users"
            };
            var entities = new List <User2> {
                user1, user2
            };

            var userType1 = new UserType {
                Id = 3, Name = "Example Users"
            };
            var relatedObjectJson = new JRaw(JsonConvert.SerializeObject(userType1));
            var relatedEntity1    = new RelatedEntity {
                Object = relatedObjectJson
            };
            var relatedEntities = new List <RelatedEntity> {
                relatedEntity1
            };

            var sorterDictionary = new SortMethodDictionary <User2>();
            var sortDetails      = new SortDetails
            {
                EntityName    = "User",
                RelatedEntity = "UserType",
                EntityToRelatedEntityProperty = "UserTypeName",
                RelatedEntityType             = RelatedEntity.Type.ManyToOne,
                RelatedEntityIdProperty       = "Name"
            };

            // Act
            var actualCollections = sorterDictionary[RelatedEntity.Type.ManyToOne](entities, relatedEntities, sortDetails);

            // Assert
            Assert.AreEqual(2, actualCollections.Count);

            Assert.AreEqual("User", actualCollections[0].Entity);
            Assert.AreEqual("UserType", actualCollections[0].RelatedEntity);
            Assert.AreEqual("1", actualCollections[0].EntityId);
            Assert.AreEqual(1, actualCollections[0].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson, actualCollections[0].RelatedEntities[0].Object);

            Assert.AreEqual("User", actualCollections[1].Entity);
            Assert.AreEqual("UserType", actualCollections[1].RelatedEntity);
            Assert.AreEqual("2", actualCollections[1].EntityId);
            Assert.AreEqual(1, actualCollections[1].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson, actualCollections[1].RelatedEntities[0].Object);
        }
        internal async Task <List <RelatedEntityCollection> > GetRelatedEntitiesAsync(IEnumerable <TInterface> entities, IEnumerable <RelatedEntityAttribute> attributes, IEnumerable <ExpandPath> expandPaths)
        {
            if (entities == null || !entities.Any())
            {
                return(null);
            }
            var list = new List <RelatedEntityCollection>();

            foreach (RelatedEntityAttribute a in attributes)
            {
                var expandPath = expandPaths.FirstOrDefault(ep => a.RelatedEntity == ep.Entity);
                RelatedEntityCollection relatedEntities = await GetRelatedEntities(entities, a.RelatedEntity, a.Property, expandPath?.Parenthesis); // Cast is intentional

                var sortDetails = new SortDetails(typeof(TEntity).Name, a.RelatedEntity, RelatedEntity.Type.ManyToOne)
                {
                    EntityToRelatedEntityProperty = a.Property
                };
                var collections = Sorter.Sort(entities, relatedEntities, sortDetails);
                list.AddRange(collections);
            }
            return(list);
        }
 public void Insert(SortDetails sortDetails)
 {
     _appDbContext.SortDetails.Add(sortDetails);
     _appDbContext.SaveChanges();
 }
Пример #9
0
        public void ManyToOneSort_DuplicateEntity_Test()
        {
            // Arrange
            var user1 = new User {
                Id = 1, Name = "User1", UserTypeId = 3
            };
            var user1b = new User {
                Id = 1, Name = "User1", UserTypeId = 3
            };
            var user2 = new User {
                Id = 2, Name = "User2", UserTypeId = 4
            };
            var user2b = new User {
                Id = 2, Name = "User2", UserTypeId = 4
            };
            var entities = new List <User> {
                user1, user2, user1b, user2b
            };

            var userType3 = new UserType {
                Id = 3, Name = "Type 3"
            };
            var relatedObjectJson3 = new JRaw(JsonConvert.SerializeObject(userType3));
            var relatedEntity3     = new RelatedEntity {
                Object = relatedObjectJson3
            };
            var userType4 = new UserType {
                Id = 4, Name = "Type 4"
            };
            var relatedObjectJson4 = new JRaw(JsonConvert.SerializeObject(userType4));
            var relatedEntity4     = new RelatedEntity {
                Object = relatedObjectJson4
            };
            var relatedEntities = new List <RelatedEntity> {
                relatedEntity3, relatedEntity4
            };

            var sorterDictionary = new SortMethodDictionary <User>();
            var sortDetails      = new SortDetails
            {
                EntityName    = "User",
                RelatedEntity = "UserType",
                EntityToRelatedEntityProperty = "UserTypeId",
                RelatedEntityType             = RelatedEntity.Type.ManyToOne
            };

            // Act
            var actualCollections = sorterDictionary[RelatedEntity.Type.ManyToOne](entities, relatedEntities, sortDetails);

            // Assert
            Assert.AreEqual(2, actualCollections.Count);

            Assert.AreEqual("User", actualCollections[0].Entity);
            Assert.AreEqual("UserType", actualCollections[0].RelatedEntity);
            Assert.AreEqual("1", actualCollections[0].EntityId);
            Assert.AreEqual(1, actualCollections[0].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson3, actualCollections[0].RelatedEntities[0].Object);

            Assert.AreEqual("User", actualCollections[1].Entity);
            Assert.AreEqual("UserType", actualCollections[1].RelatedEntity);
            Assert.AreEqual("2", actualCollections[1].EntityId);
            Assert.AreEqual(1, actualCollections[1].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson4, actualCollections[1].RelatedEntities[0].Object);
        }
        public void GetRelatedEntitiesByPropertyOtherThanIdTest()
        {
            // Arrange
            var userType1 = new UserType {
                Id = 1, Name = "Internal"
            };
            var userType2 = new UserType {
                Id = 2, Name = "Customer"
            };

            var entities = new List <UserType> {
                userType1, userType2
            };

            var user1 = new User2 {
                Id = 1, Name = "User1", UserTypeName = "Internal"
            };
            var relatedObjectJson1 = new JRaw(JsonConvert.SerializeObject(user1));
            var relatedEntity1     = new RelatedEntity {
                Object = relatedObjectJson1
            };

            var user2 = new User2 {
                Id = 2, Name = "User2", UserTypeName = "Internal"
            };
            var relatedObjectJson2 = new JRaw(JsonConvert.SerializeObject(user2));
            var relatedEntity2     = new RelatedEntity {
                Object = relatedObjectJson2
            };

            var user3 = new User2 {
                Id = 3, Name = "User3", UserTypeName = "Customer"
            };
            var relatedObjectJson3 = new JRaw(JsonConvert.SerializeObject(user3));
            var relatedEntity3     = new RelatedEntity {
                Object = relatedObjectJson3
            };

            var user4 = new User2 {
                Id = 4, Name = "User4", UserTypeName = "Customer"
            };
            var relatedObjectJson4 = new JRaw(JsonConvert.SerializeObject(user4));
            var relatedEntity4     = new RelatedEntity {
                Object = relatedObjectJson4
            };

            var relatedEntities = new List <RelatedEntity> {
                relatedEntity1, relatedEntity2, relatedEntity3, relatedEntity4
            };

            var sorterDictionary = new SortMethodDictionary <UserType>();
            var sortDetails      = new SortDetails
            {
                EntityName     = "UserType",
                RelatedEntity  = "User2",
                EntityProperty = "Name",
                EntityToRelatedEntityProperty = "UserTypeName",
                RelatedEntityType             = RelatedEntity.Type.OneToMany
            };

            // Act
            var actualCollections = sorterDictionary[RelatedEntity.Type.OneToMany](entities, relatedEntities, sortDetails);

            // Assert
            Assert.AreEqual(2, actualCollections.Count);

            Assert.AreEqual("UserType", actualCollections[0].Entity);
            Assert.AreEqual("User2", actualCollections[0].RelatedEntity);
            Assert.AreEqual("1", actualCollections[0].EntityId);
            Assert.AreEqual(2, actualCollections[0].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson1, actualCollections[0].RelatedEntities[0].Object);
            Assert.AreEqual(relatedObjectJson2, actualCollections[0].RelatedEntities[1].Object);

            Assert.AreEqual("UserType", actualCollections[1].Entity);
            Assert.AreEqual("User2", actualCollections[1].RelatedEntity);
            Assert.AreEqual("2", actualCollections[1].EntityId);
            Assert.AreEqual(2, actualCollections[1].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson3, actualCollections[1].RelatedEntities[0].Object);
            Assert.AreEqual(relatedObjectJson4, actualCollections[1].RelatedEntities[1].Object);
        }