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); }
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)); }
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(); }
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>()); }
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>()); }
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); }
public async ThreadingTask SetsTheDirtyFlag() { await TimeEntriesSource.Delete(DatabaseTimeEntry.Id).LastOrDefaultAsync(); await Repository.Received().Update(Arg.Is <IDatabaseTimeEntry>(te => te.IsDirty == true)); }
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)); }