public async Task WorksWithSeveralProviders() { var scheduler = new TestScheduler(); var provider1 = Substitute.For <ISuggestionProvider>(); var provider2 = Substitute.For <ISuggestionProvider>(); var te1 = new TimeEntry { Description = "t1", TaskId = 12, ProjectId = 9 }; var te2 = new TimeEntry { Description = "t2", TaskId = 9, ProjectId = 12 }; var observable1 = scheduler .CreateColdObservable(new Recorded <Notification <ITimeEntry> >(0, Notification.CreateOnNext <ITimeEntry>(te1))); var observable2 = scheduler .CreateColdObservable(new Recorded <Notification <ITimeEntry> >(1, Notification.CreateOnNext <ITimeEntry>(te2))); provider1.GetSuggestion().Returns(observable1); provider2.GetSuggestion().Returns(observable2); var container = new SuggestionProviderContainer(provider1, provider2); var viewModel = new SuggestionsViewModel(container); await viewModel.Initialize(); scheduler.AdvanceTo(1); viewModel.Suggestions.Should().HaveCount(2) .And.Contain(new[] { te1, te2 }); }
public async Task UpdatesWhenTheTimeEntriesSourcesCurrentlyRunningTimeEntryEmitsANewTimeEntry() { var timeEntry = new TimeEntry(); var subject = new BehaviorSubject <ITimeEntry>(null); DataSource.TimeEntries.CurrentlyRunningTimeEntry.Returns(subject.AsObservable()); await ViewModel.Initialize(); subject.OnNext(timeEntry); ViewModel.CurrentlyRunningTimeEntry.Should().Be(timeEntry); }
public async Task FailsIfDeletingAnExistingTimeEntryInAWorkspaceWhereTheUserDoesNotBelong() { var(togglApi, user) = await SetupTestUser(); var timeEntry = createTimeEntry(user); var persistedTimeEntry = await togglApi.TimeEntries.Create(timeEntry); var timeEntryToDelete = new TimeEntry { Id = persistedTimeEntry.Id, WorkspaceId = persistedTimeEntry.WorkspaceId + 1000000 }; Action deleteNonExistingTimeEntry = () => togglApi.TimeEntries.Delete(timeEntryToDelete).Wait(); deleteNonExistingTimeEntry.Should().Throw <ForbiddenException>(); (await togglApi.TimeEntries.GetAll()).Should().Contain(te => te.Id == persistedTimeEntry.Id); }
protected override IObservable <ITimeEntry> CallUpdateEndpoint(ITogglApi togglApi, ITimeEntry timeEntry) { var timeEntryWithUpdates = new TimeEntry { Id = timeEntry.Id, Description = Guid.NewGuid().ToString(), WorkspaceId = timeEntry.WorkspaceId, Billable = timeEntry.Billable, Start = timeEntry.Start, Duration = timeEntry.Duration, TagIds = timeEntry.TagIds, UserId = timeEntry.UserId, }; return(togglApi.TimeEntries.Update(timeEntryWithUpdates)); }
protected override IObservable <ITimeEntry> CallEndpointWith(ITogglApi togglApi) => Observable.Defer(async() => { var user = await togglApi.User.Get(); var timeEntry = createTimeEntry(user); var persistedTimeEntry = await togglApi.TimeEntries.Create(timeEntry); var timeEntryWithUpdates = new TimeEntry { Id = persistedTimeEntry.Id, Description = Guid.NewGuid().ToString(), WorkspaceId = persistedTimeEntry.WorkspaceId, Billable = persistedTimeEntry.Billable, Start = persistedTimeEntry.Start, Stop = persistedTimeEntry.Stop, TagIds = persistedTimeEntry.TagIds, UserId = persistedTimeEntry.UserId, CreatedWith = persistedTimeEntry.CreatedWith }; return(CallEndpointWith(togglApi, timeEntryWithUpdates)); });
public async Task AddTagsToAnExistingTimeEntry() { var(togglClient, user) = await SetupTestUser(); var timeEntry = createTimeEntry(user); var persistedTimeEntry = await togglClient.TimeEntries.Create(timeEntry); var tag = await togglClient.Tags.Create(new Models.Tag { Name = Guid.NewGuid().ToString(), WorkspaceId = user.DefaultWorkspaceId }); var timeEntryWithUpdates = new TimeEntry { Id = persistedTimeEntry.Id, Description = Guid.NewGuid().ToString(), WorkspaceId = persistedTimeEntry.WorkspaceId, Billable = persistedTimeEntry.Billable, Start = persistedTimeEntry.Start, Stop = persistedTimeEntry.Stop, TagIds = new List <long> { tag.Id }, UserId = persistedTimeEntry.UserId, CreatedWith = persistedTimeEntry.CreatedWith }; var updatedTimeEntry = await togglClient.TimeEntries.Update(timeEntryWithUpdates); updatedTimeEntry.Id.Should().Be(persistedTimeEntry.Id); updatedTimeEntry.Description.Should().Be(timeEntryWithUpdates.Description); updatedTimeEntry.WorkspaceId.Should().Be(persistedTimeEntry.WorkspaceId); updatedTimeEntry.Billable.Should().Be(false); updatedTimeEntry.ProjectId.Should().BeNull(); updatedTimeEntry.TaskId.Should().BeNull(); updatedTimeEntry.TagIds.Count().Should().Be(1); updatedTimeEntry.TagIds.First().Should().Be(tag.Id); }
private IObservable <ITimeEntry> CallEndpointWith(ITogglApi togglApi, TimeEntry client) => togglApi.TimeEntries.Create(client);
private IObservable <ITimeEntry> CallEndpointWith(ITogglApi togglApi, TimeEntry timeEntry) => togglApi.TimeEntries.Update(timeEntry);