示例#1
0
        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);
        }
示例#2
0
            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());
            }
示例#3
0
        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);
        }
示例#4
0
            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());
            }
示例#5
0
            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());
                }
            }
示例#6
0
            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);
        }
示例#8
0
 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;
 }
示例#9
0
            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);
            }
示例#10
0
            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());
                }
            }
示例#11
0
            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 }
                };
            }
示例#12
0
            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);
            }
示例#13
0
            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);
            }