public void SavedSearchNotFound_InvalidSavedSearchId()
        {
            // Arrange.
            var candidateId = Guid.NewGuid();
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            var viewModel = new ApprenticeshipSearchViewModel
            {
                SavedSearchId = "X"
            };

            var mediator = new ApprenticeshipSearchMediatorBuilder()
                           .With(candidateServiceProvider).Build();

            // Act.
            var response = mediator.RunSavedSearch(candidateId, viewModel);

            // Assert.
            candidateServiceProvider.Verify(p => p.GetSavedSearch(It.IsAny <Guid>(), It.IsAny <Guid>()), Times.Never);

            response.AssertMessage(
                ApprenticeshipSearchMediatorCodes.SavedSearch.SavedSearchNotFound,
                ApprenticeshipsSearchPageMessages.SavedSearchNotFound,
                UserMessageLevel.Error,
                false);
        }
Exemple #2
0
        public async Task <ActionResult> Results(ApprenticeshipSearchViewModel model)
        {
            return(await Task.Run <ActionResult>(() =>
            {
                ViewBag.SearchReturnUrl = (Request != null && Request.Url != null) ? Request.Url.PathAndQuery : null;

                var response = _apprenticeshipSearchMediator.Results(model);

                switch (response.Code)
                {
                case ApprenticeshipSearchMediatorCodes.Results.ValidationError:
                    ModelState.Clear();
                    response.ValidationResult.AddToModelState(ModelState, string.Empty);
                    return View(response.ViewModel);

                case ApprenticeshipSearchMediatorCodes.Results.HasError:
                    ModelState.Clear();
                    SetUserMessage(response.Message.Text, response.Message.Level);
                    return View(response.ViewModel);

                case ApprenticeshipSearchMediatorCodes.Results.ExactMatchFound:
                    ViewBag.SearchReturnUrl = null;
                    return RedirectToAction("Details", response.Parameters);

                case ApprenticeshipSearchMediatorCodes.Results.Ok:
                    ModelState.Remove("Location");
                    ModelState.Remove("Latitude");
                    ModelState.Remove("Longitude");
                    ModelState.Remove("SortType");
                    return View(response.ViewModel);
                }

                throw new InvalidMediatorCodeException(response.Code);
            }));
        }
        public void Ok()
        {
            // Arrange.
            var candidateId              = Guid.NewGuid();
            var savedSearchId            = Guid.NewGuid();
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            var viewModel = new ApprenticeshipSearchViewModel
            {
                SavedSearchId = savedSearchId.ToString()
            };

            var savedSearch = new Fixture()
                              .Build <SavedSearchViewModel>()
                              .With(each => each.ViewModelMessage, null)
                              .Create();

            candidateServiceProvider
            .Setup(p => p.GetSavedSearch(candidateId, savedSearchId)).Returns(savedSearch);

            var mediator = new ApprenticeshipSearchMediatorBuilder()
                           .With(candidateServiceProvider).Build();

            // Act.
            var response = mediator.RunSavedSearch(candidateId, viewModel);

            // Assert.
            candidateServiceProvider.Verify(p => p.GetSavedSearch(candidateId, savedSearchId), Times.Once);

            response.Code.Should().Be(ApprenticeshipSearchMediatorCodes.SavedSearch.Ok);
            response.ViewModel.Should().Be(savedSearch);
        }
Exemple #4
0
        public void ExactMatchFoundUsingVacancyReference()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Keywords = "VAC000123456"
            };

            SearchProvider.Setup(sp => sp.FindVacancies(It.IsAny <ApprenticeshipSearchViewModel>()))
            .Returns(new ApprenticeshipSearchResponseViewModel
            {
                ExactMatchFound = true,
                VacancySearch   = searchViewModel,
                Vacancies       = new List <ApprenticeshipVacancySummaryViewModel>
                {
                    new ApprenticeshipVacancySummaryViewModel
                    {
                        Id = 123456
                    }
                }
            });

            var response = Mediator.Results(searchViewModel);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Results.ExactMatchFound, false, true);
        }
