public void GivenModelWithBirthDateIncluded_AndParentNameIncluded_AndSelectedCustomFields_AndSelectedServiceTypes_AndPermissionGrantsCustomFieldOnly_WhenMapData_ThenResultContainsOnlyDirectoryLevelData() { Student student = TestData.Students[0]; List <object> expected = new List <object> { student.School.Name, student.Grade, student.FullName, null, null, student.CustomFieldValues.First().Value, student.CustomFieldValues.Last().Value }; var model = new StudentProfileExportFieldDescriptor { BirthDateIncluded = true, ParentNameIncluded = true, SelectedCustomFields = new List <CustomField> { TestData.CustomFields[0], TestData.CustomFields[2] }, SelectedServiceTypes = new List <ServiceType> { TestData.ServiceTypes[1] } }; IViewStudentDetailPermission permission = MockRepository.GenerateMock <IViewStudentDetailPermission>(); permission.Expect(p => p.CustomFieldOnly).Return(true); PermissionFactory.Current.Expect(m => m.Create("StudentProfileExportMapData", student)).Return(permission); var actual = Target.MapData(model, student, User, MockUserAuditor); CollectionAssert.AreEqual(expected, actual.ToList()); }
public StudentDetailModel GenerateStudentDetailViewModel(EducationSecurityPrincipal user, int id) { Student student = StudentRepository.Items.Include(s => s.ApprovedProviders). Include("CustomFieldValues.CustomDataOrigin"). Include("CustomFieldValues.CustomField"). Include("Classes.Teacher"). Include("ServiceRequests.CreatingUser"). Include("ServiceRequests.ServiceType"). Include("ServiceRequests.Subject"). Include("ServiceRequests.FulfillmentDetails.FulfillmentStatus"). Include("ServiceRequests.FulfillmentDetails.CreatingUser"). Include("StudentAssignedOfferings.ServiceOffering.Provider"). Include("StudentAssignedOfferings.ServiceOffering.ServiceType"). Include("StudentAssignedOfferings.ServiceOffering.Program"). Include("StudentAssignedOfferings.CreatingUser"). Include(s => s.School). SingleOrDefault(i => i.Id == id); if (student == null) { throw new EntityNotFoundException("Requested student could not be found."); } IViewStudentDetailPermission permission = (IViewStudentDetailPermission)PermissionFactory.Current.Create("ViewStudentDetail", student); permission.GrantAccess(user); StudentDetailModel viewModel = new StudentDetailModel(); viewModel.OnlyUploadedCustomField = permission.CustomFieldOnly; List <CustomFieldValue> displayFields = new List <CustomFieldValue>(); if (permission.CustomFieldOnly) { displayFields = student.CustomFieldValues.Where(c => c.CustomDataOrigin.CreatingUserId == user.Identity.User.Id).ToList(); } else { foreach (var field in student.CustomFieldValues) { IPermission fieldPermission = PermissionFactory.Current.Create("ViewStudentCustomFieldData", field.CustomField); if ((field.CustomDataOrigin.CreatingUserId == user.Identity.User.Id) || (fieldPermission.TryGrantAccess(user))) { displayFields.Add(field); } } } PrivateHealthDataViewEventRepository.Add(Auditor.CreatePrivateHealthInfoViewEvent(user.Identity.User, displayFields.Where(c => c.CustomField is PrivateHealthField).ToList())); RepositoryContainer.Save(); student.CustomFieldValues = displayFields; viewModel.CopyFrom(student); if (permission.CustomFieldOnly) { viewModel.DateOfBirth = null; viewModel.Parents = null; viewModel.ServiceRequests = Enumerable.Empty <ServiceRequest>(); viewModel.StudentAssignedOfferings = Enumerable.Empty <StudentAssignedOffering>(); viewModel.Classes = Enumerable.Empty <Class>(); } return(viewModel); }
private string CreateNameString(Student student) { IViewStudentDetailPermission permission = (IViewStudentDetailPermission)PermissionFactory.Current.Create("CreateStudentNameString", student); if (permission.TryGrantAccess(User)) { return(string.Format(CultureInfo.CurrentCulture, "{0}|{1}", student.FullName, student.Id)); } return(string.Format(CultureInfo.CurrentCulture, "{0}", student.FullName)); }
public void GivenValidStudentId__WhenGenerateStudentDetailViewModel_ThenAttemptGrantAccess() { IViewStudentDetailPermission permission = MockRepository.GenerateMock <IViewStudentDetailPermission>(); PermissionFactory.Current.Expect(m => m.Create("ViewStudentDetail", Data.Students.Single(s => s.Id == 1))).Return(permission); foreach (var field in Data.Students.Single(s => s.Id == 1).CustomFieldValues.Select(c => c.CustomField)) { PermissionFactory.Current.Expect(m => m.Create("ViewStudentCustomFieldData", field)).Return(MockRepository.GenerateMock <IPermission>()); } Target.GenerateStudentDetailViewModel(User, 1); permission.AssertWasCalled(p => p.GrantAccess(User)); }
public void GivenValidStudentId_AndPermissionCustomFieldOnlyTrue_WhenGenerateStudentDetailViewModel_ThenViewModelContainsOnlyCustomFieldValuesByUser_AndViewModelOnlyUploadedCustomFieldSetTrue() { IViewStudentDetailPermission permission = MockRepository.GenerateMock <IViewStudentDetailPermission>(); permission.Expect(p => p.CustomFieldOnly).Return(true); PermissionFactory.Current.Expect(m => m.Create("ViewStudentDetail", Data.Students.Single(s => s.Id == 1))).Return(permission); User.Identity.User.Id = 1; var expected = Data.CustomFieldValues.Where(c => c.CustomDataOrigin.CreatingUserId == 1 && c.StudentId == 1); var actual = Target.GenerateStudentDetailViewModel(User, 1); Assert.IsTrue(actual.OnlyUploadedCustomField); Assert.IsTrue(actual.CustomData.Count() > 0); CollectionAssert.AreEquivalent(expected.Select(e => e.CustomField.Name).ToList(), actual.CustomData.Select(c => c.FieldName).ToList()); }
public void GivenValidStudentId_AndPermissionCustomFieldOnlyTrue_WhenGenerateStudentDetailViewModel_ThenViewModelDoesNotContainPrivateStudentData() { IViewStudentDetailPermission permission = MockRepository.GenerateMock <IViewStudentDetailPermission>(); permission.Expect(p => p.CustomFieldOnly).Return(true); PermissionFactory.Current.Expect(m => m.Create("ViewStudentDetail", Data.Students.Single(s => s.Id == 1))).Return(permission); User.Identity.User.Id = 1; var actual = Target.GenerateStudentDetailViewModel(User, 1); Assert.IsFalse(actual.DateOfBirth.HasValue); Assert.IsNull(actual.Parents); Assert.IsTrue(actual.ServiceRequests.Count() == 0); Assert.IsTrue(actual.StudentAssignedOfferings.Count() == 0); Assert.IsTrue(actual.Classes.Count() == 0); }
public void GivenPermissionDoesNotGrantAccess_WhenMapData_ThenOnlyDirectoryLevelInformationReturned() { Student student = TestData.Students[0]; List <object> expected = new List <object> { student.School.Name, student.Grade, student.FullName }; var model = new StudentProfileExportFieldDescriptor { SelectedServiceTypes = new List <ServiceType> { TestData.ServiceTypes[1] } }; IViewStudentDetailPermission permission = MockRepository.GenerateMock <IViewStudentDetailPermission>(); permission.Expect(p => p.GrantAccess(User)).Throw(new EntityAccessUnauthorizedException()); PermissionFactory.Current.Expect(m => m.Create("StudentProfileExportMapData", student)).Return(permission); var actual = Target.MapData(model, student, User, MockUserAuditor); CollectionAssert.AreEqual(expected, actual.ToList()); }
public IEnumerable <object> MapData(StudentProfileExportFieldDescriptor fieldConfiguration, Student data, EducationSecurityPrincipal user, IUserAuditor auditor) { if (data == null) { throw new ArgumentNullException("data"); } if (user == null) { throw new ArgumentNullException("user"); } if (auditor == null) { throw new ArgumentNullException("auditor"); } List <object> dataList = new List <object> { data.School.Name, data.Grade, data.FullName }; IViewStudentDetailPermission permission = (IViewStudentDetailPermission)PermissionFactory.Current.Create("StudentProfileExportMapData", data); if (permission.TryGrantAccess(user)) { if (!permission.CustomFieldOnly) { dataList.Add(data.StudentSISId); } MapStandardData(fieldConfiguration, data, dataList, permission.CustomFieldOnly); dataList.AddRange(fieldConfiguration.SelectedCustomFields.Select(f => FindLatestValue(data, f)).Select(v => v == null ? string.Empty : v.Value)); var fields = fieldConfiguration.SelectedCustomFields.Select(f => FindLatestValue(data, f)); if (fields.Where(f => f != null).ToList().Count() > 0) { user.Identity.User.PrivateHealthDataViewEvents.Add(auditor.CreatePrivateHealthInfoViewEvent(user.Identity.User, fields.Where(f => f != null).ToList())); } if (!permission.CustomFieldOnly) { dataList.AddRange(fieldConfiguration.SelectedServiceTypes.Select(serviceType => FindServicesOfferingNames(data, serviceType))); } } return(dataList); }
private string CreateStudentSISIdString(Student student) { IViewStudentDetailPermission permission = (IViewStudentDetailPermission)PermissionFactory.Current.Create("ViewStudentDetail", student); return(permission.TryGrantAccess(User) && !permission.CustomFieldOnly ? student.StudentSISId : ""); }