Example #1
0
        public void Validation_Email_Format()
        {
            var shouldFailValidation = new []
                {
                    "aaa", "bbb", "aa.bb", "aa.bb", "a@b","[email protected]",
                    "a;[email protected]","aaa@em;ail.com", "[email protected];om"
                };
            var shouldPassValidation = new []
                {
                    "*****@*****.**","*****@*****.**", "*****@*****.**"
                };

            Func<string,bool> validEmail =
                (email)=>{
                             var newUser = new NewUser { Email = email };   // create new user
                             return newUser.validate()                      // validate
                                           .indexed_By_MemberName()         // get dictionary with results
                                           .hasKey("Email")                 // see if email
                                           .isFalse();                      // is not there
                };

            foreach(var testEmail in shouldFailValidation )                 // these should all fail
                Assert.IsFalse(validEmail(testEmail), "Should had failed for: {0}".format(testEmail));

            foreach(var testEmail in shouldPassValidation )                 // these should all work
                Assert.IsTrue(validEmail(testEmail), "Should had worked for: {0}".format(testEmail));
        }
        public void Validation_Email_Size()
        {
            var newUser             = new NewUser();
            var loopMax             = 1000;
            var expectedMaxLength   = 256;
            for (int i = 1; i < loopMax; i++)
            {
                newUser.Email = (i*256).randomLetters();     //works quite fast even with values as hight as 1000000
                newUser.Username = "".add_RandomLetters(10);
                newUser.Password = "******".add_RandomLetters(20);
                var dateStart = DateTime.Now;
                var validEmail = newUser.valid_Email_Address();
                Assert.IsFalse(validEmail);
                var validationResults = newUser.validate();
                var resultsMapped     = validationResults.indexed_By_MemberName();
                var seconds = (DateTime.Now - dateStart).TotalSeconds;
                Assert.Less(seconds,1, "A email with size {0} took more than 1 sec to calculate".format(i*10));

                if (i > expectedMaxLength)
                {
                    Assert.AreEqual(resultsMapped["Email"].size()  , 1);
                    Assert.IsTrue  (resultsMapped["Email"].contains("The field Email must be a string with a maximum length of {0}.".format(expectedMaxLength)));
                }
            }
        }
Example #3
0
        public void Validation_NewUser_LargeDataInFields()
        {
            var newUser = new NewUser();                                // new empty user object
            foreach (var property in newUser.type().properties())       // populate all strings
                newUser.prop(property.Name, 5001.randomLetters());      //  ... with a random 5001 char value

            var validationResults = newUser.validate();                 // validate
            var resultsMapped     = validationResults.indexed_By_MemberName();

            foreach (var result in resultsMapped)                       // checks validation errors
                Assert.IsTrue(result.Value.first() .contains("The field {0} must be a string with a maximum length of".format(result.Key)) ||
                              result.Value.second().contains("The field {0} must be a string with a maximum length of".format(result.Key)) ,
                             "mappings : {0}".format(result.Value.toString()));
        }
Example #4
0
        public void Issue_826__No_lenght_constraint_on_User_Tags_SigupResponse()
        {
            var userData = new TM_UserData();
            var newUser = new NewUser().with_Random_Data();
            newUser.validate().asStringList().assert_Is_Empty();

            var userTag_Ok = new UserTag { Key = 254.randomLetters(), Value = 254.randomLetters() };
            var userTag_Fail = new UserTag { Key = 256.randomLetters(), Value = 256.randomLetters() };

            userTag_Ok.validate().assert_Empty();
            userTag_Fail.validate().assert_Not_Empty();

            newUser.UserTags.add(userTag_Ok);
            userData.createTmUserResponse(newUser).UserCreated.assert_Is_Not(0);

            newUser.UserTags.add(userTag_Fail);
            userData.createTmUser(newUser).assert_Is(0);
        }
