コード例 #1
0
		public void SaveAppraiserUser_should_throw_exception_if_users_role_is_illegal()
		{
			var viewContext = new ViewContext();
			viewContext.HttpContext = MockHttpContext.FakeHttpContext();
			IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null);
			var dvsAdminRole = Singletones.ReferenceManager.GetRole(RoleType.DvsAdmin);
			viewContext.HttpContext.User.IsInRole(dvsAdminRole.RoleType.ToString()).Returns(true);


			_target.CommitProviderInstance = Substitute.For<ICommitProvider>();
			_target.SetFakeControllerContext(viewContext.HttpContext);

			var addressViewModel = new AddressViewModel();
			var appraiserUserContactViewModel = new AppraiserUserContactViewModel { PhysicalAddress = addressViewModel };
			var userModel = new AppraiserUserCreateViewModel()
			{
				GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.DvsSuperAdmin },
				Contact = appraiserUserContactViewModel,
			};
			var companyModel = new AppraiserUserCompanyInfoViewModel();

			// act
			_target.Invoking(a => a.SaveAppraiserUser(userModel, companyModel, true)).ShouldThrow<ArgumentException>();
		}
コード例 #2
0
		public void SaveAppraiserUser_should_throw_exception_if_company_admin_assigns_user_to_inactive_branch()
		{
			var companyInfo = new AppraiserUserCompanyInfoViewModel() { CompanyID = 1 };
			companyInfo.Branches = new List<AppraiserUserCompanyInfoBranchViewModel>(new AppraiserUserCompanyInfoBranchViewModel[]
			{
				new AppraiserUserCompanyInfoBranchViewModel() { BranchID = 1, Status = AppraisalCompanyStatus.Inactive}
			});
			var companyAdminRole = Singletones.ReferenceManager.GetRole(RoleType.AppraisalCompanyAdmin);
			User user = new User() { Roles = new List<Role>(new Role[] { companyAdminRole }) };
			_userManager.GetByEmail(Arg.Any<string>()).Returns(user);
			_appraiserService.GetAppraiserCompanyInfo(Arg.Any<string>()).Returns(companyInfo);
			_companyService.GetAppraisalCompanyDetails(Arg.Any<int>()).Returns(new AppraisalCompanyDetailsViewModel() { Status = AppraisalCompanyStatus.Applied });

			var viewContext = new ViewContext();
			viewContext.HttpContext = MockHttpContext.FakeHttpContext();
			IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null);
			viewContext.HttpContext.User.IsInRole(companyAdminRole.RoleType.ToString()).Returns(true);


			_target.CommitProviderInstance = Substitute.For<ICommitProvider>();
			_target.SetFakeControllerContext(viewContext.HttpContext);

			var addressViewModel = new AddressViewModel();
			var appraiserUserContactViewModel = new AppraiserUserContactViewModel { PhysicalAddress = addressViewModel };
			var userModel = new AppraiserUserCreateViewModel()
			{
				GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.Appraiser },
				Contact = appraiserUserContactViewModel,
			};
			var companyModel = new AppraiserUserCompanyInfoViewModel() { CompanyID = 1, BranchID = 2 };

			// act
			_target.Invoking(a => a.SaveAppraiserUser(userModel, companyModel, true)).ShouldThrow<ArgumentException>();
		}
