示例#1
0
        public async Task PopulateStatsAsync_OddLoggedDays_ComputesCorrectMedian()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var service = new MockTrackerLogService();

            service.LoggedDays.Add(new LoggedDay {
                Date = new DateTime(2002, 1, 1)
            });
            service.LoggedDays.Add(new LoggedDay {
                Date = new DateTime(2002, 1, 1)
            });
            service.LoggedDays.Add(new LoggedDay {
                Date = new DateTime(2001, 1, 1)
            });
            service.LoggedDays.Add(new LoggedDay {
                Date = new DateTime(2000, 1, 1)
            });
            service.LoggedDays.Add(new LoggedDay {
                Date = new DateTime(2000, 1, 1)
            });
            var vm = new TrackerLogViewModel(tracker, service, new MockSettingsViewModel());
            await vm.PopulateAllDayGroupsAsync();

            // act
            await vm.PopulateStatsAsync();

            // assert
            Assert.Equal(1, vm.LoggedDayStats.Median);
        }
示例#2
0
        public EditTrackerLogPage(Tracker tracker) : this()
        {
            Title = $"Editing {tracker.Name}";

            BindingContext = _viewModel = new TrackerLogViewModel(tracker,
                                                                  logService: App.DependencyContainer.GetInstance <ITrackerLogService>(),
                                                                  settingsViewModel: App.DependencyContainer.GetInstance <ISettingsViewModel>());
        }
        public TrackerLogPage(Tracker tracker) : this()
        {
            _tracker = tracker;
            Title    = tracker.Name;

            BindingContext = _viewModel = new TrackerLogViewModel(tracker,
                                                                  logService: App.DependencyContainer.GetInstance <ITrackerLogService>(),
                                                                  settingsViewModel: App.DependencyContainer.GetInstance <ISettingsViewModel>());

            SortOptionPicker.SelectedIndex         = 0;
            SortOptionPicker.SelectedIndexChanged += OnSortChange;
        }
示例#4
0
        public async Task PopulateStatsAsync_ServiceFailure_DoesNotComputeStats()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var vm = new TrackerLogViewModel(tracker, new FailingTrackerLogService(), new MockSettingsViewModel());

            // act
            await vm.PopulateStatsAsync();

            // assert
            Assert.Null(vm.LoggedDayStats);
        }
示例#5
0
        public async Task LogDayAsync_AddsToAllDayGroups()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var vm = new TrackerLogViewModel(tracker, new MockTrackerLogService(), new MockSettingsViewModel());

            // act
            await vm.LogDayAsync();

            // assert
            Assert.Single(vm.AllDayGroups, group => group.Date == vm.DateToLog);
        }
示例#6
0
        public async Task DeleteLoggedDayAsync_NullDay_DoesNothing()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var vm = new TrackerLogViewModel(tracker, new MockTrackerLogService(), new MockSettingsViewModel());

            vm.AllDays.Add(null);

            // act
            await vm.DeleteLoggedDayAsync(null);

            // assert
            Assert.Single(vm.AllDays, expected: null);
        }
示例#7
0
        public async Task PopulateStatsAsync_NoLoggedDays_DoesNotComputeStats()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var vm = new TrackerLogViewModel(tracker, new MockTrackerLogService(), new MockSettingsViewModel());

            // act
            await vm.PopulateStatsAsync();

            // assert
            Assert.Equal(
                JsonConvert.SerializeObject(new LoggedDayStats()),
                JsonConvert.SerializeObject(vm.LoggedDayStats));
        }
示例#8
0
        public async Task LogDayAsync_ServiceFailure_SendsMessage()
        {
            // arrange
            var tracker = new Tracker();
            var vm      = new TrackerLogViewModel(tracker, new FailingTrackerLogService(), new MockSettingsViewModel());

            bool messageSent = false;

            MessagingCenter.Subscribe <TrackerLogViewModel>(this, TrackerLogViewModel.DatabaseErrorMessage,
                                                            sender => messageSent = true);

            // act
            await vm.LogDayAsync();

            // assert
            Assert.True(messageSent);
        }
示例#9
0
        public async Task PopulateStatsAsync_NullAllDayGroups_DoesNotComputeStats()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var vm = new TrackerLogViewModel(tracker, new MockTrackerLogService(), new MockSettingsViewModel())
            {
                AllDayGroups = null
            };

            // act
            await vm.PopulateStatsAsync();

            // assert
            Assert.Null(vm.LoggedDayStats);
        }
示例#10
0
        public async Task PopulateAllDayGroupsAsync_ServiceFailure_DoesNotChangeState()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var group = new LoggedDayGroup {
                Date = DateTime.Now.Date, Count = 2
            };
            var vm = new TrackerLogViewModel(tracker, new FailingTrackerLogService(), new MockSettingsViewModel());

            vm.AllDayGroups.Add(group);

            // act
            await vm.PopulateAllDayGroupsAsync();

            // assert
            Assert.Single(vm.AllDayGroups, expected: group);
        }
示例#11
0
        public async Task PopulateAllDaysAsync_ServiceFailure_DoesNotChangeState()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var day = new LoggedDay {
                Id = 0, TrackerId = 0
            };
            var vm = new TrackerLogViewModel(tracker, new FailingTrackerLogService(), new MockSettingsViewModel());

            vm.AllDays.Add(day);

            // act
            await vm.PopulateAllDaysAsync();

            // assert
            Assert.Single(vm.AllDays, expected: day);
        }
示例#12
0
        public async Task DeleteLoggedDayAsync_ExistingDay_DeletesDay()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var day = new LoggedDay {
                Id = 0, TrackerId = 0
            };
            var service = new MockTrackerLogService();
            var vm      = new TrackerLogViewModel(tracker, service, new MockSettingsViewModel());

            service.LoggedDays.Add(day);
            vm.AllDays.Add(day);

            // act
            await vm.DeleteLoggedDayAsync(day);

            // assert
            Assert.Empty(vm.AllDays);
            Assert.Empty(service.LoggedDays);
        }
示例#13
0
        public async Task DeleteLoggedDayAsync_ServiceFailure_SendsMessageWithDay()
        {
            // arrange
            var tracker = new Tracker {
                Id = 0
            };
            var day = new LoggedDay {
                Id = 0, TrackerId = 0
            };
            var vm = new TrackerLogViewModel(tracker, new FailingTrackerLogService(), new MockSettingsViewModel());

            vm.AllDays.Add(day);

            LoggedDay sentDay = null;

            MessagingCenter.Subscribe <TrackerLogViewModel, LoggedDay>(this, nameof(vm.DeleteLoggedDayCommand),
                                                                       (sender, loggedDay) => sentDay = loggedDay);

            // act
            await vm.DeleteLoggedDayAsync(day);

            // assert
            Assert.Equal(day, sentDay);
        }
 public TrackerStatsPage(Tracker tracker, TrackerLogViewModel trackerLogViewModel) : this()
 {
     Title          = $"{tracker.Name} stats";
     BindingContext = _viewModel = trackerLogViewModel;
 }