public void TestOrderApproved()
        {
            #region Arrange
            var users = new List <User>();
            for (int i = 0; i < 3; i++)
            {
                users.Add(CreateValidEntities.User(i + 1));
                users[i].SetIdTo((i + 1).ToString(CultureInfo.InvariantCulture));
            }
            new FakeUsers(0, UserRepository, users, true);

            var order    = CreateValidEntities.Order(1);
            var approval = CreateValidEntities.Approval(1);
            approval.User       = UserRepository.Queryable.Single(a => a.Id == "3");
            approval.StatusCode = CreateValidEntities.OrderStatusCode(4);
            UserIdentity.Expect(a => a.Current).Return("2");
            #endregion Arrange

            #region Act
            EventService.OrderApproved(order, approval);
            #endregion Act

            #region Assert
            NotificationService.AssertWasCalled(a => a.OrderApproved(order, approval));
            Assert.AreEqual(1, order.OrderTrackings.Count());
            Assert.AreEqual("FirstName2 LastName2", order.OrderTrackings[0].User.FullName);
            Assert.AreEqual("Name4", order.OrderTrackings[0].StatusCode.Name);
            Assert.AreEqual("approved", order.OrderTrackings[0].Description);
            #endregion Assert
        }
        public void TestApprovalsWithANewValueDoesNotSave()
        {
            Split record = null;

            try
            {
                #region Arrange
                record = GetValid(9);
                record.Approvals.Add(CreateValidEntities.Approval(1));
                #endregion Arrange

                #region Act
                SplitRepository.DbContext.BeginTransaction();
                SplitRepository.EnsurePersistent(record);
                SplitRepository.DbContext.CommitTransaction();
                #endregion Act
            }
            catch (Exception ex)
            {
                Assert.IsNotNull(record);
                Assert.IsNotNull(ex);
                Assert.AreEqual("object references an unsaved transient instance - save the transient instance before flushing or set cascade action for the property to something that would make it autosave. Type: Purchasing.Core.Domain.Approval, Entity: Purchasing.Core.Domain.Approval", ex.Message);
                throw;
            }
        }
Esempio n. 3
0
        public void TestReroutePurchaserGetReturnsView1()
        {
            #region Arrange
            var orders = new List <Order>();
            orders.Add(CreateValidEntities.Order(1));
            orders[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
            orders[0].Approvals.Add(CreateValidEntities.Approval(1));
            orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
            orders[0].Approvals[0].User = CreateValidEntities.User(99);
            new FakeOrders(0, OrderRepository, orders);
            new FakeUsers(3, UserRepository);
            //new FakeOrderPeeps(3, OrderPeepRepository);
            #endregion Arrange

            #region Act
            var result = Controller.ReroutePurchaser(1)
                         .AssertViewRendered()
                         .WithViewData <OrderReRoutePurchaserModel>();
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.PurchaserPeeps.Count());
            #endregion Assert
        }
