public async Task UpdatesExistingTimeEntry() { var(togglClient, user) = await SetupTestUser(); var timeEntry = createTimeEntry(user); var persistedTimeEntry = await togglClient.TimeEntries.Create(timeEntry); var timeEntryWithUpdates = new TimeEntry { Id = persistedTimeEntry.Id, Description = Guid.NewGuid().ToString(), WorkspaceId = persistedTimeEntry.WorkspaceId, Billable = persistedTimeEntry.Billable, Start = persistedTimeEntry.Start, Duration = persistedTimeEntry.Duration, TagIds = persistedTimeEntry.TagIds, UserId = persistedTimeEntry.UserId, }; 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(); }
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)); }
public async Task SucceedsEvenIfTheDeletedTimeEntryDoesNotExistOnTheServer() { var(togglApi, user) = await SetupTestUser(); var timeEntry = createTimeEntry(user); var persistedTimeEntry = await togglApi.TimeEntries.Create(timeEntry); var timeEntryToDelete = new TimeEntry { Id = persistedTimeEntry.Id + 1000000, WorkspaceId = persistedTimeEntry.WorkspaceId }; await togglApi.TimeEntries.Delete(timeEntryToDelete); var timeEntriesOnServer = await togglApi.TimeEntries.GetAll(); timeEntriesOnServer.Should().Contain(te => te.Id == persistedTimeEntry.Id); }
public async Task TheTimeEntryReturnedByBackendIsARunningTimeEntryWhenPostingANewRunningTimeEntry() { var(togglApi, user) = await SetupTestUser(); var timeEntry = new TimeEntry { Description = Guid.NewGuid().ToString(), WorkspaceId = user.DefaultWorkspaceId.Value, Start = DateTimeOffset.UtcNow, UserId = user.Id, TagIds = new List <long>(), CreatedWith = "IntegrationTests/0.0" }; var postedTimeEntry = await togglApi.TimeEntries.Create(timeEntry); postedTimeEntry.Duration.Should().BeNull(); }
public async Task FailsCreatingARunningTimeEntryWhenTheStartTimeIsSetToTheCurrentTimePlusMinusMoreThanNineHundredNinetyNineHours(int hoursOffset) { var(togglApi, user) = await SetupTestUser(); var start = DateTimeOffset.Now.AddHours(-hoursOffset); var timeEntry = new TimeEntry { Description = Guid.NewGuid().ToString(), WorkspaceId = user.DefaultWorkspaceId.Value, Start = start, UserId = user.Id, TagIds = new List <long>(), CreatedWith = "IntegrationTests/0.0" }; Action creatingTimeEntry = () => CallEndpointWith(togglApi, timeEntry).Wait(); creatingTimeEntry.Should().Throw <BadRequestException>(); }
public async Task CreatesRunningTimeEntryWhenTheStartIsSetToCurrentTimePlusMinusNineHundredNinetyNineHours(int hoursOffset) { var(togglApi, user) = await SetupTestUser(); var start = DateTimeOffset.Now.AddHours(-hoursOffset); var timeEntry = new TimeEntry { Description = Guid.NewGuid().ToString(), WorkspaceId = user.DefaultWorkspaceId.Value, Start = start, UserId = user.Id, TagIds = new List <long>(), CreatedWith = "IntegrationTests/0.0" }; var persistedTimeEntry = CallEndpointWith(togglApi, timeEntry).Wait(); persistedTimeEntry.Id.Should().BePositive(); }
public async Task TheTimeEntryStoredInBackendIsARunningTimeEntryWhenFetchingItAfterPostingANewRunningTimeEntry() { var(togglApi, user) = await SetupTestUser(); var timeEntry = new TimeEntry { Description = Guid.NewGuid().ToString(), WorkspaceId = user.DefaultWorkspaceId.Value, Start = DateTimeOffset.UtcNow, UserId = user.Id, TagIds = new List <long>(), CreatedWith = "IntegrationTests/0.0" }; var postedTimeEntry = await togglApi.TimeEntries.Create(timeEntry); var fetchedTimeEntry = await togglApi.TimeEntries.GetAll() .SelectMany(timeEntries => timeEntries) .Where(te => te.Id == postedTimeEntry.Id) .SingleAsync(); fetchedTimeEntry.Duration.Should().BeNull(); }
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.Value }); var timeEntryWithUpdates = new TimeEntry { Id = persistedTimeEntry.Id, Description = Guid.NewGuid().ToString(), WorkspaceId = persistedTimeEntry.WorkspaceId, Billable = persistedTimeEntry.Billable, Start = persistedTimeEntry.Start, Duration = persistedTimeEntry.Duration, TagIds = new List <long> { tag.Id }, UserId = persistedTimeEntry.UserId, }; 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 Task <ITimeEntry> CallEndpointWith(ITogglApi togglApi, TimeEntry client) => togglApi.TimeEntries.Create(client);