Example #5
0
 public void Validation_Email_Size()
 {
     var newUser             = new NewUser();
     var loopMax             = 100;
     var expectedMaxLength   = 50;
     for (int i = 1; i < loopMax; i++)
     {
         newUser.Email = (i*10).randomLetters();     //works quite fast even with values as hight as 1000000
         var dateStart = DateTime.Now;
         var validationResults = newUser.validate();
         var resultsMapped     = validationResults.indexed_By_MemberName();
         var seconds = (DateTime.Now - dateStart).TotalSeconds;
         Assert.Less(seconds,1, "A email with size {0} took more than 1 sec to calculate".format(i));
         Assert.IsTrue(resultsMapped["Email"].contains("The field Email must match the regular expression '{0}'.".format(ValidationRegex.Email)), "It was {0}".format(resultsMapped["Email"].toString()));
         if (i > expectedMaxLength)
         {
             Assert.AreEqual(resultsMapped["Email"].size()  , 2);
             Assert.IsTrue  (resultsMapped["Email"].contains("The field Email must be a string with a maximum length of {0}.".format(expectedMaxLength)));
         }
     }
 }
Example #6
0
        public void Validation_NewUser_RequiredFields()
        {
            var newUser            = new NewUser();
            //var requiredValues    = "Company,Country,Firstname,Lastname,Note,Password,State,Title,Username,Email".split(",");
            var requiredValues    = "Password,Username,Email".split(",");
            var validationResults = newUser.validate();
            var resultsMapped     = validationResults.indexed_By_MemberName();
            var validationok      = newUser.validation_Ok();

            //foreach (var result in validationResults)
            //    "{0} - {1}".info(result.MemberNames.asString(), result.ErrorMessage);

            Assert.IsNotEmpty(validationResults                              , "Validation results should not be empty");
            Assert.IsFalse   (validationok                                   , "Validation Ok should be false");
            Assert.IsFalse   (resultsMapped.hasKey("UserName__A")            , "There should be no mapping here");
            Assert.AreEqual  (requiredValues.size(), validationResults.size(), "# of validation results");

            foreach (var requiredValue in requiredValues)
            {
                Assert.IsTrue  (resultsMapped.hasKey(requiredValue), "requiredValue not found in mapped data: {0}".format(requiredValue));
                Assert.AreEqual(resultsMapped[requiredValue].first(), "The {0} field is required.".format(requiredValue));
            }
        }