Esempio n. 4
0
        public void TestReroutePurchaserThrowsExceptionIfUserDoesNotExist()
        {
            var thisFar = false;

            try
            {
                #region Arrange
                var orders = new List <Order>();
                orders.Add(CreateValidEntities.Order(1));
                orders[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
                orders[0].Approvals.Add(CreateValidEntities.Approval(1));
                orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
                orders[0].Approvals[0].User = CreateValidEntities.User(99);
                new FakeOrders(0, OrderRepository, orders);
                new FakeUsers(3, UserRepository);
                //new FakeOrderPeeps(3, OrderPeepRepository);
                thisFar = true;
                #endregion Arrange

                #region Act
                Controller.ReroutePurchaser(1, "NotMe");
                #endregion Act
            }
            catch (Exception ex)
            {
                Assert.IsTrue(thisFar);
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains no matching element", ex.Message);
                throw;
            }
        }
Esempio n. 5
0
        public void TestReRouteApprovalsForExistingOrderWhenCurrectLevelIsApprove05()
        {
            #region Arrange
            var order = CreateValidEntities.Order(1);
            order.CreatedBy = CreateValidEntities.User(109);
            order.SetIdTo(99);
            order.Splits = new List <Split>();
            order.Splits.Add(CreateValidEntities.Split(1));
            order.Splits.Add(CreateValidEntities.Split(2));
            order.Splits[0].Order = order;
            order.Splits[1].Order = order;

            order.Splits[0].Account = "12345";
            order.Splits[1].Account = "23456";

            order.StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Approver);

            order.Approvals = new List <Approval>();
            order.Approvals.Add(CreateValidEntities.Approval(1));
            order.Approvals.Add(CreateValidEntities.Approval(2));
            order.Approvals.Add(CreateValidEntities.Approval(3));
            order.Approvals.Add(CreateValidEntities.Approval(4));
            order.Approvals[0].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Approver);
            order.Approvals[0].Completed  = true;
            order.Approvals[0].User       = CreateValidEntities.User(88);
            order.Approvals[1].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.AccountManager);
            order.Approvals[2].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Purchaser);
            order.Approvals[3].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.ConditionalApprover);
            order.Approvals[3].User       = CreateValidEntities.User(99);

            new FakeUsers(4, UserRepository);
            new FakeWorkgroupAccounts(3, WorkgroupAccountRepository);

            #endregion Arrange

            #region Act
            OrderService.ReRouteApprovalsForExistingOrder(order, string.Empty, string.Empty);
            #endregion Act

            #region Assert
            EventService.AssertWasCalled(a => a.OrderApprovalAdded(Arg <Order> .Is.Anything, Arg <Approval> .Is.Anything, Arg <bool> .Is.Anything), x => x.Repeat.Times(3));
            EventService.AssertWasCalled(a => a.OrderReRouted(order));
            SecurityService.AssertWasNotCalled(a => a.GetUser(Arg <string> .Is.Anything));
            Assert.AreEqual(4, order.Approvals.Count);
            Assert.AreEqual("LastName99", order.Approvals[0].User.LastName);
            Assert.IsFalse(order.Approvals[0].Completed);

            Assert.IsNull(order.Approvals[1].User);
            Assert.AreEqual(OrderStatusCode.Codes.AccountManager, order.Approvals[1].StatusCode.Id);

            Assert.IsNull(order.Approvals[2].User);
            Assert.AreEqual(OrderStatusCode.Codes.Purchaser, order.Approvals[2].StatusCode.Id);

            Assert.IsNull(order.Approvals[3].User);
            Assert.AreEqual(OrderStatusCode.Codes.AccountManager, order.Approvals[3].StatusCode.Id);
            #endregion Assert
        }
        public void TestOrderApprovalAddedDoesNothing()
        {
            #region Arrange
            var order         = CreateValidEntities.Order(1);
            var approval      = CreateValidEntities.Approval(1);
            var trackingCount = order.OrderTrackings.Count();
            #endregion Arrange

            #region Act
            EventService.OrderApprovalAdded(order, approval);
            #endregion Act

            #region Assert
            NotificationService.AssertWasNotCalled(a => a.OrderReRouted(Arg <Order> .Is.Anything, Arg <int> .Is.Anything, Arg <bool> .Is.Anything));
            Assert.AreEqual(trackingCount, order.OrderTrackings.Count());
            #endregion Assert
        }