コード例 #3
0
		public void SaveAppraiserUser_should_redirect_to_Index_with_parameter_if_previous_url_is_AppraisalCompanuiesPipelineController()
		{
			var viewContext = new ViewContext();
			viewContext.HttpContext = MockHttpContext.FakeHttpContext();
			IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null);
			var dvsAdminRole = Singletones.ReferenceManager.GetRole(RoleType.DvsAdmin);
			viewContext.HttpContext.User.IsInRole(dvsAdminRole.RoleType.ToString()).Returns(true);


			_target.CommitProviderInstance = Substitute.For<ICommitProvider>();
			_target.SetFakeControllerContext(viewContext.HttpContext);
			_companyService.GetAppraisalCompanyDetails(Arg.Any<int>()).Returns(new AppraisalCompanyDetailsViewModel() { Status = AppraisalCompanyStatus.Applied });

			var userModel = new AppraiserUserCreateViewModel()
			{
				GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.Appraiser },
				PreviousUrl = NameHelper.AppraisalCompaniesPipeline.Controller,
				Contact = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() }
			};
			int companyId = 10;
			var companyModel = new AppraiserUserCompanyInfoViewModel() { CompanyID = companyId };
			_companyService.GetAppraiserUserCompanyInfo(Arg.Any<int>(), Arg.Any<int?>()).Returns(companyModel);
			// act
			var actual = _target.SaveAppraiserUser(userModel, companyModel, false);
			actual.Should().NotBeNull().And.BeOfType<RedirectToRouteResult>();
			((RedirectToRouteResult)actual).RouteValues["action"].Should().Be(NameHelper.AppraiserUserAdd.Index);
			((RedirectToRouteResult)actual).RouteValues["appraisalCompanyId"].Should().Be(companyId);
		}
コード例 #4
0
		public void SaveAppraiserUser_should_redirect_to_previous_url_if_redirect_flag_is_set()
		{
			var viewContext = new ViewContext();
			viewContext.HttpContext = MockHttpContext.FakeHttpContext();
			IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null);
			var dvsAdminRole = Singletones.ReferenceManager.GetRole(RoleType.DvsAdmin);
			viewContext.HttpContext.User.IsInRole(dvsAdminRole.RoleType.ToString()).Returns(true);
			_companyService.GetAppraisalCompanyDetails(Arg.Any<int>()).Returns(new AppraisalCompanyDetailsViewModel() { Status = AppraisalCompanyStatus.Applied });


			_target.CommitProviderInstance = Substitute.For<ICommitProvider>();
			_target.SetFakeControllerContext(viewContext.HttpContext);

			string url = "someUrl";
			var userModel = new AppraiserUserCreateViewModel()
			{
				GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.Appraiser },
				Contact = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() },
				PreviousUrl = url,
			};
			var companyModel = new AppraiserUserCompanyInfoViewModel();
			_companyService.GetAppraiserUserCompanyInfo(Arg.Any<int>(), Arg.Any<int?>()).Returns(companyModel);
			// act
			var actual = _target.SaveAppraiserUser(userModel, companyModel, true);
			actual.Should().NotBeNull().And.BeOfType<RedirectResult>();
			((RedirectResult)actual).Url.Should().Be(url);
		}
コード例 #5
0
ファイル: AppriserUserServiceTest.cs プロジェクト: evkap/DVS
		public void CreateAppraiserUser_should_create_user()
		{
			var company = new AppraisalCompanyDetail() { Branches = new List<AppraisalCompanyBranch>() };
			AppraisalCompanyManager.GetAppraisalCompanyById(1).Returns(company);
			var generalInfo = new CreateUserGeneralInfoViewModel()
			{
				Email = "email",
				Password = "******",
				RoleType = RoleType.Appraiser
			};
			IAppraiserUserRepository appUserRepository = Substitute.For<IAppraiserUserRepository>();
			var _taskManager = Substitute.For<ITaskManager>();
			ReferenceManager.GetRoleWithoutCache(RoleType.Appraiser).Returns(new Role() { Id = (int)RoleType.Appraiser });
			AppraiserManager = new AppraiserManagement(Substitute.For<IUserRepository>(), appUserRepository, ReferenceManager, _taskManager, Substitute.For<IAscGovLicenseService>());
			Target = new AppraiserUserService(UsersManager, AppraiserManager,
				ReferenceManager, AppraisalCompanyManager,
				StatusHistoryManager, FeeManager, LicenseManager, AppraiserAccessManager,
				CryptographicProvider, DocumentService, Substitute.For<IGeocodingDataService>());
			var contactInfo = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() };
			var companyInfo = new AppraiserUserCompanyInfoViewModel()
			{
				CompanyID = 1
			};
			var appraiser = new AppraiserUserCreateViewModel()
			{
				GeneralInfo = generalInfo,
				Contact = contactInfo,
				CompanyInfo = companyInfo
			};

			var serviceAreaRadiuses = new Dictionary<RefServiceAreaRadiuse, string>();
			serviceAreaRadiuses.Add(new RefServiceAreaRadiuse() { ServiceAreaRadius = 1 }, "123");
			ReferenceManager.GetServiceAreaRadiuses().Returns(serviceAreaRadiuses);

			//act
			Target.CreateAppraiserUser(appraiser);
			appUserRepository.Received().Add(Arg.Any<AppraiserUser>());
		}
