public async Task CreateNewInvitation_Ok() { //Create unique user for this test var extRefid = $"{GetType().Name}.{GetCallerMemberName()}"; var testUser = await BL.CreateUserAsync($"{extRefid}@lifecouple.net", extRefid, true, "fname", "lname", null); //Update the userprofiles so we can check that it is not overwritten later... testUser.FirstName = "per"; testUser.HasAgreedToTandC = false; var index = new DomainLogic.BL_UserProfile.Index { TypeOfIndex = DAL.Entities.IndexTypeEnum.Overall, Value = 50 }; testUser.Indexes = new List <DomainLogic.BL_UserProfile.Index> { index }; await BL.SetUserAsync(testUser); //Initialize new entity to be saved var dob = DateTime.Now.AddYears(-21); var newPartnerInvitation = new BL_PartnerInvitation { DateOfBirth = new DateTime(dob.Year, dob.Month, dob.Day, 0, 0, 0, DateTimeKind.Unspecified), FirstName = "fName", InvitedByUserId = testUser.Id, LastName = "lastName", MobilePhone = "7605006125", TypeOfGender = BL_GenderTypeEnum.Female, }; var newId = await BL.SetPartnerInvitationsAsync(newPartnerInvitation); //Read new entity back var updatedTestUser = await BL.GetUserProfile_byExtRefIdAsync(testUser.ExternalRefId); Assert.NotNull(updatedTestUser); Assert.Equal(testUser.FirstName, updatedTestUser.FirstName); Assert.Equal(testUser.HasAgreedToTandC, updatedTestUser.HasAgreedToTandC); Assert.Equal(index.TypeOfIndex, updatedTestUser.Indexes[0].TypeOfIndex); Assert.Equal(index.Value, updatedTestUser.Indexes[0].Value); Assert.Equal(BL_PartnerInvitationStatusTypeEnum.Submitted, updatedTestUser.PartnerInvitationStatus); //Read partner invitation back.. var readPartnerInvitation = await BL.GetPartnerInvitations_byExtRefIdAsync(testUser.ExternalRefId); Assert.Equal(newPartnerInvitation.DateOfBirth, readPartnerInvitation.DateOfBirth); Assert.Equal(newPartnerInvitation.FirstName, readPartnerInvitation.FirstName); Assert.Equal(BL_PartnerInvitationStatusTypeEnum.Submitted, readPartnerInvitation.InvitationStatus); Assert.Equal(newPartnerInvitation.InvitedByUserId, readPartnerInvitation.InvitedByUserId); Assert.Equal(newPartnerInvitation.LastName, readPartnerInvitation.LastName); Assert.Equal(newPartnerInvitation.MobilePhone, readPartnerInvitation.MobilePhone); Assert.Equal(newPartnerInvitation.TypeOfGender, readPartnerInvitation.TypeOfGender); Assert.Equal(readPartnerInvitation.InvitationId, new Guid(readPartnerInvitation.InvitationId).ToString().ToUpper()); Assert.False(string.IsNullOrWhiteSpace(readPartnerInvitation.InvitationId), "InvitationId is empty, which is not the expected result"); }
public async Task CreateNewInvitation_Validations() { //Create unique user for this test var extRefid = $"{GetType().Name}.{GetCallerMemberName()}"; var testUser = await BL.CreateUserAsync($"{extRefid}@lifecouple.net", extRefid, true, "fName", "lName", null); //Update the userprofiles so we can check that it is not overwritten later... testUser.FirstName = "per"; testUser.HasAgreedToTandC = false; var index = new DomainLogic.BL_UserProfile.Index { TypeOfIndex = DAL.Entities.IndexTypeEnum.Overall, Value = 50 }; testUser.Indexes = new List <DomainLogic.BL_UserProfile.Index> { index }; await BL.SetUserAsync(testUser); //Initialize new entity to be saved var dob = DateTime.Now.AddYears(-21); var newPartnerInvitation = new BL_PartnerInvitation { DateOfBirth = dob, FirstName = "", InvitedByUserId = "", LastName = "", MobilePhone = "", TypeOfGender = BL_GenderTypeEnum.Unknown, }; var ex = await Assert.ThrowsAsync <BusinessLogicException>(async() => await BL.SetPartnerInvitationsAsync(newPartnerInvitation)); Assert.Equal(ValidationErrorCode.EntityIsNull, ex.ErrorCode); Assert.Single(ex.Result.Failures); //Fix data failed above newPartnerInvitation.InvitedByUserId = testUser.Id; ex = await Assert.ThrowsAsync <BusinessLogicException>(async() => await BL.SetPartnerInvitationsAsync(newPartnerInvitation)); Assert.Equal(ValidationErrorCode.DateOfBirth_ValidationError, ex.ErrorCode); Assert.Equal(6, ex.Result.Failures.Count); //Read new entity back var updatedTestUser = await BL.GetUserProfile_byExtRefIdAsync(testUser.ExternalRefId); Assert.NotNull(updatedTestUser); Assert.Equal(testUser.FirstName, updatedTestUser.FirstName); Assert.Equal(testUser.HasAgreedToTandC, updatedTestUser.HasAgreedToTandC); Assert.Equal(index.TypeOfIndex, updatedTestUser.Indexes[0].TypeOfIndex); Assert.Equal(index.Value, updatedTestUser.Indexes[0].Value); Assert.Equal(BL_PartnerInvitationStatusTypeEnum.Unknown, updatedTestUser.PartnerInvitationStatus); }
public async Task <IActionResult> Post([FromBody] PartnerInvitationRequestInfo request) { try { if (!ModelState.IsValid) { return(this.ApiErrorMessage400BadRequest(ModelState)); } var jwtPayloadInfo = this.GetJwtPayloadInfo(); var userProfileId = await _bl.GetCachedUserId_byExternalReferenceIdAsync(jwtPayloadInfo.ExtReferenceId); if (userProfileId == null) { return(this.ApiErrorMessage400BadRequestUserIdInTokenNotFound(jwtPayloadInfo.ExtReferenceId)); } var bl_partnerInvitation = new BL_PartnerInvitation { DateOfBirth = request.DateOfBirth, FirstName = request.FirstName, InvitedByUserId = userProfileId, LastName = request.LastName, MobilePhone = request.MobilePhone, TypeOfGender = EnumMapper.From(request.TypeOfGender), }; await _bl.SetPartnerInvitationsAsync(bl_partnerInvitation); return(this.ApiPostMessage204NotContent()); } catch (BusinessLogicException ex) { HttpContext.Items.Add("ex", ex); //For instrumentation return(this.ApiErrorMessage400BadRequest(ex)); } catch (Exception ex) { HttpContext.Items.Add("ex", ex); //For instrumentation return(this.ApiErrorMessage400BadRequest(ex)); } }
public BL_PartnerInvitation From_ForPartnerInvitation(UserProfile userProfile) { if (userProfile?.PartnerInvitation == null) { return(null); } var r = new BL_PartnerInvitation { InvitedByUserId = userProfile.Id, MobilePhone = userProfile.PartnerInvitation.MobilePhone.UserEnteredNr, DateOfBirth = userProfile.PartnerInvitation.DateOfBirth, FirstName = userProfile.PartnerInvitation.FirstName, TypeOfGender = getGender(), LastName = userProfile.PartnerInvitation.LastName, InvitationStatus = getInvitationStatus(), InvitationId = userProfile.PartnerInvitation.InvitationId, InviterFirstName = userProfile.FirstName }; BL_GenderTypeEnum getGender() { switch (userProfile.PartnerInvitation.Gender) { case GenderTypeEnum.Female: return(BL_GenderTypeEnum.Female); case GenderTypeEnum.Male: return(BL_GenderTypeEnum.Male); case GenderTypeEnum.NotSpecified: return(BL_GenderTypeEnum.NotSpecified); default: return(BL_GenderTypeEnum.Unknown); } } BL_PartnerInvitationStatusTypeEnum getInvitationStatus() { switch (userProfile.PartnerInvitation.InvitationStatus) { case PartnerInvitationStatusTypeEnum.Accepted: return(BL_PartnerInvitationStatusTypeEnum.Accepted); case PartnerInvitationStatusTypeEnum.Declined: return(BL_PartnerInvitationStatusTypeEnum.Declined); case PartnerInvitationStatusTypeEnum.Sent: return(BL_PartnerInvitationStatusTypeEnum.Sent); case PartnerInvitationStatusTypeEnum.Submitted: return(BL_PartnerInvitationStatusTypeEnum.Submitted); default: return(BL_PartnerInvitationStatusTypeEnum.Unknown); } } return(r); }
/// <summary> /// to be used within web api controller(s) /// </summary> /// <param name="bL_QuestionnaireAnswers"></param> /// <returns></returns> public async Task <string> SetPartnerInvitationsAsync(BL_PartnerInvitation bl_dto) { if (string.IsNullOrWhiteSpace(bl_dto.InvitedByUserId)) { throw new BusinessLogicException(ValidationErrorCode.EntityIsNull, bl_dto.InvitedByUserId); } if (false == string.IsNullOrWhiteSpace(bl_dto.InviterFirstName)) { throw new BusinessLogicException(ValidationErrorCode.ValidationFailure_PartnerInvitation, bl_dto.InvitedByUserId, $"Invitation cannot be Set since the InviteerFirstname is set to '{bl_dto.InviterFirstName}', which cannot be set"); } var partnerInvitation = new PartnerInvitation { InvitationId = Guid.NewGuid().ToString("D").ToUpper(), DateOfBirth = bl_dto.DateOfBirth, FirstName = bl_dto.FirstName, InvitationStatus = PartnerInvitationStatusTypeEnum.Unknown, //Set below LastName = bl_dto.LastName, MobilePhone = new Phone { UserEnteredNr = bl_dto.MobilePhone }, Gender = GenderTypeEnum.Unknown, //set below }; //set/map enums partnerInvitation.InvitationStatus = PartnerInvitationStatusTypeEnum.Submitted; //since we only support creating new ones switch (bl_dto.TypeOfGender) { case BL_GenderTypeEnum.Female: partnerInvitation.Gender = GenderTypeEnum.Female; break; case BL_GenderTypeEnum.Male: partnerInvitation.Gender = GenderTypeEnum.Male; break; case BL_GenderTypeEnum.NotSpecified: partnerInvitation.Gender = GenderTypeEnum.NotSpecified; break; default: partnerInvitation.Gender = GenderTypeEnum.Unknown; break; } var existingUser = await _repo.GetUserProfile_byIdAsync(bl_dto.InvitedByUserId); if (existingUser == null) { throw new BusinessLogicException(ValidationErrorCode.EntityIsNull, bl_dto.InvitedByUserId); } if (validator.CanInvitePartner(existingUser, out var validationResult)) { existingUser.PartnerInvitation = partnerInvitation; validationResult = validator.Validate(existingUser); //do full validation } if (validationResult.IsValid) { await GenerateAndCreateInvitationSmsAsync(existingUser); var idUpdatedOrCreated = await _repo.SetUserProfileAsync(existingUser); return(idUpdatedOrCreated); } else { throw new BusinessLogicException(validationResult); } }