Esempio n. 7
0
        /// <summary>
        /// Gets the valid entity of type T
        /// </summary>
        /// <param name="counter">The counter.</param>
        /// <returns>A valid entity of type T</returns>
        protected override Approval GetValid(int?counter)
        {
            var rtValue = CreateValidEntities.Approval(counter);

            rtValue.Order      = Repository.OfType <Order>().Queryable.FirstOrDefault();
            rtValue.StatusCode = Repository.OfType <OrderStatusCode>().Queryable.FirstOrDefault();
            rtValue.User       = null;

            if (counter != null && counter == 3)
            {
                rtValue.Completed = true;
            }
            else
            {
                rtValue.Completed = false;
            }

            return(rtValue);
        }
        public void TestOrderAutoApprovalAddedAddsTracking()
        {
            #region Arrange
            var order    = CreateValidEntities.Order(1);
            var approval = CreateValidEntities.Approval(1);
            approval.User       = CreateValidEntities.User(3);
            approval.StatusCode = CreateValidEntities.OrderStatusCode(4);
            #endregion Arrange

            #region Act
            EventService.OrderAutoApprovalAdded(order, approval);
            #endregion Act

            #region Assert
            NotificationService.AssertWasNotCalled(a => a.OrderApproved(Arg <Order> .Is.Anything, Arg <Approval> .Is.Anything));
            Assert.AreEqual(1, order.OrderTrackings.Count());
            Assert.AreEqual("FirstName3 LastName3", order.OrderTrackings[0].User.FullName);
            Assert.AreEqual("Name4", order.OrderTrackings[0].StatusCode.Name);
            Assert.AreEqual("automatically approved", order.OrderTrackings[0].Description);
            #endregion Assert
        }
Esempio n. 9
0
        public void TestReRouteApprovalsForExistingOrderWhenCurrectLevelIsApprove02()
        {
            #region Arrange
            var order = CreateValidEntities.Order(1);
            order.CreatedBy = CreateValidEntities.User(3);
            order.SetIdTo(99);
            order.Splits = new List <Split>();
            order.Splits.Add(CreateValidEntities.Split(1));
            order.Splits[0].Order = order;
            order.StatusCode      = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Approver);

            order.Approvals = new List <Approval>();
            order.Approvals.Add(CreateValidEntities.Approval(1));
            order.Approvals.Add(CreateValidEntities.Approval(2));
            order.Approvals.Add(CreateValidEntities.Approval(3));
            order.Approvals[0].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Approver);
            order.Approvals[1].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.AccountManager);
            order.Approvals[2].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Purchaser);

            new FakeUsers(4, UserRepository);
            UserIdentity.Expect(a => a.Current).Return("3");

            #endregion Arrange

            #region Act
            OrderService.ReRouteApprovalsForExistingOrder(order, "3", "2");
            #endregion Act

            #region Assert
            EventService.AssertWasCalled(a => a.OrderApprovalAdded(Arg <Order> .Is.Anything, Arg <Approval> .Is.Anything, Arg <bool> .Is.Anything), x => x.Repeat.Times(2));
            EventService.AssertWasCalled(a => a.OrderAutoApprovalAdded(Arg <Order> .Is.Anything, Arg <Approval> .Is.Anything));
            EventService.AssertWasCalled(a => a.OrderReRouted(order));
            Assert.AreEqual(3, order.Approvals.Count);
            Assert.AreEqual("LastName3", order.Approvals[0].User.LastName);
            Assert.IsTrue(order.Approvals[0].Completed);
            Assert.AreEqual("LastName2", order.Approvals[1].User.LastName);
            Assert.IsNull(order.Approvals[2].User);
            #endregion Assert
        }
        public void TestApprovalsWithPopulatedExistingListWillSave()
        {
            #region Arrange
            Split record = GetValid(9);
            SplitRepository.DbContext.BeginTransaction();
            SplitRepository.EnsurePersistent(record);
            SplitRepository.DbContext.CommitTransaction();

            const int addedCount     = 3;
            var       relatedRecords = new List <Approval>();
            for (int i = 0; i < addedCount; i++)
            {
                relatedRecords.Add(CreateValidEntities.Approval(i + 1));
                relatedRecords[i].Split      = record;
                relatedRecords[i].User       = null;
                relatedRecords[i].StatusCode = OrderStatusCodeRepository.Queryable.First();
                relatedRecords[i].Order      = Repository.OfType <Order>().Queryable.First();
                Repository.OfType <Approval>().EnsurePersistent(relatedRecords[i]);
            }
            #endregion Arrange

            #region Act
            var saveId = record.Id;
            NHibernateSessionManager.Instance.GetSession().Evict(record);
            record = SplitRepository.Queryable.Single(a => a.Id == saveId);
            Assert.AreEqual(3, record.Approvals.Count());
            SplitRepository.DbContext.BeginTransaction();
            SplitRepository.EnsurePersistent(record);
            SplitRepository.DbContext.CommitTransaction();
            #endregion Act

            #region Assert
            Assert.IsNotNull(record.Approvals);
            Assert.AreEqual(addedCount, record.Approvals.Count);
            Assert.IsFalse(record.IsTransient());
            Assert.IsTrue(record.IsValid());
            #endregion Assert
        }
