Esempio n. 1
0
            public async Task ReturnsTheRowCountOfCurrentlyShownMonth(
                int currentYear,
                int currentMonth,
                int currentPage,
                BeginningOfWeek beginningOfWeek,
                int expectedRowCount)
            {
                var observer = TestScheduler.CreateObserver <int>();
                var now      = new DateTimeOffset(currentYear, currentMonth, 1, 0, 0, 0, TimeSpan.Zero);

                TimeService.MidnightObservable.Returns(Observable.Never <DateTimeOffset>());
                TimeService.CurrentDateTime.Returns(now);
                var user = Substitute.For <IThreadSafeUser>();

                user.BeginningOfWeek.Returns(beginningOfWeek);
                DataSource.User.Current.Returns(Observable.Return(user));

                ViewModel.Prepare();
                await ViewModel.Initialize();

                ViewModel.RowsInCurrentMonthObservable
                .Subscribe(observer);

                ViewModel.SetCurrentPage(currentPage);
                TestScheduler.Start();

                var rowsInCurrentMonth = observer.Values().Last();

                rowsInCurrentMonth.Should().Be(expectedRowCount);
            }
Esempio n. 2
0
            public void AlwaysIsAMultipleOf7(
                NonNegativeInt year,
                NonNegativeInt month,
                BeginningOfWeek beginingOfWeek)
            {
                prepare(year.Get % 9999 + 2, month.Get % 12 + 1, beginingOfWeek);

                (viewModel.Days.Count % 7).Should().Be(0);
            }
Esempio n. 3
0
        private IReadOnlyList <string> mapDayHeaders(BeginningOfWeek newBeginningOfWeek)
        {
            var updatedDayHeaders = new List <string>();

            for (var i = 0; i < dayHeaders.Length; i++)
            {
                updatedDayHeaders.Add(dayHeaderFor(i, newBeginningOfWeek));
            }

            return(updatedDayHeaders.AsReadOnly());
        }
            public void InitializesTheBeginningOfWeekProperty(BeginningOfWeek beginningOfWeek)
            {
                var user = Substitute.For <IThreadSafeUser>();

                user.BeginningOfWeek.Returns(beginningOfWeek);
                DataSource.User.Current.Returns(Observable.Return(user));
                TimeService.CurrentDateTime.Returns(new DateTimeOffset(2018, 4, 20, 16, 20, 0, TimeSpan.Zero));
                ViewModel.Prepare();
                ViewModel.Initialize().Wait();

                ViewModel.BeginningOfWeek.Should().Be(beginningOfWeek);
            }
Esempio n. 5
0
        public override async Task Initialize()
        {
            await base.Initialize();

            var now = timeService.CurrentDateTime;

            initialMonth = new CalendarMonth(now.Year, now.Month).AddMonths(-(MonthsToShow - 1));

            beginningOfWeekObservable = dataSource.User.Current
                                        .Select(user => user.BeginningOfWeek)
                                        .DistinctUntilChanged();

            DayHeadersObservable = beginningOfWeekObservable.Select(mapDayHeaders);

            ReloadObservable = reloadSubject.AsObservable();

            MonthsObservable = beginningOfWeekObservable.CombineLatest(
                timeService.MidnightObservable.StartWith(timeService.CurrentDateTime),
                (beginningOfWeek, today) =>
            {
                var monthIterator = new CalendarMonth(today.Year, today.Month).AddMonths(-(MonthsToShow - 1));
                var months        = new List <ReportsCalendarPageViewModel>();
                for (int i = 0; i < MonthsToShow; i++, monthIterator = monthIterator.Next())
                {
                    months.Add(new ReportsCalendarPageViewModel(monthIterator, beginningOfWeek, today));
                }
                return(months);
            });

            RowsInCurrentMonthObservable = MonthsObservable.CombineLatest(
                CurrentPageObservable.DistinctUntilChanged(),
                (months, page) => months[page].RowCount)
                                           .Select(CommonFunctions.Identity);

            CurrentMonthObservable = monthSubject
                                     .AsObservable()
                                     .StartWith(MonthsToShow - 1)
                                     .Select(convertPageIndexToCalendarMonth)
                                     .Share();

            QuickSelectShortcutsObservable = beginningOfWeekObservable.Select(createQuickSelectShortcuts);

            beginningOfWeek = (await dataSource.User.Current.FirstAsync()).BeginningOfWeek;

            QuickSelectShortcuts = createQuickSelectShortcuts(beginningOfWeek);

            SelectPeriod(reportPeriod);

            isInitialized    = true;
            viewAppearedOnce = false;
        }
