public async ThreadingTask RemovesCurrentlyRunningTimeEntryWhenItIsDeleted() { DataSource.TimeEntries.Returns(TimeEntriesSource); var runningTimeEntriesHistory = new List <IThreadSafeTimeEntry>(); var user = Substitute.For <IThreadSafeUser>(); 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 = Now, Description = "Some description", IsBillable = true, ProjectId = ProjectId }; prepareBatchUpdate(); var timeEntry = Models.TimeEntry.From(await InteractorFactory.CreateTimeEntry(prototype).Execute()); Repository.Update(Arg.Is(timeEntry.Id), Arg.Is(timeEntry)).Returns(Observable.Return(timeEntry)); TimeEntriesSource.SoftDelete(timeEntry).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 void EmitsSingleElementBeforeCompleting() { var observer = Substitute.For <IObserver <Unit> >(); TimeEntriesSource.SoftDelete(TimeEntry).Subscribe(observer); observer.Received(1).OnNext(Arg.Any <Unit>()); observer.Received(1).OnCompleted(); }
public void PropagatesErrorIfTimeEntryIsNotInRepository() { var otherTimeEntry = Substitute.For <IThreadSafeTimeEntry>(); otherTimeEntry.Id.Returns(12); var observer = Substitute.For <IObserver <Unit> >(); Repository.Update(Arg.Any <long>(), Arg.Any <IThreadSafeTimeEntry>()) .Returns(Observable.Throw <IDatabaseTimeEntry>(new DatabaseOperationException <IDatabaseTimeEntry>(new Exception()))); TimeEntriesSource.SoftDelete(otherTimeEntry).Subscribe(observer); observer.Received().OnError(Arg.Any <DatabaseOperationException <IDatabaseTimeEntry> >()); }
public void PropagatesErrorIfUpdateFails() { var timeEntry = Models.TimeEntry.Builder.Create(12) .SetStart(Now) .SetSyncStatus(SyncStatus.InSync) .SetDescription("") .SetUserId(11) .SetWorkspaceId(10) .SetAt(Now) .Build(); var timeEntryObservable = Observable.Return(timeEntry); var errorObservable = Observable.Throw <IDatabaseTimeEntry>(new DatabaseOperationException <IDatabaseTimeEntry>(new Exception())); Repository.GetById(Arg.Is(timeEntry.Id)).Returns(timeEntryObservable); Repository.Update(Arg.Any <long>(), Arg.Any <IDatabaseTimeEntry>()).Returns(errorObservable); var observer = Substitute.For <IObserver <Unit> >(); TimeEntriesSource.SoftDelete(timeEntry).Subscribe(observer); observer.Received().OnError(Arg.Any <DatabaseOperationException <IDatabaseTimeEntry> >()); }
public async ThreadingTask UpdatesTheCorrectTimeEntry() { await TimeEntriesSource.SoftDelete(TimeEntry).LastOrDefaultAsync(); await Repository.Received().Update(Arg.Is(TimeEntry.Id), Arg.Is <IDatabaseTimeEntry>(te => te.Id == TimeEntry.Id)); }
public async ThreadingTask SetsTheSyncNeededStatus() { await TimeEntriesSource.SoftDelete(TimeEntry).LastOrDefaultAsync(); await Repository.Received().Update(Arg.Is(TimeEntry.Id), Arg.Is <IDatabaseTimeEntry>(te => te.SyncStatus == SyncStatus.SyncNeeded)); }
public async ThreadingTask SetsTheDeletedFlag() { await TimeEntriesSource.SoftDelete(TimeEntry).LastOrDefaultAsync(); await Repository.Received().Update(Arg.Is(TimeEntry.Id), Arg.Is <IDatabaseTimeEntry>(te => te.IsDeleted == true)); }