public async Task ReturnsSuggestionsWithoutDuplicates()
            {
                var randomProvider = makeProvider(new List <Suggestion>
                {
                    makeSuggestion("same description", 12, SuggestionProviderType.MostUsedTimeEntries)
                });

                var suggestionProvidersObservable = Observable.Return(new List <ISuggestionProvider>
                {
                    randomProvider,
                    randomProvider,
                    randomProvider
                });

                var interactorFactory = Substitute.For <IInteractorFactory>();

                interactorFactory.GetSuggestionProviders(3).Execute()
                .Returns(suggestionProvidersObservable);

                var interactor = new GetSuggestionsInteractor(3, interactorFactory);

                var suggestions = await interactor.Execute();

                suggestions.Should().HaveCount(1);
            }
            public async Task ReturnsSuggestionsWithoutRemoveingNonDuplicates()
            {
                var randomProvider1 = makeProvider(new List <Suggestion>
                {
                    makeSuggestion("1 description", 11, SuggestionProviderType.RandomForest)
                });

                var randomProvider2 = makeProvider(new List <Suggestion>
                {
                    makeSuggestion("2 description", 12, SuggestionProviderType.MostUsedTimeEntries)
                });

                var randomProvider3 = makeProvider(new List <Suggestion>
                {
                    makeSuggestion("3 description", 13, SuggestionProviderType.Calendar)
                });

                var suggestionProvidersObservable = Observable.Return(new List <ISuggestionProvider>
                {
                    randomProvider1,
                    randomProvider2,
                    randomProvider3
                });

                var interactorFactory = Substitute.For <IInteractorFactory>();

                interactorFactory.GetSuggestionProviders(3).Execute()
                .Returns(suggestionProvidersObservable);

                var interactor = new GetSuggestionsInteractor(3, interactorFactory);

                var suggestions = await interactor.Execute();

                suggestions.Should().HaveCount(3);
            }
            public async Task ReturnsSuggestionsWithCountEqualOrLessThanRequested(int numberOfProviders, int numberofSuggestionsPerProvider)
            {
                var suggestionProvidersObservable = Observable.Return(makeCombinationProvidersAndSuggestions(numberOfProviders, numberofSuggestionsPerProvider));

                var interactorFactory = Substitute.For <IInteractorFactory>();

                interactorFactory.GetSuggestionProviders(3).Execute()
                .Returns(suggestionProvidersObservable);

                var interactor = new GetSuggestionsInteractor(3, interactorFactory);

                var suggestions = await interactor.Execute();

                suggestions.Should().HaveCountLessOrEqualTo(3);
            }