BinaryStudio.ClientManager.WebUi.Controllers.InquiriesController.Month C# (CSharp) 메소드

Month() 공개 메소드

public Month ( ) : System.Web.Mvc.ViewResult
리턴 System.Web.Mvc.ViewResult
        public ViewResult Month()
        {
            var today = Clock.Now.Date;
            var begin = today.GetStartOfMonth();
            var end = today.GetEndOfMonth().AddDays(1);

            var monthInquiries = repository
                .Query<Inquiry>(x => x.Client)
                .Where(x => x.ReferenceDate >= begin && x.ReferenceDate < end)
                .OrderBy(x => x.ReferenceDate)
                .ToList();

            monthInquiries.RemoveAll(x => x.ReferenceDate.Value.IsWeekend());

            var start = begin.IsWeekend() ?
                begin.AddDays(7).GetStartOfBusinessWeek() :
                begin.GetStartOfBusinessWeek();

            var firstWeek = start.GetWeekNumber();
            var lastWeek = end.GetWeekNumber();

            return View("Month", new MonthViewModel
            {
                Name = today.ToString("MMMM"),
                MaxInquiriesWithoutToggling = 3,
                Weeks =
                    from week in Enumerable.Range(0, lastWeek - firstWeek + 1)
                    let weekStart = start.AddDays(week * 7)
                    select new MonthItemViewModel
                    {
                        Days = from day in Enumerable.Range(0, 5)
                               let date = weekStart.AddDays(day)
                               select new WeekItemViewModel
                               {
                                   Name = date.ToString("ddd"),
                                   Date = date,
                                   Inquiries = monthInquiries
                                        .Where(x => x.ReferenceDate.Value.Date == date)
                                        .OrderBy(x => x.ReferenceDate)
                                        .Select(x => new InquiryViewModel
                                        {
                                            Id = x.Id,
                                            Name = x.Client.FullName,
                                            Subject = x.Subject,
                                        })
                                }

                    }
            });
        }

Usage Example

        public void Should_ReturnListOfInquiriesForCurrentMonth_WhenMonthRequested(int month)
        {
            // arrange
            Clock.FreezedTime = new DateTime(Clock.Now.Year, month, 10);
            var mock = new Mock<IRepository>();
            mock.Setup(x => x.Query<Inquiry>(z => z.Client)).Returns(inquiries.AsQueryable());

            // act
            var inquiriesController = new InquiriesController(mock.Object);
            var viewResult = (MonthViewModel)inquiriesController.Month().Model;

            // assert
            Assert.That(viewResult.Weeks
                .All(x => x.Days
                    .Where(y => y.Inquiries.Any())
                    .All(z => z.Date.Month == month)));
        }