コード例 #6
0
ファイル: AppriserUserServiceTest.cs プロジェクト: evkap/DVS
		public void CreateAppraiserUser_should_throw_exception_if_user_assigned_to_nonexsistent_branch()
		{
			var company = new AppraisalCompanyDetail() { Branches = new List<AppraisalCompanyBranch>() };
			ReferenceManager.GetRole(Arg.Any<RoleType>()).Returns(new Role() { Id = (int)RoleType.Appraiser });
			AppraisalCompanyManager.GetAppraisalCompanyById(1).Returns(company);
			var generalInfo = new CreateUserGeneralInfoViewModel()
			{
				Email = "email",
				Password = "******"
			};
			AppraiserUser appUser = new AppraiserUser();
			appUser.User = new User();
			appUser.User.Roles = new List<Role>() { new Role() { Id = (int)RoleType.Appraiser } };
			AppraiserManager.CheckAndCreateAppraiserUser(Arg.Any<User>(), generalInfo.Password, Arg.Any<AppraiserUserStatus>()).Returns(appUser);
			var contactInfo = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() };
			var companyInfo = new AppraiserUserCompanyInfoViewModel()
			{
				CompanyID = 1,
				BranchID = 10
			};
			var appraiser = new AppraiserUserCreateViewModel()
			{
				GeneralInfo = generalInfo,
				Contact = contactInfo,
				CompanyInfo = companyInfo
			};
			//act
			Target.Invoking(a => a.CreateAppraiserUser(appraiser)).ShouldThrow<ArgumentException>();
		}
コード例 #7
0
		public PartialViewResult AddEmptyPhone()
		{
			var phone = new PhoneItemViewModel { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile };
			var phonesViewModel = new PhonesViewModel { PhoneItems = new List<PhoneItemViewModel> { phone } };
			var model = new AppraiserUserCreateViewModel();
			model.Contact.Phones = phonesViewModel;
			ViewBag.ExecuteBeginForm = true;
			ViewBag.AreaName = DVS.Logic.Constants.Areas.UserManagement;
			ViewBag.ControllerName = NameHelper.AppraiserUserAdd.Controller;
			return PartialView(Constants.Views.AppraiserPhonesPartial, model);
		}
