public void ApplyDogLocationFilteringAndSorting_calls_sorting_strategy_when_filtering_on_place()
        {
            // arrange
                        const int placeId = 1;
                        const int breedId = 4;

                        var dogs = _dogSearchResultsListBuilder.ListOf3DalmatiansByCategory(1, breedId).Build().AsQueryable();

                        _dogBreedFilterStrategy.Stub(x => x.Filter(breedId)).Return(dogs);
                        _dogCategoryService.Stub(x => x.AddDogsInSameCategoryToDogsCollection(dogs, breedId)).Return(dogs);
                        _dogLocationFilterStrategy.Stub(x => x.Filter(dogs, placeId)).Return(dogs);

                        _dogSearchManager = new DogSearchService(_dogBreedFilterStrategy
                                , _dogCategoryFilterStrategy
                                , _dogCategoryService
                                , _dogLocationFilterStrategy
                                , _configuration);

                        // act
                        _dogSearchManager.ApplyDogLocationFilteringAndSorting(dogs, breedId, null, placeId);

                        // assert
                        _dogLocationFilterStrategy.AssertWasCalled(x => x.Sort(Arg<IEnumerable<Dog>>.Is.Anything));
        }
        public void ApplyDogLocationFilteringAndSorting_calls_sorting_strategy_when_not_filtering_on_place()
        {
            // arrange
                        const int breedId = 1;

                        _dogBreedFilterStrategy.Stub(x => x.Filter(Arg<int>.Is.Anything)).Return(
                                _dogSearchResultsListBuilder.ListOf14Beagels().Build().AsQueryable()
                                );

                        var dogs = _dogSearchResultsListBuilder.ListWith30Dogs().Build().AsQueryable();
                        _dogCategoryService.Stub(x => x.AddDogsInSameCategoryToDogsCollection(dogs, breedId)).Return(dogs);

                        _dogSearchManager = new DogSearchService(_dogBreedFilterStrategy
                                , _dogCategoryFilterStrategy
                                , _dogCategoryService
                                , _dogLocationFilterStrategy
                                , _configuration);

                        // act
                        _dogSearchManager.ApplyDogLocationFilteringAndSorting(dogs, breedId, _sortColumn, 0);

                        // assert
                        _dogCategoryFilterStrategy.AssertWasCalled(x => x.Sort(dogs, _sortColumn));
        }
        public void GetDogsByBreed_filters_dogs_by_breed()
        {
            // arrange
                        var dogBreedFilterStrategy = MockRepository.GenerateMock<IDogBreedFilterStrategy>();
                        var dogSearchResultsListBuilder = new DogSearchResultsListBuilder();

                        dogBreedFilterStrategy.Stub(x => x.Filter(Arg<int>.Is.Anything)).Return(
                                dogSearchResultsListBuilder.ListOf14Beagels().Build().AsQueryable()
                                );

                        var dogSearchManager = new DogSearchService(dogBreedFilterStrategy
                                , _dogCategoryFilterStrategy
                                , _dogCategoryService
                                , _dogLocationFilterStrategy
                                , _configuration);

                        // act
                        var result = dogSearchManager.GetDogsByBreed(1);

                        // assert
                        dogBreedFilterStrategy.AssertWasCalled(x => x.Filter(1));
                        Assert.That(result.Count(), Is.EqualTo(14));
        }
        public void ApplyDogLocationFilteringAndSorting_filters_dogs_by_place()
        {
            // arrange
                        const int breedId = 3;
                        const int placeId = 1;

                        var dogBreedFilterStrategy = MockRepository.GenerateMock<IDogBreedFilterStrategy>();
                        var dogSearchResultsListBuilder = new DogSearchResultsListBuilder();
                        var dogs = dogSearchResultsListBuilder.ListOf14Beagels().Build().AsQueryable();
                        dogBreedFilterStrategy.Stub(x => x.Filter(breedId)).Return(dogs);

                        _dogCategoryService.Stub(x => x.AddDogsInSameCategoryToDogsCollection(dogs, breedId)).Return(dogs);
                        _dogLocationFilterStrategy.Stub(x => x.Filter(dogs, placeId)).Return(dogs);

                        var dogSearchManager = new DogSearchService(dogBreedFilterStrategy
                                , _dogCategoryFilterStrategy
                                , _dogCategoryService
                                , _dogLocationFilterStrategy
                                , _configuration);

                        // act
                        dogSearchManager.ApplyDogLocationFilteringAndSorting(dogs, breedId, _sortColumn, placeId);

                        // assert
                        _dogLocationFilterStrategy.AssertWasCalled(x => x.Filter(dogs, placeId));
        }