Esempio n. 6
0
        public ReportsCalendarPageViewModel(
            CalendarMonth calendarMonth, BeginningOfWeek beginningOfWeek, DateTimeOffset today)
        {
            this.beginningOfWeek = beginningOfWeek;
            this.today           = today.RoundDownToLocalDate();

            CalendarMonth = calendarMonth;

            addDaysFromPreviousMonth();
            addDaysFromCurrentMonth();
            addDaysFromNextMonth();

            RowCount = Days.Count / 7;
        }
Esempio n. 7
0
            public void MarksTheCurrentDayAndNoOtherDayAsToday(
                int year,
                int month,
                int today,
                BeginningOfWeek beginningOfWeek)
            {
                year  = Math.Abs(year % 25) + 2000;
                month = Math.Abs(month % 12) + 1;
                today = Math.Abs(today % DateTime.DaysInMonth(year, month)) + 1;
                prepare(year, month, beginningOfWeek, new DateTimeOffset(year, month, today, 11, 22, 33, TimeSpan.Zero));

                viewModel.Days.Should().OnlyContain(day =>
                                                    ((day.CalendarMonth.Month != month || day.Day != today) && day.IsToday == false) ||
                                                    (day.CalendarMonth.Month == month && day.Day == today && day.IsToday));
            }
Esempio n. 8
0
            public void ConainsAllDaysFromCurrentMonthInTheMiddle(
                int year,
                int month,
                BeginningOfWeek beginningOfWeek,
                int daysFromLastMonth)
            {
                prepare(year, month, beginningOfWeek);

                viewModel
                .Days
                .Skip(daysFromLastMonth)
                .Take(calendarMonth.DaysInMonth)
                .Should()
                .OnlyContain(day => day.IsInCurrentMonth);
            }
Esempio n. 9
0
                public async Task EmitsCorrectStringWhenDateRangeIsSelected(BeginningOfWeek beginningOfWeek, DateTimeOffset startDate, DateTimeOffset endDate, string result)
                {
                    var user = new MockUser {
                        BeginningOfWeek = beginningOfWeek
                    };

                    DataSource.User.Current.Returns(Observable.Return(user));
                    var observer = TestScheduler.CreateObserver <string>();
                    var now      = DateTimeOffset.Now;

                    TimeService.CurrentDateTime.Returns(now);
                    ViewModel.CurrentDateRange.Subscribe(observer);
                    await ViewModel.Initialize();

                    await ViewModel.LoadReport(0, startDate, endDate, ReportsSource.Calendar);

                    TestScheduler.Start();
                    observer.LastEmittedValue().Should().Be($"{result} ▾");
                }
Esempio n. 10
0
                public async Task EmitsThisWeekWhenCurrentWeekIsSelected(BeginningOfWeek beginningOfWeek)
                {
                    var user = new MockUser {
                        BeginningOfWeek = beginningOfWeek
                    };

                    DataSource.User.Current.Returns(Observable.Return(user));
                    var observer = TestScheduler.CreateObserver <string>();
                    var now      = DateTimeOffset.Now;

                    TimeService.CurrentDateTime.Returns(now);
                    ViewModel.CurrentDateRangeStringObservable.Subscribe(observer);
                    await ViewModel.Initialize();

                    ViewModel.CalendarViewModel.SelectPeriod(Core.Services.ReportPeriod.ThisWeek);

                    TestScheduler.Start();
                    observer.LastEmittedValue().Should().Be($"{Resources.ThisWeek} ▾");
                }
            public async Task CorrespondsToSettings(BeginningOfWeek beginningOfWeek)
            {
                System.Diagnostics.Debug.WriteLine(beginningOfWeek);
                var now       = new DateTimeOffset(2019, 1, 1, 10, 12, 14, TimeSpan.Zero);
                var start     = now.AddHours(-2);
                var parameter = DurationParameter.WithStartAndDuration(start, null);

                TimeService.CurrentDateTime.Returns(now);
                var user = Substitute.For <IThreadSafeUser>();

                user.BeginningOfWeek.Returns(beginningOfWeek);
                user.Id.Returns(123456);
                DataSource.User.Current.Returns(Observable.Return(user));
                var viewModel = CreateViewModel();

                await viewModel.Initialize(new EditDurationParameters(parameter));

                TestScheduler.Start();
                viewModel.BeginningOfWeek.Should().Be(beginningOfWeek);
            }