コード例 #8
0
		public ActionResult Index(int? appraisalCompanyId)
		{
			ViewBag.GeocodingErrorMessage = TempData[GeocodingErrorMessage] as string;

			var appraiserInfo = TempData[_appraiserCreationKey] as AppraiserUserCreateViewModel;
			if (appraiserInfo == null)
			{
				appraiserInfo = new AppraiserUserCreateViewModel();
				appraiserInfo.Contact.Phones.PhoneItems.Add(new PhoneItemViewModel() { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile });
			}

			var isCurrentUserCompanyAdmin = SecurityContext.CurrentUser.HasUserAnyRoles(RoleType.AppraisalCompanyAdmin, RoleType.CompanyAdminAndAppraiser);
			if (isCurrentUserCompanyAdmin)
			{
				appraiserInfo.CompanyInfo = _appraiserService.GetAppraiserCompanyInfo(SecurityContext.CurrentUser.Email);
				if (appraisalCompanyId.HasValue && appraisalCompanyId.Value != appraiserInfo.CompanyInfo.CompanyID)
				{
					throw new SecurityException(string.Format("Access to company {0} is denied for user {1}", appraisalCompanyId, SecurityContext.CurrentUser.Email));
				}
				CheckPageAvaibility(appraiserInfo.CompanyInfo.CompanyID);
			}
			else
			{
				if (appraisalCompanyId.HasValue)
				{
					appraiserInfo.CompanyInfo = _companyService.GetAppraiserUserCompanyInfo(appraisalCompanyId.Value, null);
					if (appraiserInfo.CompanyInfo == null)
						throw new ArgumentException("company id");

					CheckPageAvaibility(appraiserInfo.CompanyInfo.CompanyID);
				}
			}


			if (appraiserInfo.CompanyInfo.Branches != null)
			{
				appraiserInfo.CompanyInfo.Branches = appraiserInfo.CompanyInfo.Branches.Where(e => e.Status == AppraisalCompanyStatus.Active).ToList();
				if (appraiserInfo.CompanyInfo.Branches.Any(e => !Constants.Text.NoSelection.Equals(e.BranchName)))
				{
					appraiserInfo.CompanyInfo.Branches.Insert(0, new AppraiserUserCompanyInfoBranchViewModel() { BranchID = 0, BranchName = Constants.Text.NoSelection });
				}
			}
			appraiserInfo.CompanyInfo.IsCompanyAdmin = false;
			appraiserInfo.CompanyInfo.IsCompanyRequired = !isCurrentUserCompanyAdmin
				&& (appraiserInfo.GeneralInfo.RoleType == RoleType.AppraisalCompanyAdmin || appraiserInfo.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser);


			if (!appraisalCompanyId.HasValue && !isCurrentUserCompanyAdmin)
			{
				appraiserInfo.CompanyInfo.CompanyNameState = CompanyNameState.Editable;
			}
			else
			{
				appraiserInfo.CompanyInfo.CompanyNameState = CompanyNameState.Readonly;
			}

			if (Request.UrlReferrer != null && !Request.UrlReferrer.AbsolutePath.Contains(NameHelper.AppraiserUserAdd.Controller))
			{
				appraiserInfo.PreviousUrl = Request.UrlReferrer.AbsolutePath;
			}
			var roles = new Dictionary<int, string>();
			roles.Add(0, Constants.Text.NoSelection);
			roles = roles.Concat(Singletones.ReferenceManager.GetRolesForAppraisers()).ToDictionary(x => x.Key, x => x.Value);

			ViewBag.ListForDropDown = new SelectList(roles, "Key", "Value");
			return View(appraiserInfo);
		}
コード例 #9
0
		public ActionResult RemovePhone(AppraiserUserCreateViewModel user, string phoneId)
		{
			ModelState.Clear();
			var phoneItem = user.Contact.Phones.PhoneItems.Single(pi => pi.Id == phoneId);
			user.Contact.Phones.PhoneItems.Remove(phoneItem);
			TempData[_appraiserCreationKey] = user;
			return RedirectToAction(NameHelper.AppraiserUserAdd.Index);
		}
コード例 #10
0
		public ActionResult AddPhone(AppraiserUserCreateViewModel user)
		{
			ModelState.Clear();
			user.Contact.Phones.PhoneItems.Add(new PhoneItemViewModel() { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile });
			TempData[_appraiserCreationKey] = user;
			return RedirectToAction(NameHelper.AppraiserUserAdd.Index);
		}
コード例 #11
0
		private void SkipConditionalValidation(AppraiserUserCreateViewModel model)
		{
			bool isCompanyAdmin = User.IsInRole(RoleType.AppraisalCompanyAdmin.ToString()) || User.IsInRole(RoleType.AppraisalCompanyAdmin.ToString());
			bool isCompanyRequired = !isCompanyAdmin
				&& (model.GeneralInfo.RoleType == RoleType.AppraisalCompanyAdmin || model.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser);
			if (!isCompanyRequired)
			{
				if (!ModelState.IsValid)
				{
					Expression<Func<AppraiserUserCompanyInfoViewModel, string>> companyNameExpr = m => m.CompanyName;
					string key = ExpressionHelper.GetExpressionText(companyNameExpr);
					var error = ModelState[key].Errors.FirstOrDefault();
					if (error != null && error.ErrorMessage.Equals("Required.", StringComparison.CurrentCultureIgnoreCase))
					{
						ModelState.Remove(key);
					}
				}
			}
		}