Esempio n. 11
0
        public void TestReroutePurchaserWhenValid2()
        {
            #region Arrange
            SetupRoles();
            new FakeUsers(12, UserRepository);
            var orders = new List <Order>();
            orders.Add(CreateValidEntities.Order(1));
            orders[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
            orders[0].Approvals.Add(CreateValidEntities.Approval(1));
            orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
            orders[0].Approvals[0].User = CreateValidEntities.User(99);
            orders[0].Workgroup.SetIdTo(2);
            orders[0].Approvals.Add(CreateValidEntities.Approval(1));
            orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.Purchaser);
            orders[0].Approvals[0].User = CreateValidEntities.User(99);
            orders[0].Workgroup.Permissions.Add(CreateValidEntities.WorkgroupPermission(1));
            orders[0].Workgroup.Permissions.Add(CreateValidEntities.WorkgroupPermission(12));
            orders[0].Workgroup.Permissions[0].User    = UserRepository.Queryable.Single(a => a.Id == "1");
            orders[0].Workgroup.Permissions[0].Role    = RoleRepository.Queryable.Single(a => a.Id == Role.Codes.Purchaser);
            orders[0].Workgroup.Permissions[1].User    = UserRepository.Queryable.Single(a => a.Id == "12");
            orders[0].Workgroup.Permissions[1].Role    = RoleRepository.Queryable.Single(a => a.Id == Role.Codes.Purchaser);
            orders[0].Workgroup.Permissions[1].IsAdmin = true;
            new FakeOrders(0, OrderRepository, orders);


            //var orderPeeps = new List<OrderPeep>();
            //for (int i = 0; i < 12; i++)
            //{
            //    orderPeeps.Add(CreateValidEntities.OrderPeep(i + 1));
            //    orderPeeps[i].OrderId = 1;
            //    orderPeeps[i].WorkgroupId = 2;
            //    orderPeeps[i].OrderStatusCodeId = OrderStatusCode.Codes.Purchaser;
            //    orderPeeps[i].UserId = (i + 1).ToString();
            //}
            //orderPeeps[1].UserId = "99";
            //orderPeeps[2].OrderStatusCodeId = OrderStatusCode.Codes.AccountManager;
            //orderPeeps[3].OrderId = 9;
            //orderPeeps[4].WorkgroupId = 1;
            //orderPeeps[5].OrderStatusCodeId = OrderStatusCode.Codes.Approver;
            //orderPeeps[6].OrderStatusCodeId = OrderStatusCode.Codes.Requester;
            //orderPeeps[7].OrderStatusCodeId = OrderStatusCode.Codes.Cancelled;
            //orderPeeps[8].OrderStatusCodeId = OrderStatusCode.Codes.Complete;
            //orderPeeps[9].UserId = "1";
            //orderPeeps[10].UserId = "1";

            //new FakeOrderPeeps(0, OrderPeepRepository, orderPeeps);

            //var peeps = new List<OrderPeep>();
            //for (int i = 0; i < 10; i++)
            //{
            //    peeps.Add(CreateValidEntities.OrderPeep(i + 1));
            //    peeps[i].OrderId = 1;
            //    peeps[i].WorkgroupId = 2;
            //}
            #endregion Arrange

            #region Act
            var result = Controller.ReroutePurchaser(1, "1")
                         .AssertActionRedirect()
                         .ToAction <OrderController>(a => a.Review(1));
            #endregion Act

            #region Assert
            Assert.AreEqual("Order  rerouted to purchaser FirstName1 LastName1", Controller.Message);
            ApprovalRepository.AssertWasCalled(a => a.EnsurePersistent(orders[0].Approvals[0]));
            OrderService.AssertWasCalled(a => a.ReRouteSingleApprovalForExistingOrder(orders[0].Approvals[0], UserRepository.Queryable.Single(b => b.Id == "1")));

            Assert.IsNotNull(result);
            Assert.AreEqual(1, result.RouteValues["id"]);
            #endregion Assert
        }
