public override void Setup()
        {
            base.Setup();

            SearchProvider.Setup(sp => sp.FindLocation(It.IsAny <string>()))
            .Returns <string>(l => new LocationsViewModel(new[] { new LocationViewModel {
                                                                      Name = l
                                                                  } }));

            var londonVacancies = new[]
            {
                new ApprenticeshipVacancySummaryViewModel {
                    Description = "A London Vacancy"
                }
            };

            var emptyVacancies = new ApprenticeshipVacancySummaryViewModel[0];

            //This order is important. Moq will run though all matches and pick the last one
            ApprenticeshipVacancyProvider.Setup(sp => sp.FindVacancies(It.IsAny <ApprenticeshipSearchViewModel>()))
            .Returns <ApprenticeshipSearchViewModel>(
                svm => new ApprenticeshipSearchResponseViewModel {
                Vacancies = emptyVacancies, VacancySearch = svm
            })
            .Callback <ApprenticeshipSearchViewModel>(svm => { _searchSentToSearchProvider = svm; });
            ApprenticeshipVacancyProvider.Setup(
                sp =>
                sp.FindVacancies(
                    It.Is <ApprenticeshipSearchViewModel>(svm => svm.Location == ACityWithOneSuggestedLocation)))
            .Returns <ApprenticeshipSearchViewModel>(
                svm => new ApprenticeshipSearchResponseViewModel {
                Vacancies = londonVacancies, VacancySearch = svm
            })
            .Callback <ApprenticeshipSearchViewModel>(svm => { _searchSentToSearchProvider = svm; });
        }
        public void LocationTypeShouldBeCopiedOver()
        {
            ApprenticeshipVacancyProvider.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(null, searchViewModel);

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

            response.ViewModel.VacancySearch.LocationType.Should().Be(ApprenticeshipLocationType.National);
        }
        public void ExactMatchFoundUsingVacancyReference()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Keywords = "VAC000123456"
            };

            ApprenticeshipVacancyProvider.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(null, searchViewModel);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Results.ExactMatchFound, false, true);
        }
        private ApprenticeshipVacancyProvider GetApprenticeshipVacancyProvider()
        {
            var searchProvider = new ApprenticeshipVacancyProvider(
                _apprenticeshipSearchService.Object,
                _candidateService.Object,
                _apprenticeshipMapper,
                _logService.Object,
                _candidateVacancyService.Object);

            return(searchProvider);
        }
        public void Ok()
        {
            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel
            {
                VacancyStatus = VacancyStatuses.Live
            };

            ApprenticeshipVacancyProvider.Setup(p => p.GetVacancyDetailViewModel(It.IsAny <Guid?>(), It.IsAny <int>())).Returns(vacancyDetailViewModel);

            var response = Mediator.Details(Id, null);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Details.Ok, true);
        }
        public void VacancyIsUnavailable_CandidateNotLoggedIn()
        {
            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel
            {
                VacancyStatus = VacancyStatuses.Unavailable
            };

            ApprenticeshipVacancyProvider.Setup(
                p => p.GetVacancyDetailViewModel(It.IsAny <Guid?>(), It.IsAny <int>())).Returns(vacancyDetailViewModel);

            var response = Mediator.Details(Id, null);

            response.AssertCodeAndMessage(ApprenticeshipSearchMediatorCodes.Details.VacancyNotFound);
        }
        public void Ok()
        {
            //Arrange
            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel();

            ApprenticeshipVacancyProvider.Setup(p => p.IncrementClickThroughFor(It.IsAny <int>()))
            .Returns(vacancyDetailViewModel);

            //Act
            var response = Mediator.RedirectToExternalWebsite(Id);

            //Assert
            response.AssertCode(ApprenticeshipSearchMediatorCodes.RedirectToExternalWebsite.Ok, true);
        }
        public void VacancyIsUnavailable_CandidateLoggedInAndHasPreviouslyAppliedForVacancy()
        {
            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel
            {
                CandidateApplicationStatus = ApplicationStatuses.Submitted,
                VacancyStatus = VacancyStatuses.Unavailable
            };

            ApprenticeshipVacancyProvider.Setup(
                p => p.GetVacancyDetailViewModel(It.IsAny <Guid?>(), It.IsAny <int>())).Returns(vacancyDetailViewModel);

            var response = Mediator.Details(Id, Guid.NewGuid());

            response.AssertCodeAndMessage(ApprenticeshipSearchMediatorCodes.Details.VacancyNotFound);
        }
        public void PopulateDistance()
        {
            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel
            {
                VacancyStatus = VacancyStatuses.Live
            };

            ApprenticeshipVacancyProvider.Setup(p => p.GetVacancyDetailViewModel(It.IsAny <Guid?>(), It.IsAny <int>())).Returns(vacancyDetailViewModel);

            UserDataProvider.Setup(udp => udp.Pop(CandidateDataItemNames.VacancyDistance)).Returns(VacancyDistance);
            UserDataProvider.Setup(udp => udp.Pop(CandidateDataItemNames.LastViewedVacancy)).Returns(VacancyType.Apprenticeship + "_" + Convert.ToString(Id));

            var response = Mediator.Details(Id, null);

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Details.Ok, true);
        }
        public void VacancyHasError()
        {
            const string message = "The vacancy has an error";

            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel
            {
                ViewModelMessage = message,
                VacancyStatus    = VacancyStatuses.Live
            };

            ApprenticeshipVacancyProvider.Setup(p => p.GetVacancyDetailViewModel(It.IsAny <Guid?>(), It.IsAny <int>())).Returns(vacancyDetailViewModel);

            var response = Mediator.Details(Id, null);

            response.AssertMessage(ApprenticeshipSearchMediatorCodes.Details.VacancyHasError, message, UserMessageLevel.Warning, true);
        }
        public void ErrorFindingVacancies()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = ACityWithOneSuggestedLocation
            };

            ApprenticeshipVacancyProvider.Setup(sp => sp.FindVacancies(It.IsAny <ApprenticeshipSearchViewModel>()))
            .Returns(new ApprenticeshipSearchResponseViewModel
            {
                ViewModelMessage = SomeErrorMessage
            });

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

            response.AssertMessage(ApprenticeshipSearchMediatorCodes.Results.HasError, SomeErrorMessage,
                                   UserMessageLevel.Warning, true);
        }
        public void IfTotalLocalHitsIsGreaterThanZero_LocationTypeIsNonNational()
        {
            var searchViewModel = new ApprenticeshipSearchViewModel
            {
                Location = ACityWithOneSuggestedLocation
            };

            ApprenticeshipVacancyProvider.Setup(sp => sp.FindVacancies(searchViewModel))
            .Returns(new ApprenticeshipSearchResponseViewModel
            {
                TotalLocalHits = 1,
                VacancySearch  = searchViewModel
            });

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

            response.AssertCode(ApprenticeshipSearchMediatorCodes.Results.Ok, true);
            response.ViewModel.VacancySearch.LocationType = ApprenticeshipLocationType.NonNational;
        }
        public void VacancyHasError()
        {
            //Arrange
            const string message = "The vacancy has an error";

            var vacancyDetailViewModel = new ApprenticeshipVacancyDetailViewModel
            {
                ViewModelMessage = message
            };

            ApprenticeshipVacancyProvider.Setup(p => p.IncrementClickThroughFor(It.IsAny <int>()))
            .Returns(vacancyDetailViewModel);

            //Act
            var response = Mediator.RedirectToExternalWebsite(Id);

            //Assert
            response.AssertMessage(ApprenticeshipSearchMediatorCodes.RedirectToExternalWebsite.VacancyHasError, message,
                                   UserMessageLevel.Warning, true);
        }
        public ApprenticeshipVacancyProvider Build()
        {
            var provider = new ApprenticeshipVacancyProvider(_vacancySearchService.Object, _candidateService.Object, _mapper, _logger, _candidateVacancyService.Object);

            return(provider);
        }