3 using System.ComponentModel.DataAnnotations;
5 using System.Web.Security;
8 namespace MonoTests.System.Web.Security {
11 public class MembershipPasswordAttributeTest
13 private ValidationContext _validationContext;
15 public MembershipPasswordAttributeTest ()
17 _validationContext = new ValidationContext (new object ())
19 DisplayName = "testDisplay",
20 MemberName = "testMember"
25 public void IsValid ()
27 var passwordAttribute = new MembershipPasswordAttributeTestClass ();
28 Assert.IsTrue (passwordAttribute.IsValid (""), "sending an empty password password should should be treated as valid");
32 public void IsValid_with_ValidationContext ()
34 var passwordAttribute = new MembershipPasswordAttributeTestClass ();
35 var result = passwordAttribute.TestValidation ("", _validationContext);
36 Assert.IsNull (result, "sending an empty password password should return a null response");
38 result = passwordAttribute.TestValidation ("a!12345", _validationContext);
39 Assert.AreEqual (ValidationResult.Success, result, "Should suceed with a 7 character length and a single nonalphanumeric");
41 // test error priority
42 passwordAttribute.MinRequiredPasswordLength = 4;
43 passwordAttribute.MinRequiredNonAlphanumericCharacters = 2;
44 result = passwordAttribute.TestValidation ("aaa", _validationContext);
45 Assert.AreEqual ("The 'testDisplay' field is an invalid password. Password must have 4 or more characters.", result.ErrorMessage);
50 public void MinRequiredPasswordLength ()
52 var passwordAttribute = new MembershipPasswordAttributeTestClass ();
53 var result = passwordAttribute.TestValidation ("a!1234", _validationContext);
54 Assert.AreEqual ("The 'testDisplay' field is an invalid password. Password must have 7 or more characters.", result.ErrorMessage, "Error message not correct for lower Min characters");
55 Assert.AreEqual (_validationContext.MemberName, result.MemberNames.FirstOrDefault (), "Member name not correct");
57 passwordAttribute.MinRequiredPasswordLength = 6;
58 result = passwordAttribute.TestValidation ("a!1234", _validationContext);
59 Assert.AreEqual (ValidationResult.Success, result, "Should suceed with a 6 character length after it's reset");
61 result = passwordAttribute.TestValidation ("a!123", _validationContext);
62 Assert.AreEqual("The 'testDisplay' field is an invalid password. Password must have 6 or more characters.", result.ErrorMessage, "Error message not correct for Min characters of 6");
65 passwordAttribute.MinRequiredPasswordLength = 1;
66 result = passwordAttribute.TestValidation ("!", _validationContext);
67 Assert.AreEqual(ValidationResult.Success, result, "Should suceed with a 6 character length after it's reset");
69 // Note there is no test for empty password here as it returns null and is therefore in the generic test
71 // Error Message changes
72 passwordAttribute.MinRequiredPasswordLength = 5;
73 passwordAttribute.MinPasswordLengthError = "There was an error";
74 result = passwordAttribute.TestValidation ("a!13", _validationContext);
75 Assert.AreEqual("There was an error", result.ErrorMessage, "Error Message wasn't correct without parameters.");
77 passwordAttribute.MinPasswordLengthError = "There was an error parameter1: {0}";
78 result = passwordAttribute.TestValidation ("a!13", _validationContext);
79 Assert.AreEqual("There was an error parameter1: testDisplay", result.ErrorMessage, "Error Message wasn't correct with 1 parameter.");
81 passwordAttribute.MinPasswordLengthError = "There was an error parameter1: {0} parameter2: {1}";
82 result = passwordAttribute.TestValidation ("a!13", _validationContext);
83 Assert.AreEqual ("There was an error parameter1: testDisplay parameter2: 5", result.ErrorMessage, "Error Message wasn't correct with 2 parameters.");
88 public void MinRequiredNonAlphanumericCharacters ()
90 var passwordAttribute = new MembershipPasswordAttributeTestClass ();
91 var result = passwordAttribute.TestValidation ("a!12345", _validationContext);
92 Assert.AreEqual (ValidationResult.Success, result, "Should succeed with the default 1 non alpha numeric");
94 result = passwordAttribute.TestValidation ("a123456", _validationContext);
95 Assert.AreEqual ("The 'testDisplay' field is an invalid password. Password must have 1 or more non-alphanumeric characters.", result.ErrorMessage, "Expected validation to fail without non-alphanumerics");
98 passwordAttribute.MinRequiredNonAlphanumericCharacters = 3;
99 result = passwordAttribute.TestValidation ("a!&12345", _validationContext);
100 Assert.AreEqual ("The 'testDisplay' field is an invalid password. Password must have 3 or more non-alphanumeric characters.", result.ErrorMessage, "Expected validation to fail without 3 non-alphanumerics");
102 result = passwordAttribute.TestValidation ("a!?&132154", _validationContext);
103 Assert.AreEqual (ValidationResult.Success, result, "Should succeed with 3 non alpha numerics");
105 passwordAttribute.MinRequiredNonAlphanumericCharacters = 0;
106 result = passwordAttribute.TestValidation ("a123456", _validationContext);
107 Assert.AreEqual (ValidationResult.Success, result, "Should succeed with 0 non alpha numerics");
109 // Error Message changes
110 passwordAttribute.MinRequiredNonAlphanumericCharacters = 1;
111 passwordAttribute.MinNonAlphanumericCharactersError = "There was an error";
112 result = passwordAttribute.TestValidation ("a123456", _validationContext);
113 Assert.AreEqual ("There was an error", result.ErrorMessage, "Error Message wasn't correct without parameters.");
115 passwordAttribute.MinNonAlphanumericCharactersError = "There was an error parameter1: {0}";
116 result = passwordAttribute.TestValidation ("a123456", _validationContext);
117 Assert.AreEqual("There was an error parameter1: testDisplay", result.ErrorMessage, "Error Message wasn't correct with 1 parameter.");
119 passwordAttribute.MinNonAlphanumericCharactersError = "There was an error parameter1: {0} parameter2: {1}";
120 result = passwordAttribute.TestValidation ("a123456", _validationContext);
121 Assert.AreEqual ("There was an error parameter1: testDisplay parameter2: 1", result.ErrorMessage, "Error Message wasn't correct with 2 parameters.");
125 public void FormatErrorMessage ()
127 var passwordAttribute = new MembershipPasswordAttribute ();
128 Assert.AreEqual ("The field testDisplay2 is invalid.", passwordAttribute.FormatErrorMessage ("testDisplay2"));
131 internal class MembershipPasswordAttributeTestClass : MembershipPasswordAttribute
133 public ValidationResult TestValidation (object val, ValidationContext context)
135 return IsValid (val, context);