Beispiel #1
0
            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();
            }
Beispiel #2
0
            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);
            }
Beispiel #3
0
            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));
            }
Beispiel #4
0
            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);
            }
Beispiel #5
0
            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();
            }
Beispiel #6
0
            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>();
            }
Beispiel #7
0
            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();
            }
Beispiel #8
0
            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();
            }
Beispiel #9
0
            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);
            }
Beispiel #10
0
 private IObservable <ITimeEntry> CallEndpointWith(ITogglApi togglApi, TimeEntry client)
 => togglApi.TimeEntries.Create(client);
Beispiel #11
0
 private Task <ITimeEntry> CallEndpointWith(ITogglApi togglApi, TimeEntry client)
 => togglApi.TimeEntries.Create(client);