public void Ok_CandidateIsLoggedInAndHasNoSavedSearches() { // Arrange. var candidateId = Guid.NewGuid(); var candidateServiceProvider = new Mock <ICandidateServiceProvider>(); var savedSearches = new SavedSearchViewModel[] { }; candidateServiceProvider .Setup(p => p.GetSavedSearches(candidateId)).Returns(savedSearches); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; candidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var mediator = new ApprenticeshipSearchMediatorBuilder() .With(candidateServiceProvider).Build(); // Act. var response = mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false); // Assert. candidateServiceProvider.Verify(p => p.GetSavedSearches(candidateId), Times.Once); response.ViewModel.SavedSearches.Count().Should().Be(savedSearches.Length); response.Code.Should().Be(ApprenticeshipSearchMediatorCodes.Index.Ok); }
public void SearchMode_SavedSearches_AuthenticatedUserWithNoSavedSearchesTest() { var index = new Index(); var candidateId = Guid.NewGuid(); var mockViewModel = new List <SavedSearchViewModel>(); CandidateServiceProvider.Setup(mock => mock.GetSavedSearches(candidateId)).Returns(mockViewModel); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; CandidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var searchViewModel = Mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false).ViewModel; var view = index.RenderAsHtml(CreateMockHttpContext(true), searchViewModel); var link = view.GetElementbyId("saved-searches-tab-control"); link.Should().NotBeNull(); link.Attributes["class"].Value.Should().Contain(" active"); view.GetElementbyId("run-saved-search-button").Should().BeNull(); view.GetElementbyId("saved-searches-settings-link").Should().BeNull(); }
private int InternalCreateCandidate(Domain.Entities.Candidates.Candidate candidate) { var request = CreateRequest(candidate); var response = default(CreateCandidateResponse); _service.Use("SecureService", client => response = client.CreateCandidate(request)); if (response == null || (response.ValidationErrors != null && response.ValidationErrors.Any())) { string message; if (response == null) { message = "No response"; } else { message = string.Format("{0} validation error(s): {1}", response.ValidationErrors.Count(), JsonConvert.SerializeObject(response, Formatting.None)); } throw new DomainException(CandidateErrorCodes.CreateCandidateFailed, new { message, candidateId = candidate.EntityId }); } return(response.CandidateId); }
public void ShouldRenderSavedSearchPromptWhenCandidateHasNoSavedSearches() { // Arrange. var @partial = new savedSearches(); var candidateId = Guid.NewGuid(); var mockViewModel = new List <SavedSearchViewModel>(); CandidateServiceProvider.Setup(mock => mock.GetSavedSearches(candidateId)).Returns(mockViewModel); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; CandidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var indexViewModel = Mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false).ViewModel; // Act. var view = @partial.RenderAsHtml(indexViewModel); // Assert. var list = view.GetElementbyId("saved-searches-list"); var prompt = view.GetElementbyId("saved-searches-prompt"); list.Should().BeNull(); prompt.Should().NotBeNull(); }
public int CreateCandidate(Domain.Entities.Candidates.Candidate candidate) { var context = new { candidateId = candidate.EntityId }; try { _logger.Debug("Calling Legacy.CreateCandidate for candidate id='{0}'", candidate.EntityId); var legacyCandidateId = InternalCreateCandidate(candidate); _logger.Debug("Legacy.CreateCandidate succeeded for candidate id='{0}', legacy candidate id='{1}'", candidate.EntityId, legacyCandidateId); return(legacyCandidateId); } catch (DomainException e) { _logger.Error(e); throw; } catch (BoundaryException e) { _logger.Error(e, context); throw new DomainException(CandidateErrorCodes.CreateCandidateFailed, e, context); } catch (Exception e) { _logger.Error(e, context); throw; } }
public void ShouldRenderTabAsActiveWhenSearchModeIsSavedSearches(int savedSearchCount) { // Arrange. var @partial = new savedSearches(); var candidateId = Guid.NewGuid(); var mockViewModel = new Fixture().Build <SavedSearchViewModel>().CreateMany(savedSearchCount); CandidateServiceProvider.Setup(mock => mock.GetSavedSearches(candidateId)).Returns(mockViewModel); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; CandidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var viewModel = Mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false).ViewModel; // Act. var view = @partial.RenderAsHtml(viewModel); // Assert. view.GetElementbyId("saved-searches").Attributes["class"].Value.Contains(" active").Should().BeTrue(); }
public void ShouldRenderSavedSearchesList(int savedSearchCount) { // Arrange. var @partial = new savedSearches(); var candidateId = Guid.NewGuid(); var mockViewModel = new Fixture().Build <SavedSearchViewModel>().CreateMany(savedSearchCount).ToList(); CandidateServiceProvider.Setup(mock => mock.GetSavedSearches(candidateId)).Returns(mockViewModel); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; CandidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var indexViewModel = Mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false).ViewModel; // Act. var view = @partial.RenderAsHtml(indexViewModel); // Assert. var list = view.GetElementbyId("saved-searches-list"); list.Should().NotBeNull(); list.ChildNodes.Count(node => node.Name == "li").Should().Be(savedSearchCount); foreach (var savedSearchViewModel in mockViewModel) { var listItemId = string.Format("{0}-{1}", "saved-search", savedSearchViewModel.Id); var listItemLabelId = string.Format("{0}-{1}", "saved-search-label", savedSearchViewModel.Id); var listItem = view.GetElementbyId(listItemId); listItem.Should().NotBeNull(); listItem.GetAttributeValue("value", null).Should().Be(savedSearchViewModel.Id.ToString()); var listItemLabel = view.GetElementbyId(listItemLabelId); listItemLabel.Should().NotBeNull(); listItemLabel.InnerText.Should().Be(savedSearchViewModel.Name); } }
public void ShouldNotRenderSubcategoriesFilter(int savedSearchCount) { // Arrange. var @partial = new savedSearches(); var candidateId = Guid.NewGuid(); var mockViewModel = new Fixture() .Build <SavedSearchViewModel>() .With(each => each.SubCategoriesFullNames, null) .CreateMany(savedSearchCount).ToList(); CandidateServiceProvider.Setup(mock => mock.GetSavedSearches(candidateId)).Returns(mockViewModel); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; CandidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var indexViewModel = Mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false).ViewModel; // Act. var view = @partial.RenderAsHtml(indexViewModel); // Assert. var list = view.GetElementbyId("saved-searches-list"); list.Should().NotBeNull(); list.ChildNodes.Count(node => node.Name == "li").Should().Be(savedSearchCount); foreach (var savedSearchViewModel in mockViewModel) { var id = string.Format("{0}-{1}", "saved-search-subcategories", savedSearchViewModel.Id); var element = view.GetElementbyId(id); element.Should().BeNull(); } }
private static CreateCandidateRequest CreateRequest(Domain.Entities.Candidates.Candidate candidate) { return(new CreateCandidateRequest { Candidate = new Candidate { EmailAddress = candidate.RegistrationDetails.EmailAddress, FirstName = candidate.RegistrationDetails.FirstName, MiddleName = candidate.RegistrationDetails.MiddleNames, Surname = candidate.RegistrationDetails.LastName, DateOfBirth = candidate.RegistrationDetails.DateOfBirth.Date, AddressLine1 = candidate.RegistrationDetails.Address.AddressLine1, AddressLine2 = candidate.RegistrationDetails.Address.AddressLine2, AddressLine3 = candidate.RegistrationDetails.Address.AddressLine3, AddressLine4 = candidate.RegistrationDetails.Address.AddressLine4, TownCity = "N/A", Postcode = candidate.RegistrationDetails.Address.Postcode, LandlineTelephone = candidate.RegistrationDetails.PhoneNumber, MobileTelephone = string.Empty } }); }
public void Ok_CandidateIsLoggedInAndHasSavedSearches(int savedSearchCount) { // Arrange. var candidateId = Guid.NewGuid(); var candidateServiceProvider = new Mock <ICandidateServiceProvider>(); var savedSearches = new Fixture() .Build <SavedSearchViewModel>() .CreateMany(savedSearchCount); candidateServiceProvider .Setup(p => p.GetSavedSearches(candidateId)).Returns(savedSearches); var candidate = new Domain.Entities.Candidates.Candidate { RegistrationDetails = new RegistrationDetails { Address = new Address { Postcode = "CANDIDATE POSTCODE" } } }; candidateServiceProvider .Setup(p => p.GetCandidate(candidateId)).Returns(candidate); var mediator = new ApprenticeshipSearchMediatorBuilder() .With(candidateServiceProvider).Build(); // Act. var response = mediator.Index(candidateId, ApprenticeshipSearchMode.SavedSearches, false); // Assert. candidateServiceProvider.Verify(p => p.GetSavedSearches(candidateId), Times.Once); response.ViewModel.SavedSearches.Count().Should().Be(savedSearchCount); response.ViewModel.SavedSearches.Should().BeInDescendingOrder(each => each.DateCreated); }
public IEnumerable <ApplicationStatusSummary> GetCandidateApplicationStatuses(Candidate candidate) { var context = new { candidateId = candidate.EntityId }; try { _logger.Debug("Calling Legacy.GetCandidateInfo for candidate '{0}'", candidate.EntityId); var applicationStatuses = InternalGetCandidateApplicationStatuses(candidate); _logger.Debug("Candidate applications were successfully retrieved from Legacy.GetCandidateInfo ({0})", applicationStatuses.Count()); return(applicationStatuses); } catch (DomainException e) { _logger.Error(e); throw; } catch (BoundaryException e) { _logger.Error(e, context); throw new DomainException(ErrorCodes.GetCandidateInfoServiceFailed, e, context); } catch (Exception e) { _logger.Error(e, context); throw; } }
private IList <ApplicationStatusSummary> InternalGetCandidateApplicationStatuses(Candidate candidate) { var request = new GetCandidateInfoRequest { CandidateId = candidate.LegacyCandidateId }; var response = default(GetCandidateInfoResponse); _service.Use("SecureService", client => response = client.GetCandidateInfo(request).GetCandidateInfoResponse); if (response == null || (response.ValidationErrors != null && response.ValidationErrors.Any())) { string message; if (response == null) { message = "No response"; } else { message = string.Format("{0} validation error(s): {1}", response.ValidationErrors.Count(), JsonConvert.SerializeObject(response, Formatting.None)); } throw new DomainException(ErrorCodes.GetCandidateInfoServiceFailed, new { message, candidateId = candidate.EntityId, legacyCandidateId = candidate.LegacyCandidateId }); } return(_mapper.Map <CandidateApplication[], IEnumerable <ApplicationStatusSummary> >(response.CandidateApplications).ToList()); }