public async ThreadingTask RemovesCurrentlyRunningTimeEntryWhenItIsDeleted()
            {
                DataSource.TimeEntries.Returns(TimeEntriesSource);
                var runningTimeEntriesHistory = new List <IDatabaseTimeEntry>();
                var user = Substitute.For <IDatabaseUser>();

                user.Id.Returns(10);
                DataSource.User.Current.Returns(Observable.Return(user));
                TimeEntriesSource.CurrentlyRunningTimeEntry
                .Subscribe(te => runningTimeEntriesHistory.Add(te));
                var prototype = new MockTimeEntryPrototype
                {
                    WorkspaceId = WorkspaceId,
                    StartTime   = ValidTime,
                    Description = "Some description",
                    IsBillable  = true,
                    ProjectId   = ProjectId
                };

                prepareBatchUpdate();
                var timeEntry = await InteractorFactory.CreateTimeEntry(prototype).Execute();

                Repository.GetById(Arg.Is(timeEntry.Id)).Returns(Observable.Return(timeEntry));

                TimeEntriesSource.Delete(timeEntry.Id).Wait();

                runningTimeEntriesHistory.Should().HaveCount(3);
                runningTimeEntriesHistory[0].Should().Be(null); // originally there is no running time entry (in the repository)
                runningTimeEntriesHistory[1].Id.Should().Be(timeEntry.Id);
                runningTimeEntriesHistory[2].Should().Be(null);
            }
Exemple #2
0
            public async ThreadingTask UpdatesTheCorrectTimeEntry()
            {
                await TimeEntriesSource.Delete(DatabaseTimeEntry.Id).LastOrDefaultAsync();

                await Repository.Received().GetById(Arg.Is(DatabaseTimeEntry.Id));

                await Repository.Received().Update(Arg.Is <IDatabaseTimeEntry>(te => te.Id == DatabaseTimeEntry.Id));
            }
Exemple #3
0
            public void DoesNotEmitAnyElements()
            {
                var observer = Substitute.For <IObserver <Unit> >();

                TimeEntriesSource.Delete(DatabaseTimeEntry.Id).Subscribe(observer);

                observer.DidNotReceive().OnNext(Arg.Any <Unit>());
                observer.Received().OnCompleted();
            }
            public void EmitsSingleElementBeforeCompleting()
            {
                var observer = Substitute.For <IObserver <Unit> >();

                TimeEntriesSource.Delete(DatabaseTimeEntry.Id).Subscribe(observer);

                observer.Received(1).OnNext(Arg.Any <Unit>());
                observer.Received(1).OnCompleted();
            }
Exemple #5
0
            public void PropagatesErrorIfTimeEntryIsNotInRepository()
            {
                var observer = Substitute.For <IObserver <Unit> >();

                Repository.GetById(Arg.Any <long>())
                .Returns(Observable.Throw <IDatabaseTimeEntry>(new EntityNotFoundException()));

                TimeEntriesSource.Delete(12).Subscribe(observer);

                observer.Received().OnError(Arg.Any <EntityNotFoundException>());
            }
            public void PropagatesErrorIfUpdateFails()
            {
                var timeEntry = FoundationTimeEntry.Clean(new UltrawaveTimeEntry {
                    Id = 12
                });
                var timeEntryObservable = Observable.Return(timeEntry);
                var errorObservable     = Observable.Throw <IDatabaseTimeEntry>(new EntityNotFoundException());

                Repository.GetById(Arg.Is(timeEntry.Id)).Returns(timeEntryObservable);
                Repository.Update(Arg.Any <IDatabaseTimeEntry>()).Returns(errorObservable);
                var observer = Substitute.For <IObserver <Unit> >();

                TimeEntriesSource.Delete(timeEntry.Id).Subscribe(observer);

                observer.Received().OnError(Arg.Any <EntityNotFoundException>());
            }
Exemple #7
0
            public void PropagatesErrorIfUpdateFails()
            {
                var timeEntry = TimeEntry.Builder.Create(12)
                                .SetStart(DateTimeOffset.Now)
                                .SetIsDirty(false)
                                .SetDescription("")
                                .Build();

                var timeEntryObservable = Observable.Return(timeEntry);
                var errorObservable     = Observable.Throw <IDatabaseTimeEntry>(new EntityNotFoundException());

                Repository.GetById(Arg.Is(timeEntry.Id)).Returns(timeEntryObservable);
                Repository.Update(Arg.Any <IDatabaseTimeEntry>()).Returns(errorObservable);
                var observer = Substitute.For <IObserver <Unit> >();

                TimeEntriesSource.Delete(timeEntry.Id).Subscribe(observer);

                observer.Received().OnError(Arg.Any <EntityNotFoundException>());
            }
Exemple #8
0
            public async ThreadingTask RemovesCurrentlyRunningTimeEntryWhenItIsDeleted()
            {
                var runningTimeEntriesHistory = new List <IDatabaseTimeEntry>();

                TimeEntriesSource.CurrentlyRunningTimeEntry
                .Subscribe(te => runningTimeEntriesHistory.Add(te));
                var timeEntryDto = CreateDto(ValidTime, ValidDescription, true, ProjectId);

                prepareBatchUpdate();
                var timeEntry = await TimeEntriesSource.Start(timeEntryDto);

                Repository.GetById(Arg.Is(timeEntry.Id)).Returns(Observable.Return(timeEntry));

                TimeEntriesSource.Delete(timeEntry.Id).Wait();

                runningTimeEntriesHistory.Should().HaveCount(3);
                runningTimeEntriesHistory[0].Should().Be(null); // originally there is no running time entry (in the repository)
                runningTimeEntriesHistory[1].Id.Should().Be(timeEntry.Id);
                runningTimeEntriesHistory[2].Should().Be(null);
            }
Exemple #9
0
            public async ThreadingTask SetsTheDirtyFlag()
            {
                await TimeEntriesSource.Delete(DatabaseTimeEntry.Id).LastOrDefaultAsync();

                await Repository.Received().Update(Arg.Is <IDatabaseTimeEntry>(te => te.IsDirty == true));
            }
Exemple #10
0
            public async ThreadingTask SetsTheSyncNeededStatus()
            {
                await TimeEntriesSource.Delete(DatabaseTimeEntry.Id).LastOrDefaultAsync();

                await Repository.Received().Update(Arg.Is(DatabaseTimeEntry.Id), Arg.Is <IDatabaseTimeEntry>(te => te.SyncStatus == SyncStatus.SyncNeeded));
            }