Example #7
0
        [Admin] public string VerifyUserData(string payload)
        {
            UserRole.Admin.demand();
            var users        = payload.split("\n");
            var userData     = TM_UserData.Current;
            var errorMessage = string.Empty;
            var emails       = new HashSet <string>();
            var usernames    = new HashSet <string>();

            foreach (var user in users)
            {
                var rawData = user.split(",");
                //Safe check for
                if (rawData.count() < 13)
                {
                    errorMessage = string.Format("There is a missing field for user {0}.Please verify.", rawData[0] ?? "");
                    break;
                }
                var userName       = rawData[0] ?? "";
                var password       = rawData[1] ?? "";
                var email          = rawData[2] ?? "";
                var firstName      = rawData[3] ?? "";
                var lastName       = rawData[4] ?? "";
                var company        = rawData[5] ?? "";
                var title          = rawData[6] ?? "";
                var country        = rawData[7] ?? "";
                var state          = rawData[8] ?? "";
                var expiryDate     = rawData[9] ?? "";
                var role           = rawData[10] ?? "";
                var passwordExpire = rawData[11] ?? "";
                var userEnabled    = rawData[12] ?? "";
                var tmUser         = new NewUser {
                    Username = userName, Password = password, Company = company, Country = country, Email = email, Firstname = firstName, Lastname = lastName, GroupId = int.Parse(role), Note = "CSV user creation", State = state, Title = title
                };
                if (!usernames.Contains(userName))
                {
                    usernames.Add(userName);
                }
                else
                {
                    errorMessage = string.Format("Username {0} is already being used in this import.Please verify.", userName);
                    break;
                }
                if (!emails.Contains(email.ToString()))
                {
                    emails.Add(email);
                }
                else
                {
                    errorMessage = string.Format("Email address {0} is already being used for another user in this import.Please verify.", email);
                    break;
                }
                //Check wether or not the user does exist.
                if (userName.tmUser().notNull())
                {
                    errorMessage = string.Format("Username {0} already exist.", userName);
                    break;
                }
                if (tmUser.valid_Email_Address().isFalse())
                {
                    errorMessage = TMConsts.DEFAULT_EMAIL_ADDRESS_IS_INVALID;
                    break;
                }
                if (tmUser.validate().Count > 0)
                {
                    errorMessage = string.Format("Please verify data for user {0}  :", userName);
                    errorMessage = tmUser.validate().Aggregate(errorMessage, (current, message) => current + " {0}".format(message.ErrorMessage));
                    break;
                }
                if (userData.TMUsers.Exists(x => x.EMail == email))
                {
                    errorMessage = string.Format("Email {0} already exist", email);
                    break;
                }
                if (firstName == "")
                {
                    errorMessage = string.Format("FirstName is a required field for user {0}", userName);
                    break;
                }
                if (lastName == "")
                {
                    errorMessage = string.Format("Last Name is a required field for user {0}", userName);
                    break;
                }
                DateTime outputDate;
                if (String.IsNullOrEmpty(expiryDate) || !DateTime.TryParse(expiryDate, out outputDate))
                {
                    errorMessage = string.Format("Please enter a valid Expiration date for user {0}. Format must be {1}.", userName, "yyyy/mm/dd");
                    break;
                }
                if (outputDate <= DateTime.Now)
                {
                    errorMessage = string.Format("Expiry date cannot be prior  or equal than today. User {0}", userName);
                    break;
                }
                if (passwordExpire.trim().ToLower() != "y" && passwordExpire.trim().ToLower() != "n")
                {
                    errorMessage = string.Format("Please verify data for user {0}, Password expire value must be Y (for yes) or N (for No)", userName);
                    break;
                }

                if (userEnabled.trim().ToLower() != "y" && userEnabled.trim().ToLower() != "n")
                {
                    errorMessage = string.Format("Please verify data for user {0}, User Enabled value must be Y (for yes) or N (for No)", userName);
                    break;
                }
                if (!Enum.IsDefined(typeof(UserGroup), int.Parse(role)))
                {
                    errorMessage =
                        string.Format("The group value set for user {0} is invalid. Valid groups are {1} {2} and {3}",
                                      userName, UserGroup.Admin, UserGroup.Editor, UserGroup.Reader);
                    break;
                }
            }
            return(String.IsNullOrEmpty(errorMessage) ? "Success" : errorMessage);
        }
Example #8
0
        public void createTmUser()
        {
            UserGroup.None.assert();                //  change current thread privildges to None

            var newUser = new NewUser()
                {
                    Company     = 10.randomLetters(),
                    Country     = 10.randomLetters(),
                    Firstname   = 10.randomLetters(),
                    Lastname    = 10.randomLetters(),
                    Note        = 10.randomLetters(),
                    Password    = "******"+10.randomLetters(),
                    State       = 10.randomLetters(),
                    Title       = 10.randomLetters(),
                    Username    = 10.randomLetters(),
                    Email       = "{0}@{0}.{0}".format(3.randomLetters())
                };

            Assert.IsEmpty(newUser.validate());

            var user1 = newUser.create();
            var user2 = newUser.create();

            Assert.AreNotEqual(user1, 0);
            Assert.AreNotEqual(user1, user2);

            //try with email in upper case
            newUser.Username    = 10.randomLetters();
            newUser.Email       = newUser.Email.upper();

            //try creating a repeated user
            Assert.AreEqual(0, newUser.create());

            //try creating an admin user (which should fail for anonymous users)
            newUser.GroupId  = (int)UserGroup.Admin;
            newUser.Username = 10.randomLetters();
            newUser.Email    = "{0}@{0}.{0}".format(3.randomLetters());
            Assert.Throws<SecurityException>(()=> newUser.create());

            UserGroup.Admin.setPrivileges();
            Assert.AreNotEqual(0, newUser.create());

            //try creating a repeated user
            Assert.AreEqual   (0, newUser.create());
            newUser.Username  = 10.randomLetters();                      // just difference username should fail
            Assert.AreEqual   (0, newUser.create());
            newUser.Email     = "{0}@{0}.{0}".format(3.randomLetters()); // with different username and password should work
            Assert.AreNotEqual(0, newUser.create());

            //test nulls and fail validation
            Assert.AreEqual   (0, userData.createTmUser(null));
            newUser.Username = null;
            Assert.AreEqual   (0, newUser.create());
        }