Esempio n. 12
0
        public void TestReroutePurchaserThrowsExceptionIfUserNotPurchaser()
        {
            var thisFar = false;

            try
            {
                #region Arrange
                var orders = new List <Order>();
                orders.Add(CreateValidEntities.Order(1));
                orders[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
                orders[0].Approvals.Add(CreateValidEntities.Approval(1));
                orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
                orders[0].Approvals[0].User = CreateValidEntities.User(99);
                orders[0].Workgroup.SetIdTo(2);
                orders[0].Approvals.Add(CreateValidEntities.Approval(1));
                orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.Purchaser);
                orders[0].Approvals[0].User = null;
                new FakeOrders(0, OrderRepository, orders);
                new FakeUsers(12, UserRepository);

                //var orderPeeps = new List<OrderPeep>();
                //for (int i = 0; i < 12; i++)
                //{
                //    orderPeeps.Add(CreateValidEntities.OrderPeep(i + 1));
                //    orderPeeps[i].OrderId = 1;
                //    orderPeeps[i].WorkgroupId = 2;
                //    orderPeeps[i].OrderStatusCodeId = OrderStatusCode.Codes.Purchaser;
                //    orderPeeps[i].UserId = (i + 1).ToString();
                //}
                //orderPeeps[1].UserId = "99";
                //orderPeeps[2].OrderStatusCodeId = OrderStatusCode.Codes.AccountManager;
                //orderPeeps[3].OrderId = 9;
                //orderPeeps[4].WorkgroupId = 1;
                //orderPeeps[5].OrderStatusCodeId = OrderStatusCode.Codes.Approver;
                //orderPeeps[6].OrderStatusCodeId = OrderStatusCode.Codes.Requester;
                //orderPeeps[7].OrderStatusCodeId = OrderStatusCode.Codes.Cancelled;
                //orderPeeps[8].OrderStatusCodeId = OrderStatusCode.Codes.Complete;
                //orderPeeps[9].UserId = "1";
                //orderPeeps[10].UserId = "1";

                //new FakeOrderPeeps(0, OrderPeepRepository, orderPeeps);

                //var peeps = new List<OrderPeep>();
                //for (int i = 0; i < 10; i++)
                //{
                //    peeps.Add(CreateValidEntities.OrderPeep(i + 1));
                //    peeps[i].OrderId = 1;
                //    peeps[i].WorkgroupId = 2;
                //}
                thisFar = true;
                #endregion Arrange

                #region Act
                Controller.ReroutePurchaser(1, "3");
                #endregion Act
            }
            catch (Exception ex)
            {
                Assert.IsTrue(thisFar);
                Assert.IsNotNull(ex);
                Assert.AreEqual("Precondition failed.", ex.Message);
                throw;
            }
        }
