public async Task ReturnsATickingObservable() { DataSource.TimeEntries.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >(), Arg.Any <bool>()) .Returns(wherePredicateApplies(new[] { createMock(duration: 1), createMock(duration: 2), createMock(duration: null) })); var observer = Substitute.For <IObserver <TimeSpan> >(); var interactor = new ObserveTimeTrackedTodayInteractor(timeService, DataSource.TimeEntries); interactor.Execute().Subscribe(observer); currentDateTimeSubject.OnNext(now.AddSeconds(1)); currentDateTimeSubject.OnNext(now.AddSeconds(2)); currentDateTimeSubject.OnNext(now.AddSeconds(3)); Received.InOrder(() => { observer.OnNext(Arg.Is(TimeSpan.FromSeconds(3))); observer.OnNext(Arg.Is(TimeSpan.FromSeconds(4))); observer.OnNext(Arg.Is(TimeSpan.FromSeconds(5))); observer.OnNext(Arg.Is(TimeSpan.FromSeconds(6))); }); }
private void updateRunningTimeEntryAfterThreeSeconds( IList <IThreadSafeTimeEntry> timeEntries, IList <IThreadSafeTimeEntry> updatedTimeEntries, ISubject <Unit> update, IObserver <TimeSpan> observer) { var interactor = new ObserveTimeTrackedTodayInteractor(timeService, DataSource.TimeEntries); DataSource.TimeEntries.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >(), Arg.Any <bool>()) .Returns(wherePredicateApplies(timeEntries)); interactor.Execute().Subscribe(observer); currentDateTimeSubject.OnNext(now.AddSeconds(1)); currentDateTimeSubject.OnNext(now.AddSeconds(2)); currentDateTimeSubject.OnNext(now.AddSeconds(3)); DataSource.TimeEntries.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >(), Arg.Any <bool>()) .Returns(wherePredicateApplies(updatedTimeEntries)); update.OnNext(Unit.Default); currentDateTimeSubject.OnNext(now.AddSeconds(4)); currentDateTimeSubject.OnNext(now.AddSeconds(5)); currentDateTimeSubject.OnNext(now.AddSeconds(6)); }
public WhenThereIsNoRunningTimeEntry() { DataSource.TimeEntries.ItemsChanged.Returns(timeEntryChange); TimeService.MidnightObservable.Returns(midnight.Select(_ => now)); TimeService.SignificantTimeChangeObservable.Returns(significantTimeChange); TimeService.CurrentDateTime.Returns(now); interactor = new ObserveTimeTrackedTodayInteractor(TimeService, DataSource.TimeEntries); }
public WhenThereIsNoRunningTimeEntry() { DataSource.TimeEntries.Created.Returns(timeEntryChange.Select(_ => new MockTimeEntry())); DataSource.TimeEntries.Updated.Returns(Observable.Never <EntityUpdate <IThreadSafeTimeEntry> >()); DataSource.TimeEntries.Deleted.Returns(Observable.Never <long>()); TimeService.MidnightObservable.Returns(midnight.Select(_ => now)); TimeService.SignificantTimeChangeObservable.Returns(significantTimeChange); TimeService.CurrentDateTime.Returns(now); interactor = new ObserveTimeTrackedTodayInteractor(TimeService, DataSource.TimeEntries); }
public async Task ReturnsATickingObservable() { var currentDateTimeSubject = new Subject <DateTimeOffset>(); var timeService = Substitute.For <ITimeService>(); timeService.CurrentDateTimeObservable.Returns(currentDateTimeSubject); timeService.CurrentDateTime.Returns(now); timeService.MidnightObservable.Returns(Observable.Never <DateTimeOffset>()); timeService.SignificantTimeChangeObservable.Returns(Observable.Never <Unit>()); currentDateTimeSubject.Subscribe(currentTime => timeService.CurrentDateTime.Returns(currentTime)); var timeEntries = new[] { new MockTimeEntry { Start = now.AddDays(-1), Duration = 1 }, new MockTimeEntry { Start = now, Duration = 2 }, new MockTimeEntry { Start = now, Duration = 3 }, new MockTimeEntry { Start = now, Duration = null }, new MockTimeEntry { Start = now.AddDays(1), Duration = 4 } }; var timeEntriesSource = Substitute.For <ITimeEntriesSource>(); timeEntriesSource.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >()) .Returns(wherePredicateApplies(timeEntries)); timeEntriesSource.Created.Returns(Observable.Never <IThreadSafeTimeEntry>()); timeEntriesSource.Updated.Returns(Observable.Never <EntityUpdate <IThreadSafeTimeEntry> >()); timeEntriesSource.Deleted.Returns(Observable.Never <long>()); var observer = Substitute.For <IObserver <TimeSpan> >(); var interactor = new ObserveTimeTrackedTodayInteractor(timeService, timeEntriesSource); interactor.Execute().Subscribe(observer); currentDateTimeSubject.OnNext(now.AddSeconds(1)); currentDateTimeSubject.OnNext(now.AddSeconds(2)); currentDateTimeSubject.OnNext(now.AddSeconds(3)); Received.InOrder(() => { observer.OnNext(Arg.Is(TimeSpan.FromSeconds(5))); observer.OnNext(Arg.Is(TimeSpan.FromSeconds(6))); observer.OnNext(Arg.Is(TimeSpan.FromSeconds(7))); observer.OnNext(Arg.Is(TimeSpan.FromSeconds(8))); }); }