public void DFC5229ForSearchResultsShowingComputedSearchTerm(bool showComputedSearchTerm, bool useRawSearchTerm)
        {
            // Arrange
            var searchView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var model = new JobProfileSearchResultViewModel
            {
                SearchResults      = new List <JobProfileSearchResultItemViewModel>(),
                ShowSearchedTerm   = showComputedSearchTerm,
                ComputedSearchTerm = useRawSearchTerm ? " plumbing" : " plumbing /.*plumb.*/ plumb~"
            };

            // Act
            var htmlDom = searchView.RenderAsHtml(model);

            // Asserts
            if (showComputedSearchTerm)
            {
                GetSearchComputedTermParagraph(htmlDom).Should().Be($"ComputedSearchTerm: {model.ComputedSearchTerm}");
            }
            else
            {
                GetSearchComputedTermParagraph(htmlDom).Should().BeNullOrEmpty();
            }
        }
示例#2
0
        public void DFC2047ForJobProfileSalaryRange(string salaryRange)
        {
            // Arrange
            var searchView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            string salaryBlankText = "Vairable";

            var jobProfileSearchResultsViewModel = GenerateDummyJobProfileSearchResultViewModel(
                1, "next-url", "nextpage", "prev-url", "prevpage", 1, 1, DummyJobProfileSearchResultWithSalaryRange(salaryRange), "1 result found", "Test", salaryBlankText);

            // Act
            var htmlDom = searchView.RenderAsHtml(jobProfileSearchResultsViewModel);

            // Asserts
            var salaryRangeElement = htmlDom.DocumentNode.SelectNodes("//span[contains(@class, 'dfc-code-search-jpSalary')]").FirstOrDefault();
            var salaryRangeText    = salaryRangeElement?.InnerText?.Trim();

            if (string.IsNullOrEmpty(salaryRange))
            {
                salaryRangeText.Should().Be(salaryBlankText);
            }
            else
            {
                salaryRangeText.Should().Be(salaryRange);
            }
        }
        public void DFC1494ForSearchResultsDidYouMeanTerm(string correctedSearchTerm, bool validSpellcheckResult)
        {
            // Arrange
            var searchView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var model = new JobProfileSearchResultViewModel
            {
                DidYouMeanUrl  = new Uri(validSpellcheckResult ? $"{nameof(JobProfileSearchBoxController.SearchResultsPage)}?searchTerm={HttpUtility.UrlEncode(correctedSearchTerm)}" : string.Empty, UriKind.RelativeOrAbsolute),
                DidYouMeanTerm = validSpellcheckResult ? correctedSearchTerm : string.Empty,
                SearchResults  = new List <JobProfileSearchResultItemViewModel>()
            };

            // Act
            var htmlDom = searchView.RenderAsHtml(model);

            // Asserts
            if (validSpellcheckResult)
            {
                GetDidYouMeanText(htmlDom).Should().Be(model.DidYouMeanTerm);
                GetDidYouMeanUrl(htmlDom).Should().Be(model.DidYouMeanUrl.OriginalString);
            }
            else
            {
                GetDidYouMeanText(htmlDom).Should().BeNullOrEmpty();
            }
        }
示例#4
0
        public void DFC1495ForAlsoFoundInCategories(int numberOfLinkedJobCategories)
        {
            var searchResultsView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchResultsViewModel = GenerateDummyJobProfileSearchResultViewModel(
                1, "dummy-nextURL", "dummy-NextUrlText", "dummy-PreviousUrl", "dummy-PreviousUrlText", 1, 1, DummyJobProfileSearchResultsWithJobProfileCategories(numberOfLinkedJobCategories), "dummy result found", "Test");

            var htmlDom = searchResultsView.RenderAsHtml(jobProfileSearchResultsViewModel);

            // var foundInText = htmlDom.DocumentNode.SelectSingleNode("//p[contains(@class, 'results-categories')]").InnerText;
            var linkedCategorySection = htmlDom.DocumentNode.SelectSingleNode("//p[contains(@class, 'results-categories')]");

            if (numberOfLinkedJobCategories <= 0)
            {
                //The section should not be displayed if no linked categories
                linkedCategorySection.Should().BeNull();
            }
            else
            {
                //Should have found in section
                linkedCategorySection.InnerText.Should().Contain("Found in:");
                var foundInCategoryLinks  = GetDisplayedViewAnchorLinks(linkedCategorySection);
                var expectedCategoryLinks = GetLinkedCategories(numberOfLinkedJobCategories, "/job-categories/");
                foundInCategoryLinks.Should().BeEquivalentTo(expectedCategoryLinks);
            }
        }
