public void ShouldSearchBySpecificationWithCreator()
        {
            new DatabaseTester().Clean();

            var creator1 = new Employee("1", "1", "1", "1");
            var creator2 = new Employee("2", "2", "2", "2");
            var order1 = new ExpenseReport();
            order1.Submitter = creator1;
            order1.Number = "123";
            var order2 = new ExpenseReport();
            order2.Submitter = creator2;
            order2.Number = "456";

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(creator1);
                session.SaveOrUpdate(creator2);
                session.SaveOrUpdate(order1);
                session.SaveOrUpdate(order2);
                session.Transaction.Commit();
            }

            var specification = new ExpenseReportSpecificationQuery{Submitter = creator1};

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var bus = container.GetInstance<Bus>();
            MultipleResult<ExpenseReport> result = bus.Send(specification);
            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(order1.Id));
        }
示例#2
0
        public MultipleResult <ExpenseReport> Handle(ExpenseReportSpecificationQuery command)
        {
            var reports = _context.Set <ExpenseReport>()
                          .Include(r => r.AuditEntries).ThenInclude(a => a.Employee)
                          .Include(r => r.Submitter)
                          .Include(r => r.Approver)
                          .AsQueryable();

            if (command.Approver != null)
            {
                reports = reports.Where(r => r.Approver == command.Approver);
            }

            if (command.Submitter != null)
            {
                reports = reports.Where(r => r.Submitter == command.Submitter);
            }

            if (command.Status != null)
            {
                reports = reports.Where(r => r.StatusCode == command.Status.Code);
            }

            IList <ExpenseReport> list = reports.ToList();

            return(new MultipleResult <ExpenseReport> {
                Results = new List <ExpenseReport>(list).ToArray()
            });
        }
示例#3
0
        public ActionResult Index(ExpenseReportSearchModel.SearchFilters filters)
        {
            var model = new ExpenseReportSearchModel();

            if (filters != null)
            {
                model.Filters = filters;
            }


            var submitter = _bus.Send(new EmployeeByUserNameQuery(model.Filters.Submitter)).Result;
            var approver  = _bus.Send(new EmployeeByUserNameQuery(model.Filters.Approver)).Result;
            var status    = !string.IsNullOrWhiteSpace(model.Filters.Status) ? ExpenseReportStatus.FromKey(model.Filters.Status) : null;

            var specification = new ExpenseReportSpecificationQuery
            {
                Approver  = approver,
                Submitter = submitter,
                Status    = status
            };

            ExpenseReport[] orders = _bus.Send(specification).Results;

            model.Results = orders;

            return(View(model));
        }