コード例 #12
0
		private void SaveUser(AppraiserUserCreateViewModel user)
		{
			if (!Singletones.ReferenceManager.GetRolesForAppraisers().Select(e => e.Key).Contains((int)user.GeneralInfo.RoleType))
			{
				throw new ArgumentException("role id");
			}
			AppraiserUserCompanyInfoViewModel currentCompany;
			if (User.IsInRole(RoleType.AppraisalCompanyAdmin.ToString()) || User.IsInRole(RoleType.CompanyAdminAndAppraiser.ToString()))
			{
				var currentUser = _userManager.GetByEmail(User.Identity.Name);
				currentCompany = _appraiserService.GetAppraiserCompanyInfo(currentUser.Email);
				if (currentCompany.CompanyID != user.CompanyInfo.CompanyID)
				{
					throw new ArgumentException("company id");
				}
			}
			else
			{
				currentCompany = _companyService.GetAppraiserUserCompanyInfo(user.CompanyInfo.CompanyID, user.CompanyInfo.BranchID);
			}
			if (currentCompany != null)
				CheckPageAvaibility(currentCompany.CompanyID);
			if (user.CompanyInfo.BranchID.GetValueOrDefault(0) != 0 &&
				!currentCompany.Branches.Where(e => e.Status == AppraisalCompanyStatus.Active).Select(e => e.BranchID).Contains(user.CompanyInfo.BranchID.Value))
			{
				throw new ArgumentException("branch id");
			}
			AppraiserUserStatus currentUserStatus = AppraiserUserStatus.Applied;
			if (user.GeneralInfo.RoleType == RoleType.AppraisalCompanyAdmin || user.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser)
				currentUserStatus = AppraiserUserStatus.Active;
			_appraiserService.CreatAppraiserUserWithStatus(user, currentUserStatus);
			CommitProviderInstance.Commit();

			if (user.GeneralInfo.RoleType == RoleType.Appraiser || user.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser)
			{
				var testOrder = _testOrderManager.CreateTestOrderForAppraiser(user.GeneralInfo.Email);
				CommitProviderInstance.Commit();
				if (testOrder != null)
				{
					_taskManager.GenerateLOEDocument(testOrder.Id, base.SecurityContext.CurrentUser.Id);
				}
			}
		}
コード例 #13
0
		public ActionResult SaveAppraiserUser(AppraiserUserCreateViewModel user, AppraiserUserCompanyInfoViewModel company, bool? toRedirect)
		{
			var validateAddress = new ValidateAddressArg
			{
				City = user.Contact.PhysicalAddress.City,
				State = user.Contact.PhysicalAddress.State,
				Street = user.Contact.PhysicalAddress.Street,
				ZIP = user.Contact.PhysicalAddress.ZIP
			};
			var geocodingValidationResult = _geocodingValidation.ValidateAddress(validateAddress);
			if (!geocodingValidationResult.IsValid)
			{
				TempData[GeocodingErrorMessage] = Constants.ErrorMessages.GeocodingVerificationError;
				TempData[_appraiserCreationKey] = user;

				return RedirectToAction(NameHelper.AppraiserUserAdd.Index);
			}
			user.CompanyInfo = company;
			SkipConditionalValidation(user);
			if (!ModelState.IsValid)
			{
				return View(NameHelper.AppraiserUserAdd.Index, user);
			}
			SaveUser(user);
			_taskManager.ScheduleManuallyRegisteredUserNotification(user.GeneralInfo.Email, user.GeneralInfo.Password);
			if (toRedirect.GetValueOrDefault(false))
			{
				if (!string.IsNullOrEmpty(user.PreviousUrl))
				{
					return Redirect(user.PreviousUrl);
				}
				return View(NameHelper.AppraiserUserAdd.Index, user);
			}
			AppraiserUserCreateViewModel newUser = new AppraiserUserCreateViewModel();
			newUser.PreviousUrl = user.PreviousUrl;
			newUser.Contact.Phones.PhoneItems.Add(new PhoneItemViewModel() { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile });
			TempData[_appraiserCreationKey] = newUser;
			if (!string.IsNullOrEmpty(user.PreviousUrl) && user.PreviousUrl.Contains(NameHelper.AppraisalCompaniesPipeline.Controller))
			{
				return RedirectToAction(NameHelper.AppraiserUserAdd.Index, new { appraisalCompanyId = company.CompanyID });
			}
			return RedirectToAction(NameHelper.AppraiserUserAdd.Index);
		}