Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        /// <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);
            }
        }