public async ThreadingTask NeverReturnsDeletedTimeEntries()
            {
                var result = Enumerable
                             .Range(0, 20)
                             .Select(i =>
                {
                    var isDeleted = i % 2 == 0;
                    var timeEntry = Substitute.For <IThreadSafeTimeEntry>();
                    timeEntry.Id.Returns(i);
                    timeEntry.IsDeleted.Returns(isDeleted);
                    return(timeEntry);
                });

                DataSource
                .TimeEntries
                .GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >())
                .Returns(callInfo =>
                         Observable
                         .Return(result)
                         .Select(x => x.Where(callInfo.Arg <Func <IThreadSafeTimeEntry, bool> >())));

                var timeEntries = await InteractorFactory.GetAllNonDeletedTimeEntries().Execute()
                                  .Select(tes => tes.Where(x => x.Id > 10));

                timeEntries.Should().HaveCount(5);
            }
            private Gen <TimeEntriesLogViewModel> generatorForTimeEntriesLogViewModel(Func <int, bool> filter)
            {
                var now             = new DateTimeOffset(2017, 08, 13, 08, 01, 23, TimeSpan.Zero);
                var monthsGenerator = Gen.Choose(1, 12).Where(filter);
                var yearGenerator   = Gen.Choose(2007, now.Year);

                return(Arb.Default
                       .Array <DateTimeOffset>()
                       .Generator
                       .Select(dateTimes =>
                {
                    var viewModel = CreateViewModel();
                    var year = yearGenerator.Sample(0, 1).First();

                    var observable = dateTimes
                                     .Select(newDateWithGenerator(monthsGenerator, year))
                                     .Select(d => TimeEntry.Builder
                                             .Create(-1)
                                             .SetUserId(-2)
                                             .SetWorkspaceId(-3)
                                             .SetStart(d)
                                             .SetDescription("")
                                             .SetAt(now).Build())
                                     .Apply(Observable.Return);

                    InteractorFactory.GetAllNonDeletedTimeEntries().Execute().Returns(observable);

                    return viewModel;
                }));
            }
            protected TimeEntryDataSourceObservableTest()
            {
                var startTime = now.AddHours(-2);

                var observable = Enumerable.Range(1, InitialAmountOfTimeEntries)
                                 .Select(i =>
                                         new MockTimeEntry {
                    Id          = i,
                    Start       = startTime.AddHours(i * 2),
                    Duration    = (long)TimeSpan.FromHours(i * 2 + 2).TotalSeconds,
                    UserId      = 11,
                    WorkspaceId = 12,
                    Description = "",
                    At          = now,
                    TagIds      = new long[] { 1, 2, 3 },
                    Workspace   = new MockWorkspace {
                        IsGhost = false
                    }
                }
                                         )
                                 .Apply(Observable.Return);

                InteractorFactory.GetAllNonDeletedTimeEntries().Execute().Returns(observable);
                DataSource.TimeEntries.Created.Returns(TimeEntryCreatedSubject.AsObservable());
                DataSource.TimeEntries.Updated.Returns(TimeEntryUpdatedSubject.AsObservable());
                DataSource.TimeEntries.Deleted.Returns(TimeEntryDeletedSubject.AsObservable());
            }
Example #4
0
            public async Task ThrowsIfDataSourceThrows()
            {
                DataSource.TimeEntries.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >())
                .Returns(Observable.Throw <IEnumerable <IThreadSafeTimeEntry> >(new Exception()));

                Action tryGetAll = () => InteractorFactory.GetAllNonDeletedTimeEntries().Execute().Wait();

                tryGetAll.Should().Throw <Exception>();
            }
Example #5
0
            public async Task RemovesAllDeletedTimeEntries()
            {
                DataSource.TimeEntries.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >())
                .Returns(callInfo => Observable.Return(timeEntries.Where <IThreadSafeTimeEntry>(
                                                           callInfo.Arg <Func <IDatabaseTimeEntry, bool> >())));

                var finteredTimeEntries = await InteractorFactory.GetAllNonDeletedTimeEntries().Execute();

                finteredTimeEntries.Should().HaveCount(3);
                finteredTimeEntries.Select(te => te.IsDeleted).Should().BeEquivalentTo(new[] { false, false, false });
            }
            public async ThreadingTask RemovesTheTimeEntryIfItWasNotRemovedPreviously()
            {
                await ViewModel.Initialize();

                var timeEntryCollection = await InteractorFactory.GetAllNonDeletedTimeEntries().Execute().FirstAsync();

                var timeEntryToDelete = timeEntryCollection.First();

                TimeEntryDeletedSubject.OnNext(timeEntryToDelete.Id);

                ViewModel.TimeEntries.All(c => c.All(te => te.Id != timeEntryToDelete.Id)).Should().BeTrue();
                ViewModel.TimeEntries.Aggregate(0, (acc, te) => acc + te.Count).Should().Be(InitialAmountOfTimeEntries - 1);
            }
            protected void PrepareTimeEntry()
            {
                var timeEntry = Substitute.For <IThreadSafeTimeEntry>();

                timeEntry.Id.Returns(123);
                timeEntry.Start.Returns(DateTimeOffset.Now);
                timeEntry.Duration.Returns(100);
                InteractorFactory.GetAllNonDeletedTimeEntries().Execute()
                .Returns(Observable.Return(new[] { timeEntry }));
                DataSource
                .TimeEntries
                .Updated
                .Returns(Observable.Never <EntityUpdate <IThreadSafeTimeEntry> >());
            }
            public async ThreadingTask ReturnsTheSameValueAsTimeEntriesLogViewModel(
                int timeEntryCount)
            {
                var timeEntries = Enumerable
                                  .Range(0, timeEntryCount)
                                  .Select(createTimeEntry);

                InteractorFactory.GetAllNonDeletedTimeEntries().Execute()
                .Returns(Observable.Return(timeEntries));
                DataSource
                .TimeEntries
                .Updated
                .Returns(Observable.Never <EntityUpdate <IThreadSafeTimeEntry> >());
                await ViewModel.Initialize();

                ViewModel
                .IsWelcome
                .Should()
                .Be(ViewModel.TimeEntriesLogViewModel.IsWelcome);
            }
            protected TimeEntryDataSourceObservableTest()
            {
                var startTime = now.AddHours(-2);

                var observable = Enumerable.Range(1, InitialAmountOfTimeEntries)
                                 .Select(i => TimeEntry.Builder.Create(i))
                                 .Select(builder => builder
                                         .SetStart(startTime.AddHours(builder.Id * 2))
                                         .SetUserId(11)
                                         .SetWorkspaceId(12)
                                         .SetDescription("")
                                         .SetAt(now)
                                         .Build())
                                 .Select(te => te.With((long)TimeSpan.FromHours(te.Id * 2 + 2).TotalSeconds))
                                 .Apply(Observable.Return);

                InteractorFactory.GetAllNonDeletedTimeEntries().Execute().Returns(observable);
                DataSource.TimeEntries.Created.Returns(TimeEntryCreatedSubject.AsObservable());
                DataSource.TimeEntries.Updated.Returns(TimeEntryUpdatedSubject.AsObservable());
                DataSource.TimeEntries.Deleted.Returns(TimeEntryDeletedSubject.AsObservable());
            }