コード例 #1
0
            public async Task ReturnsSegmentsJustOnceWhenChangingDateRange()
            {
                var segments = new ChartSegment[2] {
                    new ChartSegment("Project 1", "Client 1", 50f, 10, 0, "ff0000"),
                    new ChartSegment("Project 2", "Client 2", 50f, 10, 0, "00ff00")
                };
                var projectsNotSyncedCount = 0;

                var currentDate = new DateTimeOffset(2018, 5, 23, 0, 0, 0, TimeSpan.Zero);
                var start       = new DateTimeOffset(2018, 5, 1, 0, 0, 0, TimeSpan.Zero);
                var end         = new DateTimeOffset(2018, 5, 7, 0, 0, 0, TimeSpan.Zero);

                TimeService.CurrentDateTime.Returns(currentDate);

                var delayed = Observable
                              .Return(new ProjectSummaryReport(segments, projectsNotSyncedCount))
                              .Delay(TimeSpan.FromMilliseconds(100));

                var instant = Observable
                              .Return(new ProjectSummaryReport(segments, projectsNotSyncedCount));

                ReportsProvider.GetProjectSummary(Arg.Any <long>(), Arg.Any <DateTimeOffset>(), Arg.Any <DateTimeOffset>())
                .Returns(delayed, instant);

                await Initialize();

                ViewModel.ChangeDateRangeCommand.Execute(
                    DateRangeParameter.WithDates(start, end));

                await delayed;

                ViewModel.Segments.Count.Should().Be(segments.Length);
            }
コード例 #2
0
        public void OnDateRangeChanged(DateRangeParameter dateRange)
        {
            var thisActionDateRange = GetDateRange();

            Selected = dateRange.StartDate.Date == thisActionDateRange.StartDate.Date &&
                       dateRange.EndDate.Date == thisActionDateRange.EndDate.Date;
        }
コード例 #3
0
        private void onDateRangeChanged(DateRangeParameter dateRange)
        {
            var anyShortcutIsSelected = ViewModel.QuickSelectShortcuts.Any(shortcut => shortcut.Selected);

            if (!anyShortcutIsSelected)
            {
                return;
            }

            var dateRangeStartDate = dateRange.StartDate;
            var monthToScroll      = ViewModel.Months.IndexOf(month => month.CalendarMonth.Month == dateRangeStartDate.Month);

            if (monthToScroll == pager.CurrentItem)
            {
                return;
            }

            var dateRangeStartDateIsContaintedInCurrentMonthView = ViewModel
                                                                   .Months[pager.CurrentItem]
                                                                   .Days.Any(day => day.DateTimeOffset == dateRangeStartDate);

            if (!dateRangeStartDateIsContaintedInCurrentMonthView || dateRangeStartDate.Month == dateRange.EndDate.Month)
            {
                pager.SetCurrentItem(monthToScroll, true);
            }
        }
コード例 #4
0
 private void changeDateRange(DateRangeParameter dateRange)
 {
     startDate = dateRange.StartDate;
     endDate   = dateRange.EndDate;
     updateCurrentDateRangeString();
     reportSubject.OnNext(Unit.Default);
 }
コード例 #5
0
        public override DateRangeParameter GetDateRange()
        {
            var yesterday = TimeService.CurrentDateTime.Date.AddDays(-1);

            return(DateRangeParameter
                   .WithDates(yesterday, yesterday)
                   .WithSource(ReportsSource.ShortcutYesterday));
        }
コード例 #6
0
        public override DateRangeParameter GetDateRange()
        {
            var today = TimeService.CurrentDateTime.Date;

            return(DateRangeParameter
                   .WithDates(today, today)
                   .WithSource(ReportsSource.ShortcutToday));
        }
コード例 #7
0
        public override DateRangeParameter GetDateRange()
        {
            var thisYear = TimeService.CurrentDateTime.Year;
            var start    = new DateTimeOffset(thisYear, 1, 1, 0, 0, 0, TimeSpan.Zero);
            var end      = start.AddYears(1).AddDays(-1);

            return(DateRangeParameter.WithDates(start, end));
        }
コード例 #8
0
        public void OnSelectedRangeChanged(DateRangeParameter selectedRange)
        {
            Selected = selectedRange != null && selectedRange.StartDate.Date <= dateTime.Date && selectedRange.EndDate.Date >= dateTime.Date;

            IsStartOfSelectedPeriod = selectedRange != null && selectedRange.StartDate.Date == dateTime.Date;

            IsEndOfSelectedPeriod = selectedRange != null && selectedRange.EndDate.Date == dateTime.Date;
        }
コード例 #9
0
        private void changeDateRange(DateRangeParameter newDateRange)
        {
            startOfSelection = null;

            highlightDateRange(newDateRange);

            selectedDateRangeSubject.OnNext(newDateRange);
        }
コード例 #10
0
        public override DateRangeParameter GetDateRange()
        {
            var now   = TimeService.CurrentDateTime.Date;
            var start = new DateTimeOffset(now.Year, now.Month, 1, 0, 0, 0, TimeSpan.Zero);
            var end   = start.AddMonths(1).AddDays(-1);

            return(DateRangeParameter.WithDates(start, end));
        }
コード例 #11
0
        public override DateRangeParameter GetDateRange()
        {
            var now        = TimeService.CurrentDateTime.Date;
            var difference = (now.DayOfWeek - beginningOfWeek.ToDayOfWeekEnum() + 7) % 7;
            var start      = now.AddDays(-(difference + 7));
            var end        = start.AddDays(6);

            return(DateRangeParameter.WithDates(start, end));
        }
