public async Task DoesNotReturnSuggestionsWithArchivedProjects(
                int numberOfTimeEntrieWithActiveProject,
                int numberOfTimeEntrieWithoutActiveProject,
                int numberOfExpectedResults)
            {
                var provider = new RandomForestSuggestionProvider(DataSource, TimeService);

                var timeEntries = getTimeEntries(numberOfTimeEntrieWithActiveProject, true, projectId: 2)
                                  .Concat(getTimeEntries(numberOfTimeEntrieWithoutActiveProject, true, numberOfTimeEntrieWithActiveProject + 1, false, projectId: 5));

                DataSource.TimeEntries
                .GetAll()
                .Returns(Observable.Return(timeEntries));

                var suggestions = await provider.GetSuggestions().ToList();

                suggestions.Should().HaveCount(numberOfExpectedResults);

                if (numberOfExpectedResults == 0)
                {
                    return;
                }

                suggestions.First().ProjectId.Should().Be(2);
                suggestions.First().ProjectName.Should().Be("2");
            }
            public async Task ReturnsTheCorrectAmountOfSuggestions(
                int numberOfTimeEntrieWithProject,
                int numberOfTimeEntrieWithoutProject,
                int numberOfExpectedResults,
                bool expectedToHaveProject)
            {
                var provider = new RandomForestSuggestionProvider(DataSource, TimeService);

                var timeEntries = getTimeEntries(numberOfTimeEntrieWithProject, true)
                                  .Concat(getTimeEntries(numberOfTimeEntrieWithoutProject, false, numberOfTimeEntrieWithProject + 1));

                DataSource.TimeEntries
                .GetAll()
                .Returns(Observable.Return(timeEntries));

                var suggestions = await provider.GetSuggestions().ToList();

                suggestions.Should().HaveCount(numberOfExpectedResults);

                if (numberOfExpectedResults == 0)
                {
                    return;
                }

                if (expectedToHaveProject)
                {
                    suggestions.First().ProjectId.Should().NotBe(null);
                    suggestions.First().ProjectName.Should().NotBe("");
                }
                else if (numberOfTimeEntrieWithoutProject == 0)
                {
                    suggestions.First().ProjectId.Should().Be(null);
                    suggestions.First().ProjectName.Should().Be("");
                }
            }
            public void ReturnsNoSuggestionsInCaseOfError()
            {
                var exception = new Exception();

                DataSource.TimeEntries.GetAll().Returns(Observable.Throw <IEnumerable <IThreadSafeTimeEntry> >(exception));
                var provider = new RandomForestSuggestionProvider(DataSource, TimeService);

                provider.GetSuggestions().Count().Wait().Should().Be(0);
            }
            public void NeverThrows()
            {
                var exception = new Exception();

                DataSource.TimeEntries.GetAll().Returns(Observable.Throw <IEnumerable <IThreadSafeTimeEntry> >(exception));
                var provider = new RandomForestSuggestionProvider(DataSource, TimeService);

                Action getSuggestions = () => provider.GetSuggestions().Subscribe();

                getSuggestions.Should().NotThrow();
            }
            protected RandomForestSuggestionProviderTest()
            {
                Provider = new RandomForestSuggestionProvider(DataSource, TimeService);

                TimeService.CurrentDateTime.Returns(_ => Now);
            }