示例#5
0
        public void DFC187ScenarioA1AndA2ForRetainSearchTerm(string nextUrl, string nextUrlText, string previousUrl, string previousUrlText, int count, int totalPages)
        {
            var searchResultsView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchResultsViewModel = GenerateDummyJobProfileSearchResultViewModel(
                1, nextUrl, nextUrlText, previousUrl, previousUrlText, count, totalPages, DummyJobProfileSearchResultsWithAltTitle(), "1 result found", "Test");

            var htmlDom = searchResultsView.RenderAsHtml(jobProfileSearchResultsViewModel);

            var searchTermText = htmlDom.DocumentNode.SelectNodes("//*[@id='search-main']").FirstOrDefault()
                                 .GetAttributeValue("value", "Attribute not found");
            var searchBox = htmlDom.DocumentNode.SelectNodes("//input[contains(@id, 'search-main')]");

            searchTermText.Should().Be("Test");
            searchBox.Should().NotBeNull();

            var resultText = htmlDom.DocumentNode.SelectNodes("//div[contains(@class, 'result-count')]").FirstOrDefault().InnerText;

            resultText.Should().Contain("1 result found");

            var newJobProfileSearch = GenerateDummyJobProfileSearchResultViewModel(
                1, nextUrl, nextUrlText, previousUrl, previousUrlText, count, totalPages, DummyMultipleJobProfileSearchResults(), "2 results found", "New Search Test");

            htmlDom = searchResultsView.RenderAsHtml(newJobProfileSearch);

            searchTermText = htmlDom.DocumentNode.SelectNodes("//*[@id='search-main']").FirstOrDefault()
                             .GetAttributeValue("value", "Attribute not found");
            searchTermText.Should().Be("New Search Test");

            resultText = htmlDom.DocumentNode.SelectNodes("//div[contains(@class, 'result-count')]").FirstOrDefault().InnerText;
            resultText.Should().Contain("2 results found");
        }
示例#6
0
        public void DFC106ForSearchResultText(string nextUrl, string nextUrlText, string previousUrl, string previousUrlText, int count, int totalPages)
        {
            var searchResultsView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchResultsViewModel = GenerateDummyJobProfileSearchResultViewModel(
                1, nextUrl, nextUrlText, previousUrl, previousUrlText, count, totalPages, DummyJobProfileSearchResultsWithAltTitle(), "1 result found", "Test");

            var htmlDom = searchResultsView.RenderAsHtml(jobProfileSearchResultsViewModel);

            var resultText = htmlDom.DocumentNode.SelectNodes("//div[contains(@class, 'result-count')]").FirstOrDefault().InnerText;

            resultText.Should().Contain("1 result found");
        }
示例#7
0
        public void DFC164ScenarioA2ForSearchwithNoAltTitle(string nextUrl, string nextUrlText, string previousUrl, string previousUrlText, int count, int totalPages)
        {
            var searchView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchViewModel = GenerateDummyJobProfileSearchResultViewModel(
                1, nextUrl, nextUrlText, previousUrl, previousUrlText, count, totalPages, DummyJobProfileSearchResultsWithoutAltTitle(), "1 result found", "Test");

            var htmlDom = searchView.RenderAsHtml(jobProfileSearchViewModel);

            var title    = htmlDom.DocumentNode.SelectNodes("//a[contains(@class, 'dfc-code-search-jpTitle')]").FirstOrDefault().InnerText;
            var altTitle = htmlDom.DocumentNode.SelectNodes("//p[contains(@class, 'dfc-code-search-jpAltTitle')]");

            title.Should().Contain("Test Result Title");
            altTitle.Should().BeNullOrEmpty();
        }
