예제 #1
0
            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);
            }
예제 #4
0
            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);
            }
예제 #5
0
            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)));
                });
            }