示例#4
0
        public MultipleResult <ExpenseReport> Handle(ExpenseReportSpecificationQuery command)
        {
            using (ISession session = DataContext.GetTransactedSession())
            {
                ICriteria criteria = session.CreateCriteria(typeof(ExpenseReport));

                if (command.Approver != null)
                {
                    criteria.Add(Restrictions.Eq("Approver", command.Approver));
                }

                if (command.Submitter != null)
                {
                    criteria.Add(Restrictions.Eq("Submitter", command.Submitter));
                }

                if (command.Status != null)
                {
                    criteria.Add(Restrictions.Eq("Status", command.Status));
                }

                IList <ExpenseReport> list = criteria.List <ExpenseReport>();
                return(new MultipleResult <ExpenseReport> {
                    Results = new List <ExpenseReport>(list).ToArray()
                });
            }
        }
        public ActionResult Index()
        {
            var model = new ToDoModel();

            Employee currentUser            = _session.GetCurrentUser();
            var      submittedSpecification = new ExpenseReportSpecificationQuery
            {
                Approver = currentUser,
                Status   = ExpenseReportStatus.Submitted
            };

            ExpenseReport[] submitted = _bus.Send(submittedSpecification).Results;
            model.Submitted = submitted;

            var approvedSpecification = new ExpenseReportSpecificationQuery
            {
                Approver = currentUser,
                Status   = ExpenseReportStatus.Approved
            };

            ExpenseReport[] approved = _bus.Send(approvedSpecification).Results;
            model.Approved = approved;

            return(PartialView(model));
        }
        public void ShouldSearchBySpecificationWithFullSpecification()
        {
            new DatabaseTester().Clean();

            var employee1 = new Employee("1", "1", "1", "1");
            var employee2 = new Employee("2", "2", "2", "2");
            var order1    = new ExpenseReport();

            order1.Submitter = employee2;
            order1.Approver  = employee1;
            order1.Number    = "123";
            order1.Status    = ExpenseReportStatus.Submitted;
            var order2 = new ExpenseReport();

            order2.Submitter = employee1;
            order2.Approver  = employee2;
            order2.Number    = "456";
            order2.Status    = ExpenseReportStatus.Draft;

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(employee1);
                session.SaveOrUpdate(employee2);
                session.SaveOrUpdate(order1);
                session.SaveOrUpdate(order2);
                session.Transaction.Commit();
            }

            var specification = new ExpenseReportSpecificationQuery()
            {
                Submitter = employee2,
                Approver  = employee1,
                Status    = ExpenseReportStatus.Submitted
            };

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();
            MultipleResult <ExpenseReport> result = bus.Send(specification);

            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(order1.Id));
        }
        public HttpResponseMessage Get(string approverName, string submitterName, string statusCode)
        {
            var submitter = _bus.Send(new EmployeeByUserNameQuery(submitterName)).Result;
            var approver  = _bus.Send(new EmployeeByUserNameQuery(approverName)).Result;
            var status    = !string.IsNullOrWhiteSpace(statusCode) ? ExpenseReportStatus.FromKey(statusCode) : null;

            var specification = new ExpenseReportSpecificationQuery
            {
                Approver  = approver,
                Submitter = submitter,
                Status    = status
            };

            ExpenseReport[] orders = _bus.Send(specification).Results;

            var responseMessage = Request.CreateResponse(HttpStatusCode.OK, orders);

            return(responseMessage);
        }
        public void ShouldSearchBySpecificationWithStatus()
        {
            new DatabaseTester().Clean();

            var employee1 = new Employee("1", "1", "1", "1");
            var employee2 = new Employee("2", "2", "2", "2");
            var order1    = new ExpenseReport();

            order1.Submitter = employee2;
            order1.Approver  = employee1;
            order1.Number    = "123";
            order1.Status    = ExpenseReportStatus.Submitted;
            var order2 = new ExpenseReport();

            order2.Submitter = employee1;
            order2.Approver  = employee2;
            order2.Number    = "456";
            order2.Status    = ExpenseReportStatus.Draft;

            using (EfCoreContext dbContext = new StubbedDataContextFactory().GetContext())
            {
                dbContext.Add(employee1);
                dbContext.Add(employee2);
                dbContext.Add(order1);
                dbContext.Add(order2);
                dbContext.SaveChanges();
            }

            var specification = new ExpenseReportSpecificationQuery()
            {
                Status = ExpenseReportStatus.Submitted
            };

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();
            MultipleResult <ExpenseReport> result = bus.Send(specification);

            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(order1.Id));
        }
        public ActionResult Index()
        {
            var model = new ToDoModel();

            Employee currentUser = _session.GetCurrentUser();
            var submittedSpecification = new ExpenseReportSpecificationQuery
            {
                Approver = currentUser,
                Status = ExpenseReportStatus.Submitted
            };
            ExpenseReport[] submitted = _bus.Send(submittedSpecification).Results;
            model.Submitted = submitted;

            var approvedSpecification = new ExpenseReportSpecificationQuery
            {
                Approver = currentUser,
                Status = ExpenseReportStatus.Approved
            };
            ExpenseReport[] approved = _bus.Send(approvedSpecification).Results;
            model.Approved = approved;

            return PartialView(model);
        }
        public ActionResult Index(ExpenseReportSearchModel.SearchFilters filters)
        {
            var model = new ExpenseReportSearchModel();
            if (filters != null)
                model.Filters = filters;

            var submitter = _bus.Send(new EmployeeByUserNameQuery(model.Filters.Submitter)).Result;
            var approver = _bus.Send(new EmployeeByUserNameQuery(model.Filters.Approver)).Result;
            var status = !string.IsNullOrWhiteSpace(model.Filters.Status) ? ExpenseReportStatus.FromKey(model.Filters.Status) : null;

            var specification = new ExpenseReportSpecificationQuery
            {
                Approver = approver,
                Submitter = submitter,
                Status = status
            };

            ExpenseReport[] orders = _bus.Send(specification).Results;

            model.Results = orders;

            return View(model);
        }
        public void ShouldEagerFetchAssociations()
        {
            new DatabaseTester().Clean();

            var employee1 = new Employee("1", "1", "1", "1");
            var employee2 = new Employee("2", "2", "2", "2");
            var report    = new ExpenseReport();

            report.Submitter = employee1;
            report.Approver  = employee1;
            report.Number    = "123";
            report.ChangeStatus(employee2, DateTime.Now, ExpenseReportStatus.Draft, ExpenseReportStatus.Submitted);;

            using (EfCoreContext dbContext = new StubbedDataContextFactory().GetContext())
            {
                dbContext.Add(employee1);
                dbContext.Add(report);
                dbContext.SaveChanges();
            }

            var specification = new ExpenseReportSpecificationQuery()
            {
                Status = ExpenseReportStatus.Submitted
            };

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();
            MultipleResult <ExpenseReport> result = bus.Send(specification);

            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(report.Id));
            reports[0].Submitter.ShouldEqual(employee1);
            reports[0].Approver.ShouldEqual(employee1);
            reports[0].AuditEntries.ToArray()[0].Employee.ShouldEqual(employee2);
        }