public static DeltaGroup GetDeltaObjects <T>(T originalObject, JObject jObject) { var deltaProperties = TypeCache.GetDeltaPropertyInfo <T>(); var propertiesToIgnoreOnDefault = TypeCache.GetPropertiesToIgnoreOnDefault <T>(); var ignorePropertiesOnDefault = TypeCache.IgnorePropertiesOnDefault <T>(); return(deltaProperties.Select(deltaProperty => GetDeltaObject(deltaProperty, originalObject, jObject, propertiesToIgnoreOnDefault, ignorePropertiesOnDefault)) .Aggregate(new DeltaGroup(), (deltaGroup, deltaObject) => { if (deltaObject == null) { return deltaGroup; } switch (deltaObject.ValueConversionStatus) { case ValueConversionStatus.Success: deltaGroup.DeltaObjects.Add(deltaObject); return deltaGroup; case ValueConversionStatus.Fail: deltaGroup.DeltaObjectsValueConversionFail.Add(deltaObject); return deltaGroup; default: return deltaGroup; } })); }
public void CachesPropertyInfo_WhenNewTypeProvided() { var propertyInfoCache = typeof(TypeCache) .GetProperty("DeltaPropertiesByType", BindingFlags.NonPublic | BindingFlags.Static) .GetValue(null) as ConcurrentDictionary <Type, List <DeltaProperty> >; Assert.NotNull(propertyInfoCache); var customerPropertiesFirstCall = TypeCache.GetDeltaPropertyInfo <TestCustomer>(); Assert.True(propertyInfoCache.TryGetValue(typeof(TestCustomer), out _)); var customerPropertiesSecondCall = TypeCache.GetDeltaPropertyInfo <TestCustomer>(); Assert.True(propertyInfoCache.TryGetValue(typeof(TestCustomer), out _)); var comparedResult = GetCompareLogic().Compare(customerPropertiesFirstCall, customerPropertiesSecondCall); Assert.True(comparedResult.AreEqual); var accountProperties = TypeCache.GetDeltaPropertyInfo <TestAccount>(); Assert.True(propertyInfoCache.TryGetValue(typeof(TestCustomer), out _)); Assert.True(propertyInfoCache.TryGetValue(typeof(TestAccount), out _)); }
public static List <DeltaObject> GetDeltaObjects <T>(T originalObject, T newObject) { var deltaProperties = TypeCache.GetDeltaPropertyInfo <T>(); var propertiesToIgnoreOnDefault = TypeCache.GetPropertiesToIgnoreOnDefault <T>(); var ignorePropertiesOnDefault = TypeCache.IgnorePropertiesOnDefault <T>(); return(deltaProperties.Select(deltaProperty => GetDeltaObject(deltaProperty, originalObject, newObject, propertiesToIgnoreOnDefault, ignorePropertiesOnDefault)) .Where(d => d != null) .ToList()); }
public void DoesNotIncludeNonAcceptedTypes_WhenProvidedTypeIncludedNonAcceptedTypes() { var customerProperties = TypeCache.GetDeltaPropertyInfo <TestCustomer>(); Assert.NotNull(customerProperties); Assert.IsType <List <DeltaProperty> >(customerProperties); Assert.NotEmpty(customerProperties); Assert.True(customerProperties.TrueForAll(p => p.PropertyInfo.PropertyType.IsPrimitive || p.PropertyInfo.PropertyType.IsEnum || AcceptedNonPrimitiveTypes.Contains(p.PropertyInfo.PropertyType))); }