Beispiel #1
0
            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);
            }
Beispiel #3
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 #4
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));
            }
            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);