Esempio n. 12
0
            public void ContainsFewDaysFromPreviousMonthAtTheBeginning(
                int year,
                int month,
                BeginningOfWeek beginningOfWeek,
                int expectedDayCount)
            {
                prepare(year, month, beginningOfWeek);

                if (expectedDayCount == 0)
                {
                    viewModel.Days.First().IsInCurrentMonth.Should().BeTrue();
                }
                else
                {
                    viewModel
                    .Days
                    .Take(expectedDayCount)
                    .Should()
                    .OnlyContain(day => !day.IsInCurrentMonth);
                }
            }
            public async Task ReturnsTheRowCountOfCurrentlyShownMonth(
                int currentYear,
                int currentMonth,
                int currentPage,
                BeginningOfWeek beginningOfWeek,
                int expectedRowCount)
            {
                var now = new DateTimeOffset(currentYear, currentMonth, 1, 0, 0, 0, TimeSpan.Zero);

                TimeService.CurrentDateTime.Returns(now);
                var user = Substitute.For <IThreadSafeUser>();

                user.BeginningOfWeek.Returns(beginningOfWeek);
                DataSource.User.Current.Returns(Observable.Return(user));
                ViewModel.Prepare();
                await ViewModel.Initialize();

                ViewModel.CurrentPage = currentPage;

                ViewModel.RowsInCurrentMonth.Should().Be(expectedRowCount);
            }
Esempio n. 14
0
            public void ContainsFewDaysFromNextMonthAtTheEnd(
                int year,
                int month,
                BeginningOfWeek beginningOfWeek,
                int daysFromLastMonth,
                int expectedDayCount)
            {
                prepare(year, month, beginningOfWeek);
                var daysFromNextMonth = viewModel
                                        .Days
                                        .Skip(daysFromLastMonth)
                                        .Skip(calendarMonth.DaysInMonth);

                if (expectedDayCount == 0)
                {
                    daysFromNextMonth.Should().BeEmpty();
                }
                else
                {
                    daysFromNextMonth.Should().OnlyContain(day => !day.IsInCurrentMonth);
                }
            }