Exemple #5
0
        public void LocationTypeShouldBeCopiedOver()
        {
            SearchProvider.Setup(sp => sp.FindVacancies(It.IsAny <ApprenticeshipSearchViewModel>()))
            .Callback <ApprenticeshipSearchViewModel>(svm =>
            {
                svm.LocationType            = ApprenticeshipLocationType.National;
                _searchSentToSearchProvider = svm;
            })
            .Returns <ApprenticeshipSearchViewModel>(svm => new ApprenticeshipSearchResponseViewModel {
                Vacancies = new ApprenticeshipVacancySummaryViewModel[0], VacancySearch = svm
            });

            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Keywords     = AKeyword,
                Location     = ACityWithOneSuggestedLocation,
                LocationType = ApprenticeshipLocationType.NonNational,
                Category     = "1",
                SearchMode   = ApprenticeshipSearchMode.Category
            };

            var response = Mediator.Results(searchViewModel);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Results.Ok, true);

            response.ViewModel.VacancySearch.LocationType.Should().Be(ApprenticeshipLocationType.National);
        }
        public void RunSaveSearchFailed()
        {
            // Arrange.
            var candidateId              = Guid.NewGuid();
            var savedSearchId            = Guid.NewGuid();
            var candidateServiceProvider = new Mock <ICandidateServiceProvider>();

            var viewModel = new ApprenticeshipSearchViewModel
            {
                SavedSearchId = savedSearchId.ToString()
            };

            candidateServiceProvider
            .Setup(p => p.GetSavedSearch(candidateId, savedSearchId))
            .Returns(new SavedSearchViewModel
            {
                ViewModelMessage = "Error"
            });

            var mediator = new ApprenticeshipSearchMediatorBuilder()
                           .With(candidateServiceProvider).Build();

            // Act.
            var response = mediator.RunSavedSearch(candidateId, viewModel);

            // Assert.
            candidateServiceProvider.Verify(p => p.GetSavedSearch(candidateId, savedSearchId), Times.Once);

            response.AssertMessage(
                ApprenticeshipSearchMediatorCodes.SavedSearch.RunSaveSearchFailed,
                ApprenticeshipsSearchPageMessages.RunSavedSearchFailed,
                UserMessageLevel.Error,
                true);
        }
Exemple #7
0
        private static ApprenticeshipSearchViewModel GetSearchModel(ApprenticeshipSearchViewModel model)
        {
            //Create a new search view model based on the search mode and user data
            var searchModel = new ApprenticeshipSearchViewModel(model);

            switch (searchModel.SearchMode)
            {
            case ApprenticeshipSearchMode.Keyword:
                searchModel.Category      = null;
                searchModel.SubCategories = null;
                break;

            case ApprenticeshipSearchMode.Category:
                searchModel.Keywords   = null;
                searchModel.Categories = model.Categories;
                break;

            case ApprenticeshipSearchMode.SavedSearches:
                searchModel.Keywords      = null;
                searchModel.Category      = null;
                searchModel.SubCategories = null;
                break;
            }

            return(searchModel);
        }
Exemple #8
0
        public void ShouldNotHaveErrorWhenLocationMatched()
        {
            var viewModel = new ApprenticeshipSearchViewModel {
                Location = "Test", Latitude = 0.1d, Longitude = 1.0d
            };
            var viewModelClientValidator = new ApprenticeshipSearchViewModelClientValidator();

            viewModelClientValidator.ShouldNotHaveValidationErrorFor(x => x.Location, viewModel);
        }
Exemple #9
0
        public void ShouldHaveErrorWhenLocationIsNotMatched()
        {
            var viewModel = new ApprenticeshipSearchViewModel {
                Location = "Test"
            };
            var viewModelLocationValidator = new ApprenticeshipSearchViewModelLocationValidator();

            viewModelLocationValidator.ShouldHaveValidationErrorFor(x => x.Location, viewModel);
        }
Exemple #10
0
        public void ShouldHaveErrorWhenLocationIsUnder2Characters()
        {
            var viewModel = new ApprenticeshipSearchViewModel {
                Location = "x", Latitude = 0.1d, Longitude = 1.0d
            };
            var viewModelClientValidator = new ApprenticeshipSearchViewModelClientValidator();

            viewModelClientValidator.ShouldHaveValidationErrorFor(x => x.Location, viewModel);
        }
Exemple #11
0
        public void LocationValidationSuccessfulTests(string location)
        {
            var validator = new ApprenticeshipSearchViewModelServerValidator();
            var viewModel = new ApprenticeshipSearchViewModel {
                Location = location
            };

            validator.ShouldNotHaveValidationErrorFor(x => x.Location, viewModel);
        }
