Пример #1
0
        public void Search_ShouldReturnPopulatedFacetGroupOption()
        {
            var content = new NodeContent();
            var filterOptions = new FilterOptionViewModel { FacetGroups = new List<FacetGroupOption>() };

            var result = _subject.Search(content, filterOptions);

            var facetGroupOption = result.FacetGroups.First();

            var expected = new FacetGroupOption
            {
                GroupName = "FacetGroupName",
                GroupFieldName = "FacetGroupFieldName",
                Facets = new List<FacetOption>
                {
                    new FacetOption
                    {
                        Name = _facet.Name,
                        Key = _facet.Key,
                        Selected = _facet.IsSelected,
                        Count = _facet.Count
                    }
                }
            };

            facetGroupOption.ShouldBeEquivalentTo(expected);
        }
Пример #2
0
        public void Search_ShouldReturnSameSearchResult()
        {
            var content = new NodeContent();
            var filterOptions = new FilterOptionViewModel { FacetGroups = new List<FacetGroupOption>() };

            var result = _subject.Search(content, filterOptions);

            result.SearchResult.ShouldBeEquivalentTo(_searchResultsMock.Object);
        }
        public void Create_WhenQStartsWithStar_ShouldReportAsError()
        {
            // Arrange
            var formModel = new FilterOptionViewModel() { Q = "*query" };
            
            // Act
            var result = _subject.Create<IContent>(null, formModel);

            // Assert
            Assert.True(result.HasError);
        }
        public void Create_WhenPassingFormModel_ShouldUseItAsFormModel()
        {
            // Arrange
            var formModel = new FilterOptionViewModel() { Q = "query" };

            // Act
            var result = _subject.Create<IContent>(null, formModel);

            // Assert
            Assert.Equal<FilterOptionViewModel>(formModel, result.FilterOption);
        }
        public void Index_WhenPassingFormModel_ShouldPassItOnToFactory()
        {
            // Arrange
            var formModel = new FilterOptionViewModel();

            // Act
            _subject.Index(null, formModel);

            // Assert
            _viewModelFactoryMock.Verify(v => v.Create(It.IsAny<FashionNode>(), formModel));
        }
        public void Create_WhenPassingContent_ShouldUseItAsCurrentContent()
        {
            // Arrange
            var formModel = new FilterOptionViewModel() { Q = "query" };
            var content = new Mock<IContent>().Object;

            // Act
            var result = _subject.Create<IContent>(content, formModel);

            // Assert
            Assert.Equal<IContent>(content, result.CurrentContent);
        }
Пример #7
0
        public void Search_ShouldReturnPopulatedProductViewModel()
        {
            var content = new NodeContent();
            var filterOptions = new FilterOptionViewModel { FacetGroups = new List<FacetGroupOption>() };

            var result = _subject.Search(content, filterOptions);

            var productViewModel = result.ProductViewModels.First();

            var expected = new ProductViewModel
            {
                DisplayName = "DisplayName",
                PlacedPrice = new Money(1, _currentCurrency),
                DiscountedPrice = new Money(1, _currentCurrency),
                ImageUrl = "/image.jpg",
                Url = "http://domain.com",
                Code = "Code",
                Brand = "Brand",
                IsAvailable = true
            };

            productViewModel.ShouldBeEquivalentTo(expected);
        }
Пример #8
0
        private CatalogEntrySearchCriteria CreateCriteriaForQuickSearch(FilterOptionViewModel filterOptions)
        {
            var sortOrder = GetSortOrder().FirstOrDefault(x => x.Name.ToString() == filterOptions.Sort) ?? GetSortOrder().First();
            var market = _currentMarket.GetCurrentMarket();

            var criteria = new CatalogEntrySearchCriteria
            {
                ClassTypes = new StringCollection { "product" },
                Locale = _preferredCulture.Name,
                MarketId = market.MarketId,
                StartingRecord = 0,
                RecordsToRetrieve = filterOptions.PageSize,
                Sort = new SearchSort(new SearchSortField(sortOrder.Key, sortOrder.SortDirection == SortDirection.Descending)),
                SearchPhrase = GetEscapedSearchPhrase(filterOptions.Q)
            };

            return criteria;
        }