Esempio n. 15
0
 public static SelectTimeParameters CreateFromOrigin(Origin origin, BeginningOfWeek beginningOfWeek, DateTimeOffset start, DateTimeOffset?stop = null)
 {
     var allowedParameters = new Dictionary <Origin, (int, bool)>
     {
            protected SelectTimeParameters CreateParameter(DateTimeOffset start, DateTimeOffset?stop, BeginningOfWeek beginningOfWeek = BeginningOfWeek.Sunday)
            {
                var dateFormat = DateFormat.FromLocalizedDateFormat("MM.DD.YYYY");
                var timeFormat = TimeFormat.FromLocalizedTimeFormat("H:mm");

                return(SelectTimeParameters
                       .CreateFromOrigin(StartTime, beginningOfWeek, start, stop)
                       .WithFormats(dateFormat, timeFormat));
            }
Esempio n. 17
0
        public void LocalizesToEnglishProperly(BeginningOfWeek beginningOfWeek, string translation)
        {
            CultureInfo.CurrentCulture = new CultureInfo("en");

            beginningOfWeek.ToLocalizedString().Should().Be(translation);
        }
Esempio n. 18
0
        public static DateTimeOffset BeginningOfWeek(this DateTimeOffset time, BeginningOfWeek beginningOfWeek)
        {
            int diff = (7 + ((BeginningOfWeek)time.DayOfWeek - beginningOfWeek)) % 7;

            return(time.AddDays(-1 * diff).Date);
        }
Esempio n. 19
0
 public void ReturnsTheCorrectDate(
     DateTimeOffset now, BeginningOfWeek beginningOfWeek, DateTimeOffset expectedResult)
 {
     now.BeginningOfWeek(beginningOfWeek).Should().Be(expectedResult);
 }
Esempio n. 20
0
 private void prepare(
     int year, int month, BeginningOfWeek beginningOfWeek, DateTimeOffset?today = null)
 {
     calendarMonth = new CalendarMonth(year, month);
     viewModel     = new CalendarPageViewModel(calendarMonth, beginningOfWeek, today ?? DateTimeOffset.Now);
 }
Esempio n. 21
0
 public ReportsCalendarLastWeekQuickSelectShortcut(
     ITimeService timeService, BeginningOfWeek beginningOfWeek)
     : base(timeService, Resources.LastWeek, ReportPeriod.LastWeek)
 {
     this.beginningOfWeek = beginningOfWeek;
 }
Esempio n. 22
0
        public void CreateTodayString()
        {
            DateTime BeginningOfWeek;

            // Save the EST Time.
            if (DateTime.Now.IsDaylightSavingTime())
            {
                todayEST = todayUTC.Subtract(TimeSpan.FromHours(4));
            }

            else
            {
                todayEST = todayUTC.Subtract(TimeSpan.FromHours(5));
            }


            // Get the index of the current Weekday
            string weekday         = todayEST.DayOfWeek.ToString();
            int    DaysSinceMonday = -1;

            for (int i = 0; i < Enum.GetNames(typeof(Days)).Length; i++)
            {
                if (Enum.GetNames(typeof(Days))[i].Contains(weekday))
                {
                    DaysSinceMonday = i;
                }
            }

            BeginningOfWeek = todayEST.Subtract(TimeSpan.FromDays(DaysSinceMonday));

            WeekOfString = "Week of " + BeginningOfWeek.DayOfWeek.ToString() + ", " + BeginningOfWeek.ToString(@"MM\/dd\/yyyy") + " (EST)";
        }
 public static string ToLocalizedString(this BeginningOfWeek beginningOfWeek)
 => CultureInfo.CurrentCulture.DateTimeFormat.DayNames[(int)beginningOfWeek];
Esempio n. 24
0
 private void onBeginningOfWeekChanged(BeginningOfWeek beginningOfWeek)
 {
     this.beginningOfWeek = beginningOfWeek;
     updateCurrentDateRangeString();
 }
 public CalendarThisWeekQuickSelectShortcut
     (ITimeService timeService, BeginningOfWeek beginningOfWeek)
     : base(timeService, Resources.ThisWeek)
 {
     this.beginningOfWeek = beginningOfWeek;
 }
 public SelectableBeginningOfWeekViewModel(BeginningOfWeek beginningOfWeek, bool selected)
 {
     BeginningOfWeek = beginningOfWeek;
     Selected        = selected;
 }
Esempio n. 27
0
 private List <ReportsCalendarBaseQuickSelectShortcut> createQuickSelectShortcuts(BeginningOfWeek beginningOfWeek)
 => new List <ReportsCalendarBaseQuickSelectShortcut>
 {
     new ReportsCalendarTodayQuickSelectShortcut(timeService),
     new ReportsCalendarYesterdayQuickSelectShortcut(timeService),
     new ReportsCalendarThisWeekQuickSelectShortcut(timeService, beginningOfWeek),
     new ReportsCalendarLastWeekQuickSelectShortcut(timeService, beginningOfWeek),
     new ReportsCalendarThisMonthQuickSelectShortcut(timeService),
     new ReportsCalendarLastMonthQuickSelectShortcut(timeService),
     new ReportsCalendarThisYearQuickSelectShortcut(timeService),
     new ReportsCalendarLastYearQuickSelectShortcut(timeService)
 };
Esempio n. 28
0
 private string dayHeaderFor(int index, BeginningOfWeek newBeginningOfWeek)
 => dayHeaders[(index + (int)newBeginningOfWeek + 7) % 7];
Esempio n. 29
0
 public Builder SetBeginningOfWeek(BeginningOfWeek beginningOfWeek)
 {
     BeginningOfWeek = beginningOfWeek;
     return(this);
 }
Esempio n. 30
0
 public static DayOfWeek ToDayOfWeekEnum(this BeginningOfWeek self)
 => (DayOfWeek)self;