public void GivenModelErrors_WhenPostAddProviders_ThenViewModelGetsPopulated() { AddStudentApprovalModel expected = new AddStudentApprovalModel(); Target.ModelState.AddModelError("whatever", "this is an error"); PartialViewResult result = Target.AddProviders(expected) as PartialViewResult; MockLogicManager.AssertWasCalled(m => m.PopulateViewModelLists(expected)); }
public void GivenLogicManagerGeneratesViewModel_WhenGetAddProviders_ThenViewResultContainsViewModel() { AddStudentApprovalModel expected = new AddStudentApprovalModel(); MockLogicManager.Expect(m => m.GenerateAddStudentApprovalViewModel(1)).Return(expected); PartialViewResult actual = Target.AddProviders(1) as PartialViewResult; actual.AssertGetViewModel(expected); }
public ActionResult AddProviders(AddStudentApprovalModel viewModel) { if (ModelState.IsValid) { LogicManager.AddProviders(viewModel); return Json(true); } LogicManager.PopulateViewModelLists(viewModel); return PartialView(viewModel); }
public void GivenModelErrors_WhenPostAddProviders_ThenViewResultReturnedWithViewModel() { AddStudentApprovalModel expected = new AddStudentApprovalModel(); Target.ModelState.AddModelError("whatever", "this is an error"); PartialViewResult result = Target.AddProviders(expected) as PartialViewResult; result.AssertGetViewModel(expected); }
public void GivenViewModelWithValidStudentId_AndValidListOfProviders_WhenAddProviders_ThenAddLinkCalledBetweenStudentAndAllSelectedProviders() { var studentId = 1; int[] providerIds = new[] { 1, 2 }; Student expectedStudent = Repositories.MockStudentRepository.Items.Where(s => s.Id == studentId).Single(); IEnumerable<Provider> expectedProviders = Repositories.MockProviderRepository.Items.Where(p => providerIds.Contains(p.Id)); var viewModel = new AddStudentApprovalModel { StudentId = studentId, ProvidersToAdd = providerIds }; Target.AddProviders(viewModel); foreach (Provider expectedProvider in expectedProviders) { Repositories.MockStudentRepository.AssertWasCalled(m => m.AddLink(expectedStudent, expectedProvider)); } }
public void GivenViewModelWithValidStudentId_AndValidListOfProviders_WhenAddProviders_ThenSaveChanges() { var viewModel = new AddStudentApprovalModel { StudentId = 1, ProvidersToAdd = new[] { 1, 2 } }; Target.AddProviders(viewModel); Repositories.MockRepositoryContainer.AssertWasCalled(m => m.Save()); }
public void GivenViewModelWithValidStudentId_AndSingleSelectedProviderIsInvalid_WhenAddProviders_ThenThrowException() { AddStudentApprovalModel viewModel = new AddStudentApprovalModel { StudentId = 1, ProvidersToAdd = new[] { 100 } }; Target.ExpectException<EntityNotFoundException>(() => Target.AddProviders(viewModel)); }
public void GivenViewModelWithInvalidStudentId_WhenAddProviders_ThenThrowException() { AddStudentApprovalModel viewModel = new AddStudentApprovalModel { StudentId = 100 }; Target.ExpectException<EntityNotFoundException>(() => Target.AddProviders(viewModel)); }
public void PopulateViewModelLists(AddStudentApprovalModel viewModel) { var student = StudentRepository.Items.Include(s => s.ApprovedProviders).SingleOrDefault(s => s.Id == viewModel.StudentId); if (student == null) { throw new EntityNotFoundException("Student with the specified identifier was not found."); } IEnumerable<Provider> providersNotYetApproved = ProviderRepository.Items; foreach (Provider studentProvider in student.ApprovedProviders) { providersNotYetApproved = providersNotYetApproved.Where(p => p.Id != studentProvider.Id); } viewModel.Providers = new MultiSelectList(providersNotYetApproved, "Id", "Name"); }
public AddStudentApprovalModel GenerateAddStudentApprovalViewModel(int id) { var viewModel = new AddStudentApprovalModel(); viewModel.StudentId = id; PopulateViewModelLists(viewModel); return viewModel; }
public void AddProviders(AddStudentApprovalModel viewModel) { if (viewModel == null) { throw new ArgumentNullException("viewModel"); } var student = StudentRepository.Items.SingleOrDefault(s => s.Id == viewModel.StudentId); if (student == null) { throw new EntityNotFoundException("Student with specified identifier was not found."); } var selectedProviders = ProviderRepository.Items.Where(p => viewModel.ProvidersToAdd.Contains(p.Id)).ToList(); if (selectedProviders.Count < viewModel.ProvidersToAdd.Count()) { throw new EntityNotFoundException("At least one provider selected cannot be associated with the student because it was not found using the given identifier."); } foreach (Provider provider in selectedProviders) { StudentRepository.AddLink(student, provider); } RepositoryContainer.Save(); }