Пример #9
0
        private CatalogEntrySearchCriteria CreateCriteria(IContent currentContent, FilterOptionViewModel filterOptions)
        {
            var pageSize = filterOptions.PageSize > 0 ? filterOptions.PageSize : _defaultPageSize;
            var sortOrder = GetSortOrder().FirstOrDefault(x => x.Name.ToString() == filterOptions.Sort) ?? GetSortOrder().First();
            var market = _currentMarket.GetCurrentMarket();

            var criteria = new CatalogEntrySearchCriteria
            {
                ClassTypes = new StringCollection { "product" },
                Locale = _preferredCulture.Name,
                MarketId = market.MarketId,
                StartingRecord = pageSize * (filterOptions.Page - 1),
                RecordsToRetrieve = pageSize,
                Sort = new SearchSort(new SearchSortField(sortOrder.Key, sortOrder.SortDirection == SortDirection.Descending))
            };

            var nodeContent = currentContent as NodeContent;
            if (nodeContent != null)
            {
                criteria.Outlines = _search.GetOutlinesForNode(nodeContent.Code);
            }
            if (!string.IsNullOrEmpty(filterOptions.Q))
            {
                criteria.SearchPhrase = GetEscapedSearchPhrase(filterOptions.Q);
            }

            return criteria;
        }
Пример #10
0
        public void QuickSearch_WhenQueryContainsSeparatorCharacter_ShouldRemoveSeparatorCharacterFromQuery()
        {
            const string searchQuery = "start|end";
            const string expectedResult = "startend*";

            var filterOptions = new FilterOptionViewModel { Q = searchQuery };
            _subject.QuickSearch(filterOptions);

            _searchFacadeMock.Verify(x => x.Search(It.Is<CatalogEntrySearchCriteria>(y => y.SearchPhrase.Equals(expectedResult))));
        }
Пример #11
0
        public void QuickSearch_ShouldReturnPopulatedProductViewModel()
        {
            var filterOptions = new FilterOptionViewModel();
            filterOptions.Q = "query";

            var result = _subject.QuickSearch(filterOptions);

            var productViewModel = result.First();

            var expected = new ProductViewModel
            {
                DisplayName = "DisplayName",
                PlacedPrice = new Money(1, _currentCurrency),
                DiscountedPrice = new Money(1, _currentCurrency),
                ImageUrl = "/image.jpg",
                Url = "http://domain.com",
                Brand = "Brand",
                Code = "Code",
                IsAvailable = true
            };

            productViewModel.ShouldBeEquivalentTo(expected);
        }
 protected virtual void EnsureQ(FilterOptionViewModel model, string q)
 {
     if (string.IsNullOrEmpty(model.Q))
     {
         model.Q = q;
     }
 }
 protected virtual void EnsurePage(FilterOptionViewModel model)
 {
     if (model.Page < 1)
     {
         model.Page = 1;
     }
 }
 protected virtual void EnsureFacets(FilterOptionViewModel model, string facets, IContent content)
 {
     if (model.FacetGroups == null)
     {
         model.FacetGroups = CreateFacetGroups(facets, content);
     }
 }
        public void Create_WhenSearching_ShouldGetFacetsFromSearchResult()
        {
            // Arrange
            var formModel = new FilterOptionViewModel() { Q = "query" };

            // Act
            var result = _subject.Create<IContent>(null, formModel);

            // Assert
            Assert.Equal<ISearchFacetGroup[]>(_facetGroups, result.Facets);
        }
        public void Create_WhenSearching_ShouldGetProductViewModelsFromSearchResult()
        {
            // Arrange
            var formModel = new FilterOptionViewModel() { Q = "query" };

            // Act
            var result = _subject.Create<IContent>(null, formModel);

            // Assert
            Assert.Equal<IEnumerable<ProductViewModel>>(_productViewModels, result.ProductViewModels);
        }
