public void ShouldSetBestNewAge() { var service = new MergeService(_dataAccess.Object, _repository.Object); var newCustomer = new MappedCustomerMessage { CustomerId = 1, SourceId = 2, Data = new Dictionary <string, Dictionary <string, object> > { { "edad", new Dictionary <string, object> { { "2", 36 } } } } }; var customerDocument = new CustomerDocument("1") { Data = new Dictionary <string, object> { { "nombre", "cliente prueba" }, { "edad", 35 } }, Full = JObject.Parse(elasticCustomer) }; _dataAccess.Setup(x => x.Get <CustomerDocument>(It.IsAny <string>())).Returns(customerDocument); _dataAccess.Setup(x => x.Put(It.IsAny <CustomerDocument>())); service.Save("1", newCustomer); _dataAccess.Verify(x => x.Put(It.Is <CustomerDocument>(y => y.Data.Any(z => z.Key == "edad" && ((int)z.Value) == 36)))); }
public MappedCustomerMessage Handle(CustomerMessage message) { var mapped = new MappedCustomerMessage() { CustomerId = message.CustomerId, SourceId = message.SourceId, Data = new Dictionary <string, Dictionary <string, object> >() }; var sourceFieldsMaps = _fieldMaps.Where(s => s.SourceField.Source.Id == message.SourceId) .ToList(); foreach (var data in message.Data) { var values = new Dictionary <string, object>(); foreach (var item in sourceFieldsMaps.Where(fm => fm.SourceField.FieldName == data.Key && fm.CustomerField != null)) { values.Add(message.SourceId.ToString(), Convert.ChangeType(data.Value, item.CustomerField.FieldType)); mapped.Data.Add(item.CustomerField.FieldName, values); } } return(mapped); }
public void Save(string customerId, MappedCustomerMessage message) { var currentDocument = _customersDataAccess.Get <CustomerDocument>(customerId); var upsertCustomer = new CustomerDocument(customerId); var dataToMerge = JObject.FromObject(message.Data); if (currentDocument == null) { upsertCustomer.Data = message.Data.ToDictionary(x => x.Key, x => x.Value.First().Value); upsertCustomer.Full = dataToMerge; } else { var currentCustomerFull = new JObject(currentDocument.Full); currentCustomerFull.Merge(dataToMerge, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); upsertCustomer.Full = currentCustomerFull; upsertCustomer.Data = currentDocument.Data; foreach (var customerFieldName in message.Data.Select(x => x.Key)) { var filters = _fieldMaps.Where(x => x.CustomerField.FieldName.Equals(customerFieldName, StringComparison.InvariantCultureIgnoreCase)); var token = currentCustomerFull.GetValue(customerFieldName, StringComparison.InvariantCultureIgnoreCase); foreach (var fieldMap in filters.Where(x => x.SourceField != null).OrderBy(x => x.Order)) { var customerValue = token[fieldMap.SourceField.SourceId.ToString()]; if (customerValue != null) { upsertCustomer.Data[customerFieldName] = ((JValue)customerValue).Value; break; } } } } _customersDataAccess.Put(upsertCustomer); }
public void ShouldCreateNewCustomer() { long sourceId = 2; var service = new MergeService(_dataAccess.Object, _repository.Object); var newCustomer = new MappedCustomerMessage { CustomerId = 1, SourceId = sourceId, Data = new Dictionary <string, Dictionary <string, object> > { { "edad", new Dictionary <string, object> { { sourceId.ToString(), 36 } } }, { "nombre", new Dictionary <string, object> { { sourceId.ToString(), "Nuevo cliente" } } } } }; _dataAccess.Setup(x => x.Get <CustomerDocument>(It.IsAny <string>())); _dataAccess.Setup(x => x.Put(It.IsAny <CustomerDocument>())); service.Save("1", newCustomer); _dataAccess.Verify(x => x.Put(It.Is <CustomerDocument>(y => y.Data.Any(z => z.Key == "nombre" && (z.Value.ToString()) == "Nuevo cliente")))); _dataAccess.Verify(x => x.Put(It.Is <CustomerDocument>(y => y.Data.Any(z => z.Key == "edad" && ((int)z.Value) == 36)))); }