示例#8
0
        public void DFC164ScenarioA3ForSearchRankNo(string nextUrl, string nextUrlText, string previousUrl, string previousUrlText, int count, int totalPages)
        {
            var searchView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchViewModel = GenerateDummyJobProfileSearchResultViewModel(1, nextUrl, nextUrlText, previousUrl, previousUrlText, count, totalPages, DummyMultipleJobProfileSearchResults(), "2 results found", "Test");

            var htmlDom = searchView.RenderAsHtml(jobProfileSearchViewModel);

            var result1 = htmlDom.DocumentNode.SelectNodes(".//*[@id='results']/div/div/ol/li[1]").FirstOrDefault();
            var result2 = htmlDom.DocumentNode.SelectNodes(".//*[@id='results']/div/div/ol/li[2]").FirstOrDefault();

            var rankId1 = result1.GetAttributeValue("data-ga-rank", "Attribute not found");
            var rankId2 = result2.GetAttributeValue("data-ga-rank", "Attribute not found");

            rankId1.Should().Be("1");
            rankId2.Should().Be("2");
        }
示例#9
0
        public void DFC324ForEmptySearchViewTest()
        {
            var searchPage = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchViewModel = GenerateDummyJobProfileSearchResultViewModel(1, null, null, null, null, 0, 0, null, "0 results found", "''");

            var htmlDom = searchPage.RenderAsHtml(jobProfileSearchViewModel);

            var searchTitle   = htmlDom.DocumentNode.SelectNodes("//h1[contains(@class, 'search-title')]").FirstOrDefault().InnerText;
            var searchBox     = htmlDom.DocumentNode.SelectNodes("//input[contains(@id, 'search-main')]");
            var resultMessage = htmlDom.DocumentNode.SelectNodes("//div[contains(@class, 'result-count')]").FirstOrDefault().InnerText;

            searchTitle.Should().NotBeNullOrEmpty();
            searchBox.Should().NotBeNullOrEmpty();
            resultMessage.Should().NotBeNullOrEmpty();
            resultMessage.Should().Contain("0 results found");
        }
示例#10
0
        public void DFC167ForPaginationControlTests(int pageNumber, string nextUrl, string nextUrlText, string previousUrl, string previousUrlText, int count, int totalPages, string resultsMessage, string searchTerm)
        {
            var searchView = new _MVC_Views_JobProfileSearchBox_SearchResult_cshtml();

            var jobProfileSearchViewModel = GenerateDummyJobProfileSearchResultViewModel(pageNumber, nextUrl, nextUrlText, previousUrl, previousUrlText, count, totalPages, DummyJobProfileSearchResultsWithAltTitle(), resultsMessage, searchTerm);

            var htmlDom = searchView.RenderAsHtml(jobProfileSearchViewModel);

            var    nextUrllocal = htmlDom.DocumentNode.SelectNodes("//a[contains(@class, 'dfc-code-search-nextlink')]");
            string nextUrlTextlocal;
            var    previousUrllocal = htmlDom.DocumentNode.SelectNodes("//a[contains(@class, 'dfc-code-search-previouslink')]");
            string previousUrlTextlocal;

            if (pageNumber == 1)
            {
                nextUrlTextlocal = htmlDom.DocumentNode.SelectNodes("//span[contains(@class, 'page-numbers')]").ElementAt(0).InnerText;

                nextUrllocal.Should().NotBeNullOrEmpty();
                nextUrlTextlocal.Should().Contain(pageNumber + 1 + " of " + totalPages);
                previousUrllocal.Should().BeNullOrEmpty();
            }
            else if (pageNumber == totalPages)
            {
                previousUrlTextlocal = htmlDom.DocumentNode.SelectNodes("//span[contains(@class, 'page-numbers')]").ElementAt(0).InnerText;

                nextUrllocal.Should().BeNullOrEmpty();
                previousUrllocal.Should().NotBeNullOrEmpty();
                previousUrlTextlocal.Should().Contain(pageNumber - 1 + " of " + totalPages);
            }
            else
            {
                nextUrlTextlocal     = htmlDom.DocumentNode.SelectNodes("//span[contains(@class, 'page-numbers')]").ElementAt(0).InnerText;
                previousUrlTextlocal = htmlDom.DocumentNode.SelectNodes("//span[contains(@class, 'page-numbers')]").ElementAt(1).InnerText;

                nextUrllocal.Should().NotBeNullOrEmpty();
                nextUrlTextlocal.Should().Contain(pageNumber + 1 + " of " + totalPages);
                previousUrllocal.Should().NotBeNullOrEmpty();
                previousUrlTextlocal.Should().Contain(pageNumber - 1 + " of " + totalPages);
            }
        }