Exemple #12
0
        public ApprenticeshipSearchViewModel Build()
        {
            var viewModel = new ApprenticeshipSearchViewModel
            {
                SortTypes = SearchMediatorBase.GetSortTypes(),
                ResultsPerPageSelectList = SearchMediatorBase.GetResultsPerPageSelectList(5)
            };

            return(viewModel);
        }
Exemple #13
0
        public void ValidateShouldReturnTrueWhenMatch()
        {
            var viewModel = new ApprenticeshipSearchViewModel {
                Location = "Test", Latitude = 0.1d, Longitude = 1.0d
            };
            var viewModelClientValidator = new ApprenticeshipSearchViewModelClientValidator();

            var test = viewModelClientValidator.Validate(viewModel);

            test.IsValid.Should().BeTrue();
        }
Exemple #14
0
        public void NoSearchParameters()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = string.Empty
            };

            var response = Mediator.Results(searchViewModel);

            response.AssertValidationResult(ApprenticeshipSearchMediatorCodes.Results.ValidationError, true);
        }
Exemple #15
0
        public void LocationRequiredIfKeywordIsNotVacancyReferenceNumber(string keywords)
        {
            var validator = new ApprenticeshipSearchViewModelServerValidator();
            var viewModel = new ApprenticeshipSearchViewModel {
                Keywords = keywords
            };

            validator.Validate(viewModel).IsValid.Should().BeFalse();
            validator.ShouldHaveValidationErrorFor(x => x.Location, viewModel);
            validator.ShouldNotHaveValidationErrorFor(x => x.Keywords, viewModel);
        }
        public void SavedSearchesModeValidationError()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                SavedSearchId = string.Empty,
                SearchMode    = ApprenticeshipSearchMode.SavedSearches
            };

            var response = Mediator.SearchValidation(Guid.NewGuid(), searchViewModel);

            response.AssertValidationResult(ApprenticeshipSearchMediatorCodes.SearchValidation.ValidationError, true);
        }
        public void SavedSearchesModeRunSavedSearch()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                SavedSearchId = Guid.NewGuid().ToString(),
                SearchMode    = ApprenticeshipSearchMode.SavedSearches
            };

            var response = Mediator.SearchValidation(Guid.NewGuid(), searchViewModel);

            response.AssertCodeAndMessage(ApprenticeshipSearchMediatorCodes.SearchValidation.RunSavedSearch);
        }
        public void SavedSearchesModeCandidateNotLoggedIn()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                SavedSearchId = Guid.NewGuid().ToString(),
                SearchMode    = ApprenticeshipSearchMode.SavedSearches
            };

            var response = Mediator.SearchValidation(null, searchViewModel);

            response.AssertCodeAndMessage(ApprenticeshipSearchMediatorCodes.SearchValidation.CandidateNotLoggedIn);
        }
        public void SaveLocationSearchToCookie()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = ACityWithOneSuggestedLocation
            };

            UserDataProvider.Setup(x => x.Push(It.IsAny <string>(), It.IsAny <string>()));
            Mediator.Results(null, searchViewModel);
            UserDataProvider.Verify(
                x => x.Push(UserDataItemNames.LastSearchedLocation, ACityWithOneSuggestedLocation + "|0|0"), Times.Once);
        }
        public void CategoryModeValidationError()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Category   = string.Empty,
                Location   = string.Empty,
                SearchMode = ApprenticeshipSearchMode.Category
            };

            var response = Mediator.SearchValidation(searchViewModel);

            response.AssertValidationResult(ApprenticeshipSearchMediatorCodes.SearchValidation.ValidationError, true);
        }
Exemple #21
0
        public void LocationNotRequiredIfSearchFieldIsVacancyReferenceNumber(string keywords)
        {
            var validator = new ApprenticeshipSearchViewModelServerValidator();
            var viewModel = new ApprenticeshipSearchViewModel
            {
                Keywords    = keywords,
                SearchField = ApprenticeshipSearchField.ReferenceNumber.ToString()
            };

            validator.Validate(viewModel).IsValid.Should().BeTrue();
            validator.ShouldNotHaveValidationErrorFor(x => x.Location, viewModel);
            validator.ShouldNotHaveValidationErrorFor(x => x.Keywords, viewModel);
        }
