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); }
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); }
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); }
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); }
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); }
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); }
public void ShouldHaveErrorWhenLocationIsNotMatched() { var viewModel = new ApprenticeshipSearchViewModel { Location = "Test" }; var viewModelLocationValidator = new ApprenticeshipSearchViewModelLocationValidator(); viewModelLocationValidator.ShouldHaveValidationErrorFor(x => x.Location, viewModel); }
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); }
public void LocationValidationSuccessfulTests(string location) { var validator = new ApprenticeshipSearchViewModelServerValidator(); var viewModel = new ApprenticeshipSearchViewModel { Location = location }; validator.ShouldNotHaveValidationErrorFor(x => x.Location, viewModel); }
public ApprenticeshipSearchViewModel Build() { var viewModel = new ApprenticeshipSearchViewModel { SortTypes = SearchMediatorBase.GetSortTypes(), ResultsPerPageSelectList = SearchMediatorBase.GetResultsPerPageSelectList(5) }; return(viewModel); }
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(); }
public void NoSearchParameters() { var searchViewModel = new ApprenticeshipSearchViewModel { Location = string.Empty }; var response = Mediator.Results(searchViewModel); response.AssertValidationResult(ApprenticeshipSearchMediatorCodes.Results.ValidationError, true); }
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); }
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); }
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); }
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(); }
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()); }
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); }
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); }
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); }