Esempio n. 13
0
        public void TestReroutePurchaserGetReturnsView3()
        {
            #region Arrange
            SetupRoles();
            new FakeUsers(12, UserRepository);
            var orders = new List <Order>();
            orders.Add(CreateValidEntities.Order(1));
            orders[0].StatusCode.SetIdTo(OrderStatusCode.Codes.AccountManager);
            orders[0].Approvals.Add(CreateValidEntities.Approval(1));
            orders[0].Approvals[0].StatusCode.SetIdTo(OrderStatusCode.Codes.Purchaser);
            orders[0].Approvals[0].User = CreateValidEntities.User(99);
            orders[0].Workgroup.SetIdTo(2);
            orders[0].Workgroup.Permissions.Add(CreateValidEntities.WorkgroupPermission(1));
            orders[0].Workgroup.Permissions.Add(CreateValidEntities.WorkgroupPermission(12));
            orders[0].Workgroup.Permissions[0].User    = UserRepository.Queryable.Single(a => a.Id == "1");
            orders[0].Workgroup.Permissions[0].Role    = RoleRepository.Queryable.Single(a => a.Id == Role.Codes.Purchaser);
            orders[0].Workgroup.Permissions[1].User    = UserRepository.Queryable.Single(a => a.Id == "12");
            orders[0].Workgroup.Permissions[1].Role    = RoleRepository.Queryable.Single(a => a.Id == Role.Codes.Purchaser);
            orders[0].Workgroup.Permissions[1].IsAdmin = true;
            new FakeOrders(0, OrderRepository, orders);


            //var orderPeeps = new List<OrderPeep>();
            //for (int i = 0; i < 12; i++)
            //{
            //    orderPeeps.Add(CreateValidEntities.OrderPeep(i + 1));
            //    orderPeeps[i].OrderId = 1;
            //    orderPeeps[i].WorkgroupId = 2;
            //    orderPeeps[i].OrderStatusCodeId = OrderStatusCode.Codes.Purchaser;
            //    orderPeeps[i].UserId = (i + 1).ToString();
            //}
            //orderPeeps[1].UserId = "99";
            //orderPeeps[2].OrderStatusCodeId = OrderStatusCode.Codes.AccountManager;
            //orderPeeps[3].OrderId = 9;
            //orderPeeps[4].WorkgroupId = 1;
            //orderPeeps[5].OrderStatusCodeId = OrderStatusCode.Codes.Approver;
            //orderPeeps[6].OrderStatusCodeId = OrderStatusCode.Codes.Requester;
            //orderPeeps[7].OrderStatusCodeId = OrderStatusCode.Codes.Cancelled;
            //orderPeeps[8].OrderStatusCodeId = OrderStatusCode.Codes.Complete;
            //orderPeeps[9].UserId = "1";
            //orderPeeps[10].UserId = "1";

            //new FakeOrderPeeps(0, OrderPeepRepository, orderPeeps);

            //var peeps = new List<OrderPeep>();
            //for (int i = 0; i < 10; i++)
            //{
            //    peeps.Add(CreateValidEntities.OrderPeep(i + 1));
            //    peeps[i].OrderId = 1;
            //    peeps[i].WorkgroupId = 2;
            //}

            #endregion Arrange

            #region Act
            var result = Controller.ReroutePurchaser(1)
                         .AssertViewRendered()
                         .WithViewData <OrderReRoutePurchaserModel>();
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.PurchaserPeeps.Count());
            Assert.AreEqual("1", result.PurchaserPeeps[0].Id);
            Assert.AreEqual("12", result.PurchaserPeeps[1].Id);
            #endregion Assert
        }