Example #9
0
        public void CreateTmUserSigupResponse_Success()
        {
            UserGroup.None.assert();                //  change current thread privildges to None

            var newUser = new NewUser().with_Random_Data();
            newUser.validate().empty();

            var response = newUser.createSigupResponse();
            response.assert_Not_Null();
            response.UserCreated.assert_Bigger_Than(0);

            response.Signup_Status.assert_Is(Signup_Result.SignupStatus.Signup_Ok);
            response.Validation_Results.count().assert_Is(0);
        }
Example #10
0
        public void CreateTmUserSigupResponse_EmailMaxLength_Exceeded()
        {
            UserGroup.None.assert();                //  change current thread privildges to None

            var newUser = new NewUser().with_Random_Data();
            newUser.Email= newUser.Email +"".add_RandomLetters(260);
            newUser.Email.Length.assert_Bigger_Than(256);
            newUser.validate().notEmpty();
            newUser.validate().count().assert_Is(1);
            newUser.validate().first().ErrorMessage.assert_Is("The field Email must be a string with a maximum length of 256.");
        }
Example #11
0
        public void CreateTmUserSigupResponse_EmailMaxLength_Allowed()
        {
            UserGroup.None.assert();                //  change current thread privildges to None

            var newUser = new NewUser().with_Random_Data();
            newUser.Email = newUser.Email + "".add_RandomLetters(232);
            newUser.Email.Length.assert_Is(256);
            newUser.validate().assert_Is_Empty();
            newUser.createSigupResponse().UserCreated.assert_Bigger_Than(0);
        }
Example #12
0
 [WebMethod(EnableSession = true)]                                                                                       public List <String> CreateUser_Validate(NewUser newUser)
 {
     return(newUser.validate().asStringList());
 }
Example #13
0
 public List<String> CreateUser_Validate(NewUser newUser)
 {
     return newUser.validate().asStringList();
 }
