public async Task <Customer> UpdateCustomer(Customer customer, string userId) { if (await _customerRepository.SaveChangesAsync()) { CustomerAudit customerAudit = new CustomerAudit { Date = DateTime.Now, Operation = CustomerAuditOperationType.Update, Customer = customer }; //Add registry operation _customerRepository.AddCustomerAudit(customerAudit, userId); if (await _customerRepository.SaveChangesAsync()) { return(customer); } } else { _customExceptionService.ThrowInvalidOperationException("Error adding customer"); } return(null); }
public void UpdateBothDataSources() { var change2 = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = _stamp.AddSeconds(5), Source = ChangeSource.MSSQL }; var change3 = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = _stamp.AddSeconds(5), Source = ChangeSource.Oracle }; _changesEF.Add(change2); _changesNH.Add(change3); WorkflowInvoker.Invoke(new MarkSynced(), _inputs); _efRepo.Verify(f => f.Create()); _nhRepo.Verify(f => f.Create()); _mockRepoEF.Verify(r => r.Save()); _mockRepoNH.Verify(r => r.Save()); }
public async Task <Customer> AddCustomer(Customer customer, string userId) { if (await _customerRepository.GetCustomerByNameAsync(customer.Name) != null) { _customExceptionService.ThrowInvalidOperationException("Name already exists"); return(null); } _customerRepository.AddCustomer(customer); //Add registry operation if (await _customerRepository.SaveChangesAsync()) { CustomerAudit customerAudit = new CustomerAudit { Date = DateTime.Now, Operation = CustomerAuditOperationType.Create, Customer = customer }; _customerRepository.AddCustomerAudit(customerAudit, userId); if (await _customerRepository.SaveChangesAsync()) { return(customer); } } else { _customExceptionService.ThrowInvalidOperationException("Error adding customer"); } return(null); }
public void SetBothSidesAsSynced(ChangeSource source) { _change.Source = source; var change2 = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = _stamp.AddSeconds(5), Source = ChangeSource.Oracle }; _changesNH.Add(change2); var change3 = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = _stamp.AddSeconds(7), Source = ChangeSource.Oracle }; _changesEF.Add(change3); WorkflowInvoker.Invoke(new MarkSynced(), _inputs); _mockRepoEF.Verify(r => r.Update(It.Is((CustomerAudit ca) => ca.IsSynced))); _mockRepoNH.Verify(r => r.Update(It.Is((CustomerAudit ca) => ca.IsSynced))); Assert.IsTrue(change2.IsSynced || change3.IsSynced); Assert.IsTrue(_change.IsSynced); _mockRepoEF.Verify(r => r.Save()); _mockRepoNH.Verify(r => r.Save()); }
public void CreateTheCorrectRepositoryType(ChangeSource source) { var stamp = new DateTime(2012, 10, 15, 15, 15, 15); var change = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = stamp, Source = source }; IDictionary <string, object> inputs = new Dictionary <string, object> { { "Container", _container }, { "Change", change } }; var result = WorkflowInvoker.Invoke(new SyncComplete(), inputs); if (source == ChangeSource.MSSQL) { _nhRepo.Verify(r => r.Create()); } else { _efRepo.Verify(r => r.Create()); } }
public void ReturnTheCorrectResultBasedOnPresenceOfNewChanges() { var stamp = new DateTime(2012, 10, 15, 15, 15, 15); var change = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = stamp, }; var change2 = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = stamp.AddSeconds(20) }; IDictionary <string, object> inputs = new Dictionary <string, object> { { "Container", _container }, { "Change", change } }; bool result = WorkflowInvoker.Invoke(new SyncComplete(), inputs); Assert.IsFalse(result); _changes.Add(change2); result = WorkflowInvoker.Invoke(new SyncComplete(), inputs); Assert.IsTrue(result); }
public void AddCustomerAudit(CustomerAudit customerAudit, string userId) { User user = _context.Users .Where(t => t.Id == userId) .FirstOrDefault(); if (user != null) { customerAudit.User = user; } _context.CustomerAudits.Add(customerAudit); }
public static void Update(this Customer customer, CustomerAudit change) { customer.CompanyName = change.CompanyName; customer.ContactName = change.ContactName; customer.ContactTitle = change.ContactTitle; customer.Address = change.Address; customer.City = change.City; customer.Region = change.Region; customer.Phone = change.Phone; customer.PostalCode = change.PostalCode; customer.Country = change.Country; customer.Fax = change.Fax; customer.Bool = change.Bool; }
public void MergeListsIfTheyDoNotIntersect() { var stamp = new DateTime(2012, 10, 15, 15, 15, 15); var ca1 = new CustomerAudit { Email = "*****@*****.**", ContactName = "xxx", Added = stamp }; var ca2 = new CustomerAudit { Email = "*****@*****.**", ContactName = "yyy", Added = stamp.AddSeconds(20) }; var ca3 = new CustomerAudit { Email = "*****@*****.**", ContactName = "zzz", Added = stamp.AddSeconds(-43) }; var first = new List <CustomerAudit> { ca2 }; var second = new List <CustomerAudit> { ca3, ca1 }; IDictionary <string, object> inputs = new Dictionary <string, object> { { "Container", _container }, { "OracleChanges", first }, { "MSSQLChanges", second } }; var outputs = WorkflowInvoker.Invoke(new MergeChanges(), inputs); var result = outputs["ToSync"] as List <CustomerAudit>; var expected = new List <CustomerAudit> { ca3, ca1, ca2 }; CollectionAssert.AreEqual(expected, result); }
public void CreateTheCorrectRepositoryType(ChangeSource source) { var change = new CustomerAudit { Id = 3, Source = source }; IDictionary <string, object> inputs = new Dictionary <string, object> { { "Container", _container }, { "Ignored", change } }; WorkflowInvoker.Invoke(new IgnoreChange(), inputs); if (source == ChangeSource.MSSQL) { _efRepo.Verify(f => f.Create()); } else { _nhRepo.Verify(f => f.Create()); } }
public void Setup() { _container = new UnityContainer(); var stamp = new DateTime(2012, 10, 15, 15, 15, 15); _mockLog = new Mock <ILog>(); _customers = new List <Customer>(); _mockRepo = new Mock <IRepositoryBase>(); _mockRepo.Setup(r => r.All <Customer>()).Returns(_customers.AsQueryable()); _efRepo = new Mock <Data.EntityFramework.Helpers.IRepositoryFactory>(); _nhRepo = new Mock <Data.NHibernate.Helpers.IRepositoryFactory>(); _efRepo.Setup(f => f.Create()).Returns(_mockRepo.Object); _nhRepo.Setup(f => f.Create()).Returns(_mockRepo.Object); _container.RegisterInstance(typeof(Data.EntityFramework.Helpers.IRepositoryFactory), _efRepo.Object); _container.RegisterInstance(typeof(Data.NHibernate.Helpers.IRepositoryFactory), _nhRepo.Object); _container.RegisterInstance(typeof(ILog), _mockLog.Object); _stamp = new DateTime(2012, 10, 15, 15, 15, 15); _change = new CustomerAudit { Email = "*****@*****.**", IsSynced = false, Type = "insert", Added = stamp, Source = ChangeSource.MSSQL }; _inputs = new Dictionary <string, object> { { "Container", _container }, { "Change", _change } }; }
public void IgnoreEmptyChangesLists() { var stamp = new DateTime(2012, 10, 15, 15, 15, 15); var ca1 = new CustomerAudit { Email = "*****@*****.**", ContactName = "xxx", Added = stamp }; var ca2 = new CustomerAudit { Email = "*****@*****.**", ContactName = "yyy", Added = stamp.AddSeconds(20) }; var empty = new List <CustomerAudit>(); var other = new List <CustomerAudit> { ca2, ca1 }; IDictionary <string, object> inputs = new Dictionary <string, object> { { "Container", _container }, { "OracleChanges", empty }, { "MSSQLChanges", other } }; var outputs = WorkflowInvoker.Invoke(new MergeChanges(), inputs); var result = outputs["ToSync"] as List <CustomerAudit>; var expected = new List <CustomerAudit> { ca1, ca2 }; CollectionAssert.AreEqual(expected, result); }
public void CorrectlyMergeIntersectingChanges() { var stamp = new DateTime(2012, 10, 15, 15, 15, 15); var ca1 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x1", Type = "insert", Added = stamp }; var ca21 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x2", Type = "insert", Added = stamp.AddSeconds(5), Source = ChangeSource.MSSQL }; var ca22 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x2", Type = "insert", Added = stamp.AddSeconds(10), Source = ChangeSource.Oracle }; var ca23 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x2", Type = "update", Added = stamp.AddSeconds(20) }; var ca31 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x3", Type = "update", Added = stamp.AddSeconds(15) }; var ca32 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x3", Type = "update", Added = stamp.AddSeconds(30) }; var ca4 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x4", Type = "insert", Added = stamp.AddSeconds(25) }; var ca5 = new CustomerAudit { Email = "*****@*****.**", ContactName = "x5", Type = "update", Added = stamp.AddSeconds(35) }; var first = new List <CustomerAudit> { ca1, ca22, ca4, ca32 }; var second = new List <CustomerAudit> { ca21, ca31, ca23, ca5 }; IDictionary <string, object> inputs = new Dictionary <string, object> { { "Container", _container }, { "OracleChanges", first }, { "MSSQLChanges", second } }; var outputs = WorkflowInvoker.Invoke(new MergeChanges(), inputs); var result = outputs["ToSync"] as List <CustomerAudit>; var expected = new List <CustomerAudit> { ca1, ca23, ca4, ca32, ca5 }; CollectionAssert.AreEqual(expected, result); }