Пример #17
0
        public void QuickSearch_WhenQueryIsEmpty_ShouldReturnEmptyList()
        {
            var filterOptions = new FilterOptionViewModel();

            var result = _subject.QuickSearch(filterOptions);

            result.Should().BeEmpty();
        }
 protected virtual void EnsureSort(FilterOptionViewModel model, string sort)
 {
     if (string.IsNullOrEmpty(model.Sort))
     {
         model.Sort = sort;
     }
 }
Пример #19
0
        public void QuickSearch_ShouldFilterByCurrentMarket()
        {
            var filterOptions = new FilterOptionViewModel { Q = "query" };
            _subject.QuickSearch(filterOptions);

            var expected = _currentMarketMock.Object.GetCurrentMarket().MarketId;

            _searchFacadeMock.Verify(x => x.Search(It.Is<CatalogEntrySearchCriteria>(y => y.MarketId.Equals(expected))));
        }
 protected virtual void SetupModel(FilterOptionViewModel model, string q, string sort, string facets, IContent content)
 {
     EnsurePage(model);
     EnsureQ(model, q);
     EnsureSort(model, sort);
     EnsureFacets(model, facets, content);
 }
Пример #21
0
        public void Search_ShouldFilterByCurrentMarket()
        {
            var filterOptions = new FilterOptionViewModel { Q = "query", FacetGroups = new List<FacetGroupOption>() };
            var content = new NodeContent();
            _subject.Search(content, filterOptions);

            var expected = _currentMarketMock.Object.GetCurrentMarket().MarketId;

            _searchFacadeMock.Verify(x => x.Search(It.Is<CatalogEntrySearchCriteria>(y => y.MarketId.Equals(expected))));
        }
Пример #22
0
 public IEnumerable<ProductViewModel> QuickSearch(string query)
 {
     var filterOptions = new FilterOptionViewModel
     {
         Q = query,
         PageSize = 5,
         Sort = string.Empty
     };
     return QuickSearch(filterOptions);
 }
Пример #23
0
        public void Search_WhenQueryContainsWaveCharacter_ShouldRemoveWaveCharacterFromQuery()
        {
            const string searchQuery = "start~end";
            const string expectedResult = "startend*";

            var content = new NodeContent();
            var filterOptions = new FilterOptionViewModel { Q = searchQuery, FacetGroups = new List<FacetGroupOption>() };
            _subject.Search(content, filterOptions);

            _searchFacadeMock.Verify(x => x.Search(It.Is<CatalogEntrySearchCriteria>(y => y.SearchPhrase.Equals(expectedResult))));
        }
Пример #24
0
        public IEnumerable<ProductViewModel> QuickSearch(FilterOptionViewModel filterOptions)
        {
            if (String.IsNullOrEmpty(filterOptions.Q))
            {
                return Enumerable.Empty<ProductViewModel>();
            }

            var criteria = CreateCriteriaForQuickSearch(filterOptions);

            try
            {
                var searchResult = _search.Search(criteria);
                return CreateProductViewModels(searchResult);
            }
            catch (ParseException)
            {
                return new ProductViewModel[0];
            }
        }
Пример #25
0
        public CustomSearchResult Search(IContent currentContent, FilterOptionViewModel filterOptions)
        {
            if (filterOptions == null)
            {
                return CreateEmptyResult();
            }

            var criteria = CreateCriteria(currentContent, filterOptions);
            AddFacets(filterOptions.FacetGroups, criteria, currentContent);
            return Search(criteria, currentContent);
        }
        public void Create_WhenSearching_ShouldSetTotalCountOnFormModel()
        {
            // Arrange
            var formModel = new FilterOptionViewModel() { Q = "query" };
            _searchResultsMock
                .Setup(s => s.TotalCount)
                .Returns(666);

            // Act
            var result = _subject.Create<IContent>(null, formModel);

            // Assert
            Assert.Equal<int>(666, result.FilterOption.TotalCount);
        }