コード例 #1
0
            public async ThreadingTask EmitsObservableEventsForTheNewRunningTimeEntryAndTheStoppedTimeEntry()
            {
                var durationAfterStopping = 100;
                var updatedObserver       = TestScheduler.CreateObserver <EntityUpdate <IThreadSafeTimeEntry> >();
                var createdObserver       = TestScheduler.CreateObserver <IThreadSafeTimeEntry>();
                var runningTimeEntry      = new MockTimeEntry {
                    Id = 1, Duration = null
                };
                var newTimeEntry = new MockTimeEntry {
                    Id = -2, Duration = null
                };

                Repository.GetAll(Arg.Any <Func <IDatabaseTimeEntry, bool> >())
                .Returns(Observable.Return(new IDatabaseTimeEntry[] { runningTimeEntry }));
                Repository.BatchUpdate(
                    Arg.Any <IEnumerable <(long, IDatabaseTimeEntry)> >(),
                    Arg.Any <Func <IDatabaseTimeEntry, IDatabaseTimeEntry, ConflictResolutionMode> >(),
                    Arg.Any <IRivalsResolver <IDatabaseTimeEntry> >())
                .Returns(Observable.Return(new IConflictResolutionResult <IDatabaseTimeEntry>[]
                {
                    new UpdateResult <IDatabaseTimeEntry>(runningTimeEntry.Id, runningTimeEntry.With(durationAfterStopping)),
                    new CreateResult <IDatabaseTimeEntry>(newTimeEntry)
                }));

                var timeEntriesSource = new TimeEntriesDataSource(Repository, TimeService);

                timeEntriesSource.Updated.Subscribe(updatedObserver);
                timeEntriesSource.Created.Subscribe(createdObserver);
                await timeEntriesSource.Create(newTimeEntry);

                updatedObserver.Messages.Single().Value.Value.Entity.Duration.Should().Be(durationAfterStopping);
                createdObserver.Messages.Single().Value.Value.Id.Should().Be(newTimeEntry.Id);
                createdObserver.Messages.Single().Value.Value.Duration.Should().BeNull();
            }
コード例 #2
0
            public TimeEntryDataSourceTest()
            {
                TimeEntriesSource = new TimeEntriesDataSource(IdProvider, Repository);

                IdProvider.GetNextIdentifier().Returns(-1);
                Repository.GetById(Arg.Is(DatabaseTimeEntry.Id)).Returns(Observable.Return(DatabaseTimeEntry));
                Repository.Create(Arg.Any <IDatabaseTimeEntry>())
                .Returns(info => Observable.Return(info.Arg <IDatabaseTimeEntry>()));
            }
コード例 #3
0
            protected TimeEntryDataSourceTest()
            {
                TimeEntriesSource = new TimeEntriesDataSource(Repository, TimeService);

                IdProvider.GetNextIdentifier().Returns(-1);
                Repository.GetById(Arg.Is(TimeEntry.Id)).Returns(Observable.Return(TimeEntry));

                Repository.Create(Arg.Any <IDatabaseTimeEntry>())
                .Returns(info => Observable.Return(info.Arg <IDatabaseTimeEntry>()));

                Repository.Update(Arg.Any <long>(), Arg.Any <IDatabaseTimeEntry>())
                .Returns(info => Observable.Return(info.Arg <IDatabaseTimeEntry>()));
            }
コード例 #4
0
            public async ThreadingTask EmitsObservableEventsForTheNewlyCreatedRunningTimeEntry()
            {
                var itemsChangedObserver = TestScheduler.CreateObserver <Unit>();
                var newTimeEntry         = new MockTimeEntry {
                    Id = -1, Duration = null
                };

                Repository.BatchUpdate(
                    Arg.Any <IEnumerable <(long, IDatabaseTimeEntry)> >(),
                    Arg.Any <Func <IDatabaseTimeEntry, IDatabaseTimeEntry, ConflictResolutionMode> >(),
                    Arg.Any <IRivalsResolver <IDatabaseTimeEntry> >())
                .Returns(Observable.Return(new IConflictResolutionResult <IDatabaseTimeEntry>[]
                {
                    new CreateResult <IDatabaseTimeEntry>(newTimeEntry)
                }));

                var timeEntriesSource = new TimeEntriesDataSource(Repository, TimeService, AnalyticsService);

                timeEntriesSource.ItemsChanged.Subscribe(itemsChangedObserver);
                await timeEntriesSource.Create(newTimeEntry);

                itemsChangedObserver.SingleEmittedValue().Should().Be(Unit.Default);
            }
コード例 #5
0
            public async ThreadingTask EmitsObservableEventsForTheNewlyCreatedRunningTimeEntry()
            {
                var createdObserver = TestScheduler.CreateObserver <IThreadSafeTimeEntry>();
                var newTimeEntry    = new MockTimeEntry {
                    Id = -1, Duration = null
                };

                Repository.BatchUpdate(
                    Arg.Any <IEnumerable <(long, IDatabaseTimeEntry)> >(),
                    Arg.Any <Func <IDatabaseTimeEntry, IDatabaseTimeEntry, ConflictResolutionMode> >(),
                    Arg.Any <IRivalsResolver <IDatabaseTimeEntry> >())
                .Returns(Observable.Return(new IConflictResolutionResult <IDatabaseTimeEntry>[]
                {
                    new CreateResult <IDatabaseTimeEntry>(newTimeEntry)
                }));

                var timeEntriesSource = new TimeEntriesDataSource(Repository, TimeService);

                timeEntriesSource.Created.Subscribe(createdObserver);
                await timeEntriesSource.Create(newTimeEntry);

                createdObserver.Messages.Single().Value.Value.Id.Should().Be(newTimeEntry.Id);
                createdObserver.Messages.Single().Value.Value.Duration.Should().BeNull();
            }
コード例 #6
0
 public UserDataSourceTest()
 {
     TimeEntriesSource = new TimeEntriesDataSource(Repository);
     Repository.Create(Arg.Any <IDatabaseTimeEntry>())
     .Returns(info => Observable.Return(info.Arg <IDatabaseTimeEntry>()));
 }