Esempio n. 14
0
        public void TestReRouteApprovalsForExistingOrderWhenCurrectLevelIsApprove09()
        {
            #region Arrange
            var order = CreateValidEntities.Order(1);
            order.CreatedBy = CreateValidEntities.User(109);
            order.SetIdTo(99);
            order.Splits = new List <Split>();
            order.Splits.Add(CreateValidEntities.Split(1));
            order.Splits.Add(CreateValidEntities.Split(2));
            order.Splits[0].Order = order;
            order.Splits[1].Order = order;

            order.Splits[1].Account = "12345"; // switched order from one above
            order.Splits[0].Account = "23456";

            order.StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Approver);

            order.Approvals = new List <Approval>();
            order.Approvals.Add(CreateValidEntities.Approval(1));
            order.Approvals.Add(CreateValidEntities.Approval(2));
            order.Approvals.Add(CreateValidEntities.Approval(3));
            order.Approvals.Add(CreateValidEntities.Approval(4));
            order.Approvals[0].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Approver);
            order.Approvals[0].Completed  = true;
            order.Approvals[0].User       = CreateValidEntities.User(88);
            order.Approvals[1].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.AccountManager);
            order.Approvals[2].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.Purchaser);
            order.Approvals[3].StatusCode = OrderStatusCodeRepository.Queryable.Single(a => a.Id == OrderStatusCode.Codes.ConditionalApprover);
            order.Approvals[3].User       = CreateValidEntities.User(99);

            new FakeUsers(4, UserRepository);
            var workgroupAccounts = new List <WorkgroupAccount>();
            workgroupAccounts.Add(CreateValidEntities.WorkgroupAccount(1));
            workgroupAccounts[0].Account = CreateValidEntities.Account(1);
            workgroupAccounts[0].Account.SetIdTo("23456");
            workgroupAccounts[0].AccountManager = CreateValidEntities.User(555);
            workgroupAccounts[0].Approver       = CreateValidEntities.User(556);
            workgroupAccounts[0].Purchaser      = CreateValidEntities.User(557);
            workgroupAccounts[0].Workgroup      = CreateValidEntities.Workgroup(3);
            workgroupAccounts[0].Workgroup.SetIdTo(3);

            workgroupAccounts.Add(CreateValidEntities.WorkgroupAccount(2));
            workgroupAccounts[1].Account = CreateValidEntities.Account(2);
            workgroupAccounts[1].Account.SetIdTo("12345");
            workgroupAccounts[1].AccountManager = CreateValidEntities.User(444);
            workgroupAccounts[1].Approver       = CreateValidEntities.User(445);
            workgroupAccounts[1].Purchaser      = CreateValidEntities.User(446);
            workgroupAccounts[1].Workgroup      = CreateValidEntities.Workgroup(3);
            workgroupAccounts[1].Workgroup.SetIdTo(3);
            new FakeWorkgroupAccounts(0, WorkgroupAccountRepository, workgroupAccounts);
            order.Workgroup          = workgroupAccounts[0].Workgroup;
            order.Workgroup.Accounts = workgroupAccounts;

            new FakeAutoApprovals(3, AutoAprovalRepository);
            #endregion Arrange

            #region Act
            OrderService.ReRouteApprovalsForExistingOrder(order, string.Empty, string.Empty);
            #endregion Act

            #region Assert
            EventService.AssertWasCalled(a => a.OrderApprovalAdded(Arg <Order> .Is.Anything, Arg <Approval> .Is.Anything, Arg <bool> .Is.Anything), x => x.Repeat.Times(5));
            EventService.AssertWasCalled(a => a.OrderReRouted(order));
            SecurityService.AssertWasNotCalled(a => a.GetUser(Arg <string> .Is.Anything));
            Assert.AreEqual(6, order.Approvals.Count);
            Assert.AreEqual("LastName99", order.Approvals[0].User.LastName);
            Assert.AreEqual(OrderStatusCode.Codes.ConditionalApprover, order.Approvals[0].StatusCode.Id);

            Assert.AreEqual("LastName556", order.Approvals[1].User.LastName);
            Assert.AreEqual(OrderStatusCode.Codes.Approver, order.Approvals[1].StatusCode.Id);

            Assert.AreEqual("LastName555", order.Approvals[2].User.LastName);
            Assert.AreEqual(OrderStatusCode.Codes.AccountManager, order.Approvals[2].StatusCode.Id);

            Assert.AreEqual("LastName557", order.Approvals[3].User.LastName);
            Assert.AreEqual(OrderStatusCode.Codes.Purchaser, order.Approvals[3].StatusCode.Id);

            Assert.AreEqual("LastName445", order.Approvals[4].User.LastName);
            Assert.AreEqual(OrderStatusCode.Codes.Approver, order.Approvals[4].StatusCode.Id);

            Assert.AreEqual("LastName444", order.Approvals[5].User.LastName);
            Assert.AreEqual(OrderStatusCode.Codes.AccountManager, order.Approvals[5].StatusCode.Id);

            #endregion Assert
        }