password_strength 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +8 -6
- data/Gemfile +1 -1
- data/README.md +31 -5
- data/Rakefile +2 -0
- data/app/assets/javascripts/jquery_strength.js +10 -2
- data/app/assets/javascripts/password_strength.js +24 -3
- data/gemfiles/{ar_3_2.gemfile → am_3_2.gemfile} +1 -1
- data/gemfiles/{ar_4_0.gemfile → am_4_0.gemfile} +1 -1
- data/gemfiles/{ar_4_1.gemfile → am_4_1.gemfile} +1 -1
- data/gemfiles/am_4_2.gemfile +4 -0
- data/lib/password_strength/active_model.rb +1 -1
- data/lib/password_strength/base.rb +8 -0
- data/lib/password_strength/version.rb +2 -2
- data/package.json +11 -0
- data/password_strength.gemspec +2 -4
- data/support/common.txt +14 -14
- data/test/active_model_test.rb +2 -3
- data/test/password_strength_test.html +12 -34
- data/test/password_strength_test.js +321 -251
- data/test/password_strength_test.rb +8 -2
- data/test/test_helper.rb +14 -5
- data/test/user.rb +14 -1
- data/test/validators/windows2008_test.rb +1 -1
- metadata +11 -49
- data/Gemfile.lock +0 -64
- data/test/jquery-1.4.2.js +0 -6240
- data/test/jquery_strength_test.html +0 -43
- data/test/jquery_strength_test.js +0 -105
- data/test/jsunittest/jsunittest.js +0 -1017
- data/test/jsunittest/unittest.css +0 -54
- data/test/schema.rb +0 -8
data/test/active_model_test.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
require "test_helper"
|
3
2
|
|
4
|
-
class TestActiveModel < Test
|
3
|
+
class TestActiveModel < Minitest::Test
|
5
4
|
def setup
|
6
5
|
PasswordStrength.enabled = true
|
7
6
|
Object.class_eval { remove_const("User") } if defined?(User)
|
@@ -79,7 +78,7 @@ class TestActiveModel < Test::Unit::TestCase
|
|
79
78
|
def test_lambda_incorrect_level
|
80
79
|
User.validates_strength_of :password, :level => lambda {|u| 'incorrect_level' }
|
81
80
|
|
82
|
-
|
81
|
+
assert_raises(ArgumentError, "The :level option must be one of [:weak, :good, :strong], a proc or a lambda") do
|
83
82
|
@user.update_attributes :username => "johndoe", :password => "johndoe"
|
84
83
|
end
|
85
84
|
end
|
@@ -1,42 +1,20 @@
|
|
1
|
-
<!
|
2
|
-
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
4
3
|
<head>
|
5
|
-
|
6
|
-
|
7
|
-
<script src="jsunittest/jsunittest.js" type="text/javascript"></script>
|
8
|
-
<script src="../app/assets/javascripts/password_strength.js" type="text/javascript"></script>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>PasswordStrength</title>
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
padding: 5px;
|
16
|
-
}
|
17
|
-
</style>
|
7
|
+
<link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
|
8
|
+
<script src="../node_modules/qunitjs/qunit/qunit.js"></script>
|
9
|
+
<script src="../node_modules/jquery/dist/jquery.js"></script>
|
10
|
+
<script src="../app/assets/javascripts/password_strength.js"></script>
|
11
|
+
<script src="../app/assets/javascripts/jquery_strength.js"></script>
|
18
12
|
</head>
|
19
13
|
<body>
|
20
14
|
|
21
|
-
<div id="
|
22
|
-
|
23
|
-
<h1>JavaScript unit test file</h1>
|
24
|
-
<p>
|
25
|
-
This file tests <strong>password_strength.js</strong>.
|
26
|
-
</p>
|
27
|
-
</div>
|
28
|
-
|
29
|
-
<!-- Log output (one per Runner, via {testLog: "testlog"} option)-->
|
30
|
-
<div id="testlog"></div>
|
31
|
-
|
32
|
-
<!-- General debugger -->
|
33
|
-
<div id="logger"></div>
|
34
|
-
|
35
|
-
<!-- Put sample/test html here -->
|
36
|
-
<div id="sample">
|
37
|
-
</div>
|
38
|
-
</div>
|
15
|
+
<div id="qunit"></div>
|
16
|
+
<div id="sample"></div>
|
39
17
|
|
40
|
-
<script src="password_strength_test.js"
|
18
|
+
<script src="password_strength_test.js"></script>
|
41
19
|
</body>
|
42
20
|
</html>
|
@@ -1,273 +1,343 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
var strength;
|
2
|
+
|
3
|
+
QUnit.module("PasswordStrength", {
|
4
|
+
beforeEach: function() {
|
3
5
|
strength = new PasswordStrength();
|
4
6
|
strength.username = "johndoe";
|
5
7
|
strength.password = "mypass";
|
6
|
-
}
|
8
|
+
}
|
9
|
+
});
|
7
10
|
|
8
|
-
|
9
|
-
|
11
|
+
QUnit.test("shortcut", function(assert) {
|
12
|
+
strength = PasswordStrength.test("johndoe", "mypass");
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
assertEqual("johndoe", strength.username);
|
16
|
-
assertEqual("mypass", strength.password);
|
17
|
-
assertNotNull(strength.status);
|
18
|
-
}},
|
19
|
-
|
20
|
-
// Good strength
|
21
|
-
testGoodStrength: function() { with(this) {
|
22
|
-
strength.status = "good";
|
23
|
-
assert(strength.isGood());
|
24
|
-
assert(strength.isValid("good"));
|
25
|
-
assertEqual(false, strength.isWeak());
|
26
|
-
assertEqual(false, strength.isStrong());
|
27
|
-
assertEqual(false, strength.isInvalid());
|
28
|
-
}},
|
29
|
-
|
30
|
-
// Weak strength
|
31
|
-
testWeakStrength: function() { with(this) {
|
32
|
-
strength.status = "weak";
|
33
|
-
assert(strength.isWeak());
|
34
|
-
assert(strength.isValid("weak"));
|
35
|
-
assertEqual(false, strength.isStrong());
|
36
|
-
assertEqual(false, strength.isGood());
|
37
|
-
assertEqual(false, strength.isInvalid());
|
38
|
-
}},
|
39
|
-
|
40
|
-
// Strong strength
|
41
|
-
testStrongStrength: function() { with(this) {
|
42
|
-
strength.status = "strong";
|
43
|
-
assert(strength.isStrong());
|
44
|
-
assert(strength.isValid("strong"));
|
45
|
-
assert(strength.isValid("good"));
|
46
|
-
assertEqual(false, strength.isWeak());
|
47
|
-
assertEqual(false, strength.isGood());
|
48
|
-
assertEqual(false, strength.isInvalid());
|
49
|
-
}},
|
50
|
-
|
51
|
-
// Short password
|
52
|
-
testShortPassword: function() { with(this) {
|
53
|
-
strength.password = "a";
|
54
|
-
strength.test();
|
14
|
+
assert.equal("johndoe", strength.username);
|
15
|
+
assert.equal("mypass", strength.password);
|
16
|
+
assert.ok(strength.status);
|
17
|
+
});
|
55
18
|
|
56
|
-
|
57
|
-
|
58
|
-
}},
|
19
|
+
QUnit.test("detect good strength", function(assert) {
|
20
|
+
strength.status = "good";
|
59
21
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
22
|
+
assert.ok(strength.isGood());
|
23
|
+
assert.ok(strength.isValid("good"));
|
24
|
+
assert.equal(strength.isWeak(), false);
|
25
|
+
assert.equal(strength.isStrong(), false);
|
26
|
+
assert.equal(strength.isInvalid(), false);
|
27
|
+
});
|
65
28
|
|
66
|
-
|
67
|
-
|
68
|
-
}},
|
29
|
+
QUnit.test("detect weak strength", function(assert) {
|
30
|
+
strength.status = "weak";
|
69
31
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
32
|
+
assert.ok(strength.isWeak());
|
33
|
+
assert.ok(strength.isValid("weak"));
|
34
|
+
assert.equal(strength.isStrong(), false);
|
35
|
+
assert.equal(strength.isGood(), false);
|
36
|
+
assert.equal(strength.isInvalid(), false);
|
37
|
+
});
|
74
38
|
|
75
|
-
|
76
|
-
|
77
|
-
}},
|
39
|
+
QUnit.test("detect strong strength", function(assert) {
|
40
|
+
strength.status = "strong";
|
78
41
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
42
|
+
assert.ok(strength.isStrong());
|
43
|
+
assert.ok(strength.isValid("strong"));
|
44
|
+
assert.ok(strength.isValid("good"));
|
45
|
+
assert.equal(strength.isWeak(), false);
|
46
|
+
assert.equal(strength.isGood(), false);
|
47
|
+
assert.equal(strength.isInvalid(), false);
|
48
|
+
});
|
84
49
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
}},
|
50
|
+
QUnit.test("test short password", function(assert) {
|
51
|
+
strength.password = "abc";
|
52
|
+
strength.test();
|
89
53
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
strength.test();
|
94
|
-
assertEqual("good", strength.status);
|
54
|
+
assert.equal(strength.score, 0);
|
55
|
+
assert.equal(strength.status, "weak");
|
56
|
+
});
|
95
57
|
|
96
|
-
|
97
|
-
|
98
|
-
|
58
|
+
QUnit.test("test password equal to username", function(assert) {
|
59
|
+
strength.username = "johndoe";
|
60
|
+
strength.password = "johndoe";
|
61
|
+
strength.test();
|
99
62
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
}},
|
104
|
-
|
105
|
-
// Penalize password with chars only
|
106
|
-
testPenalizePasswordWithCharsOnly: function() { with(this) {
|
107
|
-
strength.password = "abcdef";
|
108
|
-
assertEqual(-15, strength.scoreFor("only_chars"));
|
109
|
-
}},
|
110
|
-
|
111
|
-
// Penalize password with numbers only
|
112
|
-
testPenalizePasswordWithNumbersOnly: function() { with(this) {
|
113
|
-
strength.password = "12345";
|
114
|
-
assertEqual(-15, strength.scoreFor("only_numbers"));
|
115
|
-
}},
|
116
|
-
|
117
|
-
// Penalize password equals to username
|
118
|
-
testPenalizePasswordEqualsToUsername: function() { with(this) {
|
119
|
-
strength.username = "johndoe";
|
120
|
-
strength.password = "johndoe";
|
121
|
-
assertEqual(-100, strength.scoreFor("username"));
|
122
|
-
}},
|
63
|
+
assert.equal(strength.score, 0);
|
64
|
+
assert.equal(strength.status, "weak");
|
65
|
+
});
|
123
66
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
strength.password = "12345";
|
194
|
-
assertEqual(-100, strength.scoreFor("password_size"));
|
195
|
-
}},
|
196
|
-
|
197
|
-
// Password with numbers
|
198
|
-
testPasswordWithNumbers: function() { with(this) {
|
199
|
-
strength.password = "123";
|
200
|
-
assertEqual(5, strength.scoreFor("numbers"));
|
201
|
-
}},
|
202
|
-
|
203
|
-
// Password with symbols
|
204
|
-
testPasswordWithSymbols: function() { with(this) {
|
205
|
-
strength.password = "$!";
|
206
|
-
assertEqual(5, strength.scoreFor("symbols"));
|
207
|
-
}},
|
208
|
-
|
209
|
-
// Password with uppercase and lowercase
|
210
|
-
testPasswordWithUppercaseAndLowercase: function() { with(this) {
|
211
|
-
strength.password = "aA";
|
212
|
-
assertEqual(10, strength.scoreFor("uppercase_lowercase"));
|
213
|
-
}},
|
214
|
-
|
215
|
-
// numbers and chars
|
216
|
-
testNumbersAndChars: function() { with(this) {
|
217
|
-
strength.password = "a1";
|
218
|
-
assertEqual(15, strength.scoreFor("numbers_chars"));
|
219
|
-
}},
|
220
|
-
|
221
|
-
// Numbers and symbols
|
222
|
-
testNumbersAndSymbols: function() { with(this) {
|
223
|
-
strength.password = "1$";
|
224
|
-
assertEqual(15, strength.scoreFor("numbers_symbols"));
|
225
|
-
}},
|
226
|
-
|
227
|
-
// Symbols and chars
|
228
|
-
testSymbolsAndChars: function() { with(this) {
|
229
|
-
strength.password = "a$";
|
230
|
-
assertEqual(15, strength.scoreFor("symbols_chars"));
|
231
|
-
}},
|
232
|
-
|
233
|
-
// Two char repetition
|
234
|
-
testTwoCharRepetition: function() { with(this) {
|
235
|
-
assertEqual(3, strength.repetitions("11221122", 2));
|
236
|
-
}},
|
237
|
-
|
238
|
-
// Three char repetition
|
239
|
-
testThreeCharRepetition: function() { with(this) {
|
240
|
-
assertEqual(3, strength.repetitions("123123123", 3));
|
241
|
-
}},
|
242
|
-
|
243
|
-
// Four char repetition
|
244
|
-
testFourCharRepetition: function() { with(this) {
|
245
|
-
assertEqual(4, strength.repetitions("abcdabcdabcd", 4));
|
246
|
-
}},
|
247
|
-
|
248
|
-
// Exclude option as regular expression
|
249
|
-
testExcludeOptionAsRegularExpression: function() { with(this) {
|
250
|
-
strength.password = "password with whitespaces";
|
251
|
-
strength.exclude = /\s/;
|
252
|
-
strength.test();
|
67
|
+
QUnit.test("test strong password", function(assert) {
|
68
|
+
strength.password = "^P4ssw0rd$";
|
69
|
+
strength.test();
|
70
|
+
|
71
|
+
assert.equal(strength.score, 100);
|
72
|
+
assert.equal(strength.status, "strong");
|
73
|
+
});
|
74
|
+
|
75
|
+
QUnit.test("test weak password", function(assert) {
|
76
|
+
strength.password = "ytrewq";
|
77
|
+
strength.test()
|
78
|
+
assert.equal(strength.status, "weak");
|
79
|
+
|
80
|
+
strength.password = "asdfghjklm";
|
81
|
+
strength.test();
|
82
|
+
assert.equal(strength.status, "weak");
|
83
|
+
});
|
84
|
+
|
85
|
+
QUnit.test("test good password", function(assert) {
|
86
|
+
strength.password = "12345asdfg";
|
87
|
+
strength.test();
|
88
|
+
assert.equal(strength.status, "good");
|
89
|
+
|
90
|
+
strength.password = "12345ASDFG";
|
91
|
+
strength.test();
|
92
|
+
assert.equal(strength.status, "good");
|
93
|
+
|
94
|
+
strength.password = "12345Aa";
|
95
|
+
strength.test();
|
96
|
+
assert.equal(strength.status, "good");
|
97
|
+
});
|
98
|
+
|
99
|
+
QUnit.test("penalize password with chars-only", function(assert) {
|
100
|
+
strength.password = "abcdef";
|
101
|
+
assert.equal(strength.scoreFor("only_chars"), -15);
|
102
|
+
});
|
103
|
+
|
104
|
+
QUnit.test("penalize password numbers-only", function(assert) {
|
105
|
+
strength.password = "12345";
|
106
|
+
assert.equal(strength.scoreFor("only_numbers"), -15);
|
107
|
+
});
|
108
|
+
|
109
|
+
QUnit.test("penalize password equal to username", function(assert) {
|
110
|
+
strength.username = "johndoe";
|
111
|
+
strength.password = "johndoe";
|
112
|
+
assert.equal(strength.scoreFor("username"), -100);
|
113
|
+
});
|
114
|
+
|
115
|
+
QUnit.test("penalize password that contains username", function(assert) {
|
116
|
+
strength.username = "johndoe";
|
117
|
+
strength.password = "$1234johndoe^";
|
118
|
+
assert.equal(strength.scoreFor("username"), -15);
|
119
|
+
});
|
120
|
+
|
121
|
+
QUnit.test("penalize number sequence", function(assert) {
|
122
|
+
strength.password = "123";
|
123
|
+
assert.equal(strength.scoreFor("sequences"), -15);
|
124
|
+
|
125
|
+
strength.password = "123123";
|
126
|
+
assert.equal(strength.scoreFor("sequences"), -30);
|
127
|
+
});
|
128
|
+
|
129
|
+
QUnit.test("penalize letter sequence", function(assert) {
|
130
|
+
strength.password = "abc";
|
131
|
+
assert.equal(strength.scoreFor("sequences"), -15);
|
132
|
+
|
133
|
+
strength.password = "abcabc";
|
134
|
+
assert.equal(strength.scoreFor("sequences"), -30);
|
135
|
+
});
|
253
136
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
}},
|
137
|
+
QUnit.test("penalize number and letter sequence", function(assert) {
|
138
|
+
strength.password = "123abc";
|
139
|
+
assert.equal(strength.scoreFor("sequences"), -30);
|
258
140
|
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
141
|
+
strength.password = "123abc123abc";
|
142
|
+
assert.equal(strength.scoreFor("sequences"), -60);
|
143
|
+
});
|
144
|
+
|
145
|
+
QUnit.test("penalize same letter sequence", function(assert) {
|
146
|
+
strength.password = "aaa";
|
147
|
+
assert.equal(strength.scoreFor("sequences"), -30);
|
148
|
+
});
|
149
|
+
|
150
|
+
QUnit.test("penalize same number sequence", function(assert) {
|
151
|
+
strength.password = "111";
|
152
|
+
assert.equal(strength.scoreFor("sequences"), -30);
|
153
|
+
});
|
154
|
+
|
155
|
+
QUnit.test("penalize reversed sequence", function(assert) {
|
156
|
+
strength.password = "cba321";
|
157
|
+
assert.equal(strength.scoreFor("sequences"), -30);
|
158
|
+
|
159
|
+
strength.password = "cba321cba321";
|
160
|
+
assert.equal(strength.scoreFor("sequences"), -60);
|
161
|
+
});
|
162
|
+
|
163
|
+
QUnit.test("penalize short password", function(assert) {
|
164
|
+
strength.password = "123";
|
165
|
+
assert.equal(strength.scoreFor("password_size"), -100);
|
166
|
+
});
|
167
|
+
|
168
|
+
QUnit.test("penalize repetitions", function(assert) {
|
169
|
+
strength.password = "abcdabcdabcd";
|
170
|
+
assert.equal(strength.scoreFor("repetitions"), -36);
|
171
|
+
});
|
172
|
+
|
173
|
+
QUnit.test("penalize password length", function(assert) {
|
174
|
+
strength.password = "12345";
|
175
|
+
assert.equal(strength.scoreFor("password_size"), -100);
|
176
|
+
});
|
263
177
|
|
264
|
-
|
265
|
-
|
266
|
-
|
178
|
+
QUnit.test("reward password with numbers", function(assert) {
|
179
|
+
strength.password = "123";
|
180
|
+
assert.equal(strength.scoreFor("numbers"), 5);
|
181
|
+
});
|
182
|
+
|
183
|
+
QUnit.test("reward password with symbols", function(assert) {
|
184
|
+
strength.password = "$!";
|
185
|
+
assert.equal(strength.scoreFor("symbols"), 5);
|
186
|
+
});
|
187
|
+
|
188
|
+
QUnit.test("reward mixed-case passwords", function(assert) {
|
189
|
+
strength.password = "aA";
|
190
|
+
assert.equal(strength.scoreFor("uppercase_lowercase"), 10);
|
191
|
+
});
|
192
|
+
|
193
|
+
QUnit.test("reward password that contains both numbers and letters", function(assert) {
|
194
|
+
strength.password = "a1";
|
195
|
+
assert.equal(strength.scoreFor("numbers_chars"), 15);
|
196
|
+
});
|
197
|
+
|
198
|
+
QUnit.test("reward password that contains both numbers and symbols", function(assert) {
|
199
|
+
strength.password = "1$";
|
200
|
+
assert.equal(strength.scoreFor("numbers_symbols"), 15);
|
201
|
+
});
|
202
|
+
|
203
|
+
QUnit.test("reward password that contains symbols and chars", function(assert) {
|
204
|
+
strength.password = "a$";
|
205
|
+
assert.equal(strength.scoreFor("symbols_chars"), 15);
|
206
|
+
});
|
207
|
+
|
208
|
+
QUnit.test("detect two-chars repetitions", function(assert) {
|
209
|
+
assert.equal(strength.repetitions("11221122", 2), 3);
|
210
|
+
});
|
211
|
+
|
212
|
+
QUnit.test("detect three-chars repetitions", function(assert) {
|
213
|
+
assert.equal(strength.repetitions("123123123", 3), 3);
|
214
|
+
});
|
215
|
+
|
216
|
+
QUnit.test("detect four-chars repetitions", function(assert) {
|
217
|
+
assert.equal(strength.repetitions("abcdabcdabcd", 4), 4);
|
218
|
+
});
|
219
|
+
|
220
|
+
QUnit.test("use exclude option as regular expression", function(assert) {
|
221
|
+
strength.password = "password with whitespaces";
|
222
|
+
strength.exclude = /\s/;
|
223
|
+
strength.test();
|
224
|
+
|
225
|
+
assert.equal(strength.status, "invalid");
|
226
|
+
assert.ok(strength.isInvalid());
|
227
|
+
assert.equal(strength.isValid(), false);
|
228
|
+
});
|
229
|
+
|
230
|
+
QUnit.test("set common words", function(assert) {
|
231
|
+
assert.ok(PasswordStrength.commonWords.length > 500);
|
232
|
+
});
|
233
|
+
|
234
|
+
QUnit.test("reject common passwords", function(assert) {
|
235
|
+
strength.password = PasswordStrength.commonWords[0];
|
236
|
+
strength.test();
|
237
|
+
|
238
|
+
assert.equal(strength.status, "invalid");
|
239
|
+
assert.ok(strength.isInvalid());
|
240
|
+
assert.equal(strength.isValid(), false);
|
241
|
+
});
|
242
|
+
|
243
|
+
QUnit.test("reject long passwords using same character", function(assert) {
|
244
|
+
strength.password = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
267
245
|
strength.test();
|
246
|
+
assert.equal(strength.status, "invalid");
|
247
|
+
// assert @strength.invalid?
|
248
|
+
// refute @strength.valid?
|
249
|
+
});
|
250
|
+
|
251
|
+
QUnit.module("PasswordStrength: jQuery integration", {
|
252
|
+
beforeEach: function() {
|
253
|
+
$("#sample").html('<input type="text" id="username"><input type="text" id="password">');
|
254
|
+
$("#username").val("johndoe");
|
255
|
+
$("#password").val("mypass");
|
256
|
+
},
|
257
|
+
|
258
|
+
afterEach: function() {
|
259
|
+
$("#sample").empty();
|
260
|
+
}
|
261
|
+
});
|
262
|
+
|
263
|
+
QUnit.test("test defaults", function(assert) {
|
264
|
+
$.strength("#username", "#password");
|
265
|
+
$("#password").trigger("keydown");
|
266
|
+
|
267
|
+
assert.equal($("img.strength").length, 1);
|
268
|
+
});
|
269
|
+
|
270
|
+
QUnit.test("custom callback", function(assert) {
|
271
|
+
assert.expect(5);
|
272
|
+
|
273
|
+
$.strength("#username", "#password", function(username, password, strength){
|
274
|
+
assert.ok($(username).is("#username"));
|
275
|
+
assert.ok($(password).is("#password"));
|
276
|
+
assert.equal(strength.username, "johndoe");
|
277
|
+
assert.equal(strength.password, "mypass");
|
278
|
+
assert.equal(strength.status, "weak");
|
279
|
+
});
|
280
|
+
|
281
|
+
$("#password").trigger("keydown");
|
282
|
+
});
|
283
|
+
|
284
|
+
QUnit.test("apply callback when username is triggered", function(assert) {
|
285
|
+
$.strength("#username", "#password");
|
286
|
+
$("#username").trigger("keydown");
|
287
|
+
|
288
|
+
assert.equal($("img.strength").length, 1);
|
289
|
+
});
|
290
|
+
|
291
|
+
QUnit.test("apply weak status to image", function(assert) {
|
292
|
+
$.strength("#username", "#password");
|
293
|
+
$("#password").trigger("keydown");
|
294
|
+
|
295
|
+
assert.equal($("img.weak").length, 1);
|
296
|
+
assert.equal($("img.strength").attr("src"), "/images/weak.png");
|
297
|
+
});
|
298
|
+
|
299
|
+
QUnit.test("apply good status to image", function(assert) {
|
300
|
+
$("#password").val("12345asdfg");
|
301
|
+
$.strength("#username", "#password");
|
302
|
+
$("#password").trigger("keydown");
|
303
|
+
|
304
|
+
assert.equal($("img.good").length, 1);
|
305
|
+
assert.equal($("img.strength").attr("src"), "/images/good.png");
|
306
|
+
});
|
307
|
+
|
308
|
+
QUnit.test("apply strong status to image", function(assert) {
|
309
|
+
$("#password").val("^P4ssw0rd$");
|
310
|
+
$.strength("#username", "#password");
|
311
|
+
$("#password").trigger("keydown");
|
312
|
+
|
313
|
+
assert.equal($("img.strong").length, 1);
|
314
|
+
assert.equal($("img.strength").attr("src"), "/images/strong.png");
|
315
|
+
});
|
316
|
+
|
317
|
+
QUnit.test("missing username element: use selector as text", function(assert) {
|
318
|
+
$("#password").val("^P4ssw0rd$");
|
319
|
+
$.strength("root", "#password", function(username, password, strength){
|
320
|
+
assert.equal(strength.username, "root");
|
321
|
+
assert.equal(strength.password, "^P4ssw0rd$");
|
322
|
+
});
|
323
|
+
|
324
|
+
$("#password").trigger("keydown");
|
325
|
+
});
|
326
|
+
|
327
|
+
QUnit.test("missing password element: use selector as text", function(assert) {
|
328
|
+
$.strength("#username", "mypass", function(username, password, strength){
|
329
|
+
assert.equal(strength.username, "johndoe");
|
330
|
+
assert.equal(strength.password, "mypass");
|
331
|
+
});
|
332
|
+
|
333
|
+
$("#username").trigger("keydown");
|
334
|
+
});
|
335
|
+
|
336
|
+
QUnit.test("test exclude option as regular expression", function(assert) {
|
337
|
+
$.strength("#username", "password with whitespaces", {exclude: /\s/}, function(username, password, strength){
|
338
|
+
assert.equal(strength.status, "invalid");
|
339
|
+
assert.ok(strength.isInvalid());
|
340
|
+
});
|
268
341
|
|
269
|
-
|
270
|
-
assert(strength.isInvalid());
|
271
|
-
assertEqual(false, strength.isValid());
|
272
|
-
}}
|
342
|
+
$("#username").trigger("keydown");
|
273
343
|
});
|