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); }
public void SetRelatedEntityPropertyNotPresetTests() { // Arrange // Act var sortDetails = new SortDetails("User", "UserType", RelatedEntity.Type.OneToOne); // Assert Assert.AreEqual("UserTypeId", sortDetails.EntityToRelatedEntityProperty); }
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); }
public void SetRelatedEntityPropertyPresetTests() { // Arrange var sortDetails = new SortDetails(); sortDetails.EntityToRelatedEntityProperty = "TypeId"; // Act sortDetails.RelatedEntity = "UserType"; // Assert Assert.AreEqual("TypeId", sortDetails.EntityToRelatedEntityProperty); }
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(); }
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); }