Example #14
0
        public string VerifyUserData(string payload)
        {
            UserRole.Admin.demand();
            var users = payload.split("\n");
            var userData      = TM_UserData.Current;
            var errorMessage = string.Empty;
            var emails = new HashSet<string>();
            var usernames = new HashSet<string>();
            foreach (var user in users)
            {
                var rawData = user.split(",");
                //Safe check for
                if (rawData.count() < 13)
                {
                    errorMessage = string.Format("There is a missing field for user {0}.Please verify.", rawData[0] ?? "");
                    break;
                }
                var userName = rawData[0] ?? "";
                var password = rawData[1] ?? "";
                var email = rawData[2] ?? "";
                var firstName = rawData[3] ?? "";
                var lastName = rawData[4] ?? "";
                var company = rawData[5] ?? "";
                var title = rawData[6] ?? "";
                var country = rawData[7] ?? "";
                var state = rawData[8] ?? "";
                var expiryDate = rawData[9] ?? "";
                var role = rawData[10] ?? "";
                var passwordExpire = rawData[11] ?? "";
                var userEnabled = rawData[12] ?? "";
                var tmUser = new NewUser { Username = userName, Password = password, Company = company, Country = country, Email = email, Firstname = firstName, Lastname = lastName, GroupId = int.Parse(role), Note = "CSV user creation", State = state, Title = title };
                if (!usernames.Contains(userName))
                    usernames.Add(userName);
                else
                {
                    errorMessage = string.Format("Username {0} is already being used in this import.Please verify.", userName);
                    break;
                }
                if (!emails.Contains(email.ToString()))
                    emails.Add(email);
                else
                {
                    errorMessage = string.Format("Email address {0} is already being used for another user in this import.Please verify.", email);
                    break;
                }
                //Check wether or not the user does exist.
                if (userName.tmUser().notNull())
                {
                    errorMessage = string.Format("Username {0} already exist.", userName);
                    break;
                }
                if (tmUser.valid_Email_Address().isFalse())
                {
                    errorMessage = TMConsts.DEFAULT_EMAIL_ADDRESS_IS_INVALID;
                    break;
                }
                if (tmUser.validate().Count > 0)
                {
                    errorMessage = string.Format("Please verify data for user {0}  :", userName);
                    errorMessage = tmUser.validate().Aggregate(errorMessage, (current, message) => current + " {0}".format(message.ErrorMessage));
                    break;
                }
                if (userData.TMUsers.Exists(x => x.EMail == email))
                {
                    errorMessage = string.Format("Email {0} already exist", email);
                    break;
                }
                if (firstName=="")
                {
                    errorMessage = string.Format("FirstName is a required field for user {0}", userName);
                    break;
                }
                if (lastName=="")
                {
                    errorMessage = string.Format("Last Name is a required field for user {0}", userName);
                    break;
                }
                DateTime outputDate;
                if (String.IsNullOrEmpty(expiryDate)||!DateTime.TryParse(expiryDate, out outputDate))
                {
                    errorMessage = string.Format("Please enter a valid Expiration date for user {0}. Format must be {1}.", userName, "yyyy/mm/dd");
                    break;
                }
                if (outputDate <= DateTime.Now)
                {
                    errorMessage = string.Format("Expiry date cannot be prior  or equal than today. User {0}", userName);
                    break;
                }
                if (passwordExpire.trim().ToLower() != "y" && passwordExpire.trim().ToLower() != "n")
                {
                    errorMessage = string.Format("Please verify data for user {0}, Password expire value must be Y (for yes) or N (for No)", userName);
                    break;
                }

                if (userEnabled.trim().ToLower() != "y" && userEnabled.trim().ToLower() != "n")
                {
                    errorMessage = string.Format("Please verify data for user {0}, User Enabled value must be Y (for yes) or N (for No)", userName);
                    break;
                }
                if (!Enum.IsDefined(typeof(UserGroup), int.Parse(role)))
                {
                    errorMessage =
                        string.Format("The group value set for user {0} is invalid. Valid groups are {1} {2} and {3}",
                                      userName, UserGroup.Admin, UserGroup.Editor, UserGroup.Reader);
                    break;
                }
            }
            return(String.IsNullOrEmpty(errorMessage) ? "Success" : errorMessage);
        }
Example #15
0
        private static Signup_Result ValidationFailed(TMConfig config, NewUser newUser)
        {
            var sigupResponse = new Signup_Result();
            var validationList = newUser.validate();
            sigupResponse.Signup_Status = Signup_Result.SignupStatus.Validation_Failed;
            sigupResponse.UserCreated = 0;
            if (config.showDetailedErrorMessages())
            {
                foreach (var validation in validationList)
                {
                    var field = validation.MemberNames.FirstOrDefault();

                    sigupResponse.Validation_Results.Add(new Validation_Results
                    {
                        Field = field,
                        Message = validation.ErrorMessage
                    });
                }
            }
            else
                sigupResponse.Simple_Error_Message = config.TMErrorMessages.General_SignUp_Error_Message;
            return  sigupResponse;
        }