コード例 #12
0
        public override DateRangeParameter GetDateRange()
        {
            var lastMonth = TimeService.CurrentDateTime.Date.AddMonths(-1);
            var start     = new DateTimeOffset(lastMonth.Year, lastMonth.Month, 1, 0, 0, 0, TimeSpan.Zero);
            var end       = start.AddMonths(1).AddDays(-1);

            return(DateRangeParameter
                   .WithDates(start, end)
                   .WithSource(ReportsSource.ShortcutLastMonth));
        }
コード例 #13
0
 private static bool ensureDateRangeIsCorrect(
     DateRangeParameter dateRange,
     CalendarDayViewModel expectedStart,
     CalendarDayViewModel expectedEnd)
 => dateRange.StartDate.Year == expectedStart.CalendarMonth.Year &&
 dateRange.StartDate.Month == expectedStart.CalendarMonth.Month &&
 dateRange.StartDate.Day == expectedStart.Day &&
 dateRange.EndDate.Year == expectedEnd.CalendarMonth.Year &&
 dateRange.EndDate.Month == expectedEnd.CalendarMonth.Month &&
 dateRange.EndDate.Day == expectedEnd.Day;
コード例 #14
0
        private void selectStartOfSelectionIfNeeded()
        {
            if (startOfSelection == null)
            {
                return;
            }

            var date      = startOfSelection.DateTimeOffset;
            var dateRange = DateRangeParameter.WithDates(date, date);

            changeDateRange(dateRange);
        }
コード例 #15
0
            public void ReturnsThisWeekWhenStartAndEndOfCurrentWeekAreSeleted(
                int currentYear, int currentMonth, int currentDay,
                int startYear, int startMonth, int startDay,
                int endYear, int endMonth, int endDay)
            {
                var currentDate = new DateTimeOffset(currentYear, currentMonth, currentDay, 0, 0, 0, TimeSpan.Zero);
                var start       = new DateTimeOffset(startYear, startMonth, startDay, 0, 0, 0, TimeSpan.Zero);
                var end         = new DateTimeOffset(endYear, endMonth, endDay, 0, 0, 0, TimeSpan.Zero);

                TimeService.CurrentDateTime.Returns(currentDate);
                ViewModel.ChangeDateRangeCommand.Execute(
                    DateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar));

                ViewModel.CurrentDateRangeString.Should().Be($"{Resources.ThisWeek} ▾");
            }
コード例 #16
0
        private void calendarDayTapped(CalendarDayViewModel tappedDay)
        {
            if (startOfSelection == null)
            {
                var date = tappedDay.DateTimeOffset;

                var dateRange = DateRangeParameter.WithDates(date, date);
                startOfSelection = tappedDay;
                highlightDateRange(dateRange);
            }
            else
            {
                var startDate = startOfSelection.DateTimeOffset;
                var endDate   = tappedDay.DateTimeOffset;

                var dateRange = DateRangeParameter.WithDates(startDate, endDate);
                startOfSelection = null;
                changeDateRange(dateRange);
            }
        }
コード例 #17
0
            public async Task ReturnsSelectedDateRangeAsStringIfTheSelectedPeriodIsNotTheCurrentWeek(
                DateTimeOffset start,
                DateTimeOffset end,
                DateFormat dateFormat,
                string expectedResult)
            {
                TimeService.CurrentDateTime.Returns(DateTimeOffset.UtcNow);
                var preferences = Substitute.For <IThreadSafePreferences>();

                preferences.DateFormat.Returns(dateFormat);
                var preferencesSubject = new Subject <IThreadSafePreferences>();

                DataSource.Preferences.Current.Returns(preferencesSubject.AsObservable());
                await ViewModel.Initialize();

                preferencesSubject.OnNext(preferences);

                ViewModel.ChangeDateRangeCommand.Execute(
                    DateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar));

                ViewModel.CurrentDateRangeString.Should().Be(expectedResult);
            }
コード例 #18
0
            public void SelectingAnyDateRangeDoesNotMakeTheAppCrash(DateTimeOffset a, DateTimeOffset b, DateTimeOffset c)
            {
                var dates = new[] { a, b, c };

                Array.Sort(dates);
                var start = dates[0];
                var now   = dates[1];
                var end   = dates[2];

                TimeService.CurrentDateTime.Returns(now);
                var selectedRange  = DateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar);
                var customShortcut = new CustomShortcut(selectedRange, TimeService);

                // in this property test it is not possible to use the default ViewModel,
                // because we have to reset it in each iteration of the test
                var viewModel = CreateViewModel();

                viewModel.Prepare();
                viewModel.Initialize().Wait();

                Action usingShortcut = () => viewModel.QuickSelectCommand.Execute(customShortcut);

                usingShortcut.Should().NotThrow();
            }
コード例 #19
0
 private void highlightDateRange(DateRangeParameter dateRange)
 {
     Months.ForEach(month => month.Days.ForEach(day => day.OnSelectedRangeChanged(dateRange)));
 }
コード例 #20
0
        public override DateRangeParameter GetDateRange()
        {
            var today = TimeService.CurrentDateTime.Date;

            return(DateRangeParameter.WithDates(today, today));
        }
コード例 #21
0
 public CustomShortcut(DateRangeParameter range, ITimeService timeService) : base(timeService, "")
 {
     this.range = range;
 }