Exemple #22
0
        public void LocationRequiredIfKeywordIsVacancyReferenceNumberButFieldIsntValidForVrn(string searchField)
        {
            var validator = new ApprenticeshipSearchViewModelServerValidator();
            var viewModel = new ApprenticeshipSearchViewModel
            {
                Keywords    = "VAC000123456",
                SearchField = searchField
            };

            validator.Validate(viewModel).IsValid.Should().BeFalse();
            validator.ShouldHaveValidationErrorFor(x => x.Location, viewModel);
            validator.ShouldNotHaveValidationErrorFor(x => x.Keywords, viewModel);
        }
        public void KeywordModeValidationError()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Keywords   = string.Empty,
                Location   = string.Empty,
                SearchMode = ApprenticeshipSearchMode.Keyword
            };

            var response = Mediator.SearchValidation(null, searchViewModel);

            response.AssertValidationResult(ApprenticeshipSearchMediatorCodes.SearchValidation.ValidationError, true);
        }
        public void SubcategoriesAreNormalizedToNewFormat()
        {
            const string oldFormattedSubcategoryCode = "490";
            const string expectedSubcategoryCode     = "FW.490";

            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                SubCategories = new[] { oldFormattedSubcategoryCode }
            };

            var response = Mediator.Results(null, searchViewModel);

            response.ViewModel.VacancySearch.SubCategories.ShouldBeEquivalentTo(new[] { expectedSubcategoryCode });
        }
        public void CategoryIsNormalizedToNewFormat()
        {
            const string oldFormattedCategoryCode = "HBY";
            const string expectedCategoryCode     = "SSAT1.HBY";

            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Category = oldFormattedCategoryCode
            };

            var response = Mediator.Results(null, searchViewModel);

            response.ViewModel.VacancySearch.Category.Should().Be(expectedCategoryCode);
        }
Exemple #26
0
        private static void RemoveInvalidSubCategories(ApprenticeshipSearchViewModel model)
        {
            if (string.IsNullOrEmpty(model.Category) || model.SubCategories == null || model.Categories == null)
            {
                return;
            }
            var selectedCategory = model.Categories.SingleOrDefault(c => c.CodeName == model.Category);

            if (selectedCategory == null)
            {
                return;
            }
            model.SubCategories = model.SubCategories.Where(c => selectedCategory.SubCategories.Any(sc => sc.CodeName == c)).ToArray();
        }
Exemple #27
0
        public void RecentlyAddedSortOption()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = ACityWithOneSuggestedLocation
            };

            var response = Mediator.Results(searchViewModel);


            var viewModel = response.ViewModel;

            viewModel.SortTypes.Last().Text.Should().Be("Recently added");
            viewModel.SortTypes.Last().Value.Should().Be(VacancySearchSortType.RecentlyAdded.ToString());
        }
Exemple #28
0
        public void LocationResultIsNotValid()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = ACityWithoutSuggestedLocations
            };

            SearchProvider.Setup(sp => sp.FindLocation(ACityWithoutSuggestedLocations))
            .Returns(() => new LocationsViewModel());

            var response = Mediator.Results(searchViewModel);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Results.Ok, true);
            response.ViewModel.VacancySearch.Should().Be(searchViewModel);
        }
Exemple #29
0
        public void ShouldShowAMessageIfAnErrorOccursWhileFindingSuggestedLocations()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = ACityWithMoreThanOneSuggestedLocation
            };

            SearchProvider.Setup(sp => sp.FindLocation(ACityWithMoreThanOneSuggestedLocation))
            .Returns(() => new LocationsViewModel {
                ViewModelMessage = SomeErrorMessage
            });

            var response = Mediator.Results(searchViewModel);

            response.AssertMessage(ApprenticeshipSearchMediatorCodes.Results.HasError, SomeErrorMessage, UserMessageLevel.Warning, true);
        }
Exemple #30
0
        public void IfTheLocationIsNationalAndThereAreNoKeywords_SortTypeShouldBeClosingDate()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location     = ACityWithOneSuggestedLocation,
                LocationType = ApprenticeshipLocationType.National,
                SortType     = VacancySearchSortType.Distance,
                SearchAction = SearchAction.LocationTypeChanged
            };

            var response = Mediator.Results(searchViewModel);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Results.Ok, true);

            response.ViewModel.VacancySearch.SortType.Should().Be(VacancySearchSortType.ClosingDate);
        }