Esempio n. 1
0
        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))));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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))));
        }