validates_captcha 0.9.5 → 0.9.6
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.
- data/CHANGELOG.rdoc +6 -0
- data/Rakefile +9 -9
- data/lib/validates_captcha.rb +12 -12
- data/lib/validates_captcha/controller_validation.rb +11 -10
- data/lib/validates_captcha/form_builder.rb +2 -2
- data/lib/validates_captcha/form_helper.rb +11 -11
- data/lib/validates_captcha/image_generator/simple.rb +24 -23
- data/lib/validates_captcha/model_validation.rb +29 -13
- data/lib/validates_captcha/provider/dynamic_image.rb +50 -50
- data/lib/validates_captcha/provider/question.rb +28 -27
- data/lib/validates_captcha/provider/static_image.rb +62 -62
- data/lib/validates_captcha/string_generator/simple.rb +18 -17
- data/lib/validates_captcha/symmetric_encryptor/simple.rb +11 -10
- data/lib/validates_captcha/test_case.rb +1 -0
- data/lib/validates_captcha/version.rb +3 -2
- data/rails/init.rb +4 -4
- data/tasks/static_image_tasks.rake +7 -9
- data/test/cases/controller_validation_test.rb +42 -41
- data/test/cases/image_generator/simple_test.rb +8 -8
- data/test/cases/model_validation_test.rb +79 -64
- data/test/cases/provider/dynamic_image_test.rb +29 -28
- data/test/cases/provider/question_test.rb +11 -10
- data/test/cases/provider/static_image_test.rb +40 -39
- data/test/cases/string_generator/simple_test.rb +29 -29
- data/test/cases/symmetric_encryptor/simple_test.rb +6 -6
- data/test/cases/validates_captcha_test.rb +7 -6
- data/test/test_helper.rb +4 -0
- metadata +3 -3
@@ -6,98 +6,99 @@ class DynamicImageTest < ValidatesCaptcha::TestCase
|
|
6
6
|
test "defines a class level #string_generator method" do
|
7
7
|
assert_respond_to IMAGE, :string_generator
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
test "defines a class level #string_generator= method" do
|
11
11
|
assert_respond_to IMAGE, :string_generator=
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
test "#string_generator method's return value should equal the value set using the #string_generator= method" do
|
15
15
|
old_string_generator = IMAGE.string_generator
|
16
|
-
|
16
|
+
|
17
17
|
IMAGE.string_generator = 'abc'
|
18
18
|
assert_equal 'abc', IMAGE.string_generator
|
19
|
-
|
19
|
+
|
20
20
|
IMAGE.string_generator = old_string_generator
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
test "defines a class level #symmetric_encryptor method" do
|
24
24
|
assert_respond_to IMAGE, :symmetric_encryptor
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
test "defines a class level #symmetric_encryptor= method" do
|
28
28
|
assert_respond_to IMAGE, :symmetric_encryptor=
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
test "#symmetric_encryptor method's return value should equal the value set using the #symmetric_encryptor= method" do
|
32
32
|
old_symmetric_encryptor = IMAGE.symmetric_encryptor
|
33
|
-
|
33
|
+
|
34
34
|
IMAGE.symmetric_encryptor = 'abc'
|
35
35
|
assert_equal 'abc', IMAGE.symmetric_encryptor
|
36
|
-
|
36
|
+
|
37
37
|
IMAGE.symmetric_encryptor = old_symmetric_encryptor
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
test "defines a class level #image_generator method" do
|
41
41
|
assert_respond_to IMAGE, :image_generator
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
test "defines a class level #image_generator= method" do
|
45
45
|
assert_respond_to IMAGE, :image_generator=
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
test "#image_generator method's return value should equal the value set using the #image_generator= method" do
|
49
49
|
old_image_generator = IMAGE.image_generator
|
50
|
-
|
50
|
+
|
51
51
|
IMAGE.image_generator = 'abc'
|
52
52
|
assert_equal 'abc', IMAGE.image_generator
|
53
|
-
|
53
|
+
|
54
54
|
IMAGE.image_generator = old_image_generator
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
test "calling #call with unrecognized path should have response status 404" do
|
58
58
|
result = IMAGE.new.call 'PATH_INFO' => '/unrecognized'
|
59
|
-
|
59
|
+
|
60
60
|
assert_equal 404, result.first
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
test "calling #call with recognized path should not have response status 404" do
|
64
64
|
result = IMAGE.new.call 'PATH_INFO' => IMAGE.new.send(:image_path, 'abc123')
|
65
|
-
|
65
|
+
|
66
66
|
assert_not_equal 404, result.first
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
test "calling #call with valid encrypted captcha code should have response status 200" do
|
70
70
|
encrypted_code = IMAGE.new.generate_challenge
|
71
71
|
result = IMAGE.new.call 'PATH_INFO' => "/captchas/#{encrypted_code}"
|
72
|
-
|
72
|
+
|
73
73
|
assert_equal 200, result.first
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
test "calling #call with valid encrypted captcha code should have expected content type response header" do
|
77
77
|
encrypted_code = IMAGE.new.generate_challenge
|
78
78
|
result = IMAGE.new.call 'PATH_INFO' => "/captchas/#{encrypted_code}"
|
79
|
-
|
79
|
+
|
80
80
|
assert result.second.key?('Content-Type')
|
81
81
|
assert_equal IMAGE.image_generator.mime_type, result.second['Content-Type']
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
test "calling #call with invalid encrypted captcha code should have response status 422" do
|
85
85
|
encrypted_code = IMAGE.new.generate_challenge.reverse
|
86
86
|
result = IMAGE.new.call 'PATH_INFO' => "/captchas/#{encrypted_code}"
|
87
|
-
|
87
|
+
|
88
88
|
assert_equal 422, result.first
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
test "calling #call with regenerate path should have response status 200" do
|
92
92
|
result = IMAGE.new.call 'PATH_INFO' => IMAGE.new.send(:regenerate_path)
|
93
|
-
|
93
|
+
|
94
94
|
assert_equal 200, result.first
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
test "calling #call with regenerate path should have content type response header set to application/json" do
|
98
98
|
result = IMAGE.new.call 'PATH_INFO' => IMAGE.new.send(:regenerate_path)
|
99
|
-
|
99
|
+
|
100
100
|
assert result.second.key?('Content-Type')
|
101
101
|
assert_equal 'application/json', result.second['Content-Type']
|
102
102
|
end
|
103
103
|
end
|
104
|
+
|
@@ -6,36 +6,37 @@ class QuestionTest < ValidatesCaptcha::TestCase
|
|
6
6
|
test "defines a class level #questions_and_answers method" do
|
7
7
|
assert_respond_to QUESTION, :questions_and_answers
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
test "defines a class level #questions_and_answers= method" do
|
11
11
|
assert_respond_to QUESTION, :questions_and_answers=
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
test "#questions_and_answers method's return value should equal the value set using the #questions_and_answers= method" do
|
15
15
|
old_questions_and_answers = QUESTION.questions_and_answers
|
16
|
-
|
16
|
+
|
17
17
|
QUESTION.questions_and_answers = 'abc'
|
18
18
|
assert_equal 'abc', QUESTION.questions_and_answers
|
19
|
-
|
19
|
+
|
20
20
|
QUESTION.questions_and_answers = old_questions_and_answers
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
test "calling #call with unrecognized path should have response status 404" do
|
24
24
|
result = QUESTION.new.call 'PATH_INFO' => '/unrecognized'
|
25
|
-
|
25
|
+
|
26
26
|
assert_equal 404, result.first
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
test "calling #call with regenerate path should have response status 200" do
|
30
30
|
result = QUESTION.new.call 'PATH_INFO' => QUESTION.new.send(:regenerate_path)
|
31
|
-
|
31
|
+
|
32
32
|
assert_equal 200, result.first
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
test "calling #call with regenerate path should have content type response header set to application/json" do
|
36
36
|
result = QUESTION.new.call 'PATH_INFO' => QUESTION.new.send(:regenerate_path)
|
37
|
-
|
37
|
+
|
38
38
|
assert result.second.key?('Content-Type')
|
39
39
|
assert_equal 'application/json', result.second['Content-Type']
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
@@ -14,135 +14,136 @@ class StaticImageTest < ValidatesCaptcha::TestCase
|
|
14
14
|
test "defines a class level #string_generator method" do
|
15
15
|
assert_respond_to STATIC_IMAGE, :string_generator
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
test "defines a class level #string_generator= method" do
|
19
19
|
assert_respond_to STATIC_IMAGE, :string_generator=
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
test "#string_generator method's return value should equal the value set using the #string_generator= method" do
|
23
23
|
old_string_generator = STATIC_IMAGE.string_generator
|
24
|
-
|
24
|
+
|
25
25
|
STATIC_IMAGE.string_generator = 'abc'
|
26
26
|
assert_equal 'abc', STATIC_IMAGE.string_generator
|
27
|
-
|
27
|
+
|
28
28
|
STATIC_IMAGE.string_generator = old_string_generator
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
test "defines a class level #image_generator method" do
|
32
32
|
assert_respond_to STATIC_IMAGE, :image_generator
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
test "defines a class level #image_generator= method" do
|
36
36
|
assert_respond_to STATIC_IMAGE, :image_generator=
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
test "#image_generator method's return value should equal the value set using the #image_generator= method" do
|
40
40
|
old_image_generator = STATIC_IMAGE.image_generator
|
41
|
-
|
41
|
+
|
42
42
|
STATIC_IMAGE.image_generator = 'abc'
|
43
43
|
assert_equal 'abc', STATIC_IMAGE.image_generator
|
44
|
-
|
44
|
+
|
45
45
|
STATIC_IMAGE.image_generator = old_image_generator
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
test "defines a class level #salt method" do
|
49
49
|
assert_respond_to STATIC_IMAGE, :salt
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
test "defines a class level #salt= method" do
|
53
53
|
assert_respond_to STATIC_IMAGE, :salt=
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
test "#salt method's return value should equal the value set using the #salt= method" do
|
57
57
|
old_salt = STATIC_IMAGE.salt
|
58
|
-
|
58
|
+
|
59
59
|
STATIC_IMAGE.salt = 'abc'
|
60
60
|
assert_equal 'abc', STATIC_IMAGE.salt
|
61
|
-
|
61
|
+
|
62
62
|
STATIC_IMAGE.salt = old_salt
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
test "defines a class level #filesystem_dir method" do
|
66
66
|
assert_respond_to STATIC_IMAGE, :filesystem_dir
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
test "defines a class level #filesystem_dir= method" do
|
70
70
|
assert_respond_to STATIC_IMAGE, :filesystem_dir=
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
test "#filesystem_dir method's return value should equal the value set using the #filesystem_dir= method" do
|
74
74
|
old_filesystem_dir = STATIC_IMAGE.filesystem_dir
|
75
|
-
|
75
|
+
|
76
76
|
STATIC_IMAGE.filesystem_dir = 'abc'
|
77
77
|
assert_equal 'abc', STATIC_IMAGE.filesystem_dir
|
78
|
-
|
78
|
+
|
79
79
|
STATIC_IMAGE.filesystem_dir = old_filesystem_dir
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
test "defines a class level #web_dir method" do
|
83
83
|
assert_respond_to STATIC_IMAGE, :web_dir
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
test "defines a class level #web_dir= method" do
|
87
87
|
assert_respond_to STATIC_IMAGE, :web_dir=
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
test "#web_dir method's return value should equal the value set using the #web_dir= method" do
|
91
91
|
old_web_dir = STATIC_IMAGE.web_dir
|
92
|
-
|
92
|
+
|
93
93
|
STATIC_IMAGE.web_dir = 'abc'
|
94
94
|
assert_equal 'abc', STATIC_IMAGE.web_dir
|
95
|
-
|
95
|
+
|
96
96
|
STATIC_IMAGE.web_dir = old_web_dir
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
test "calling #call with unrecognized path should have response status 404" do
|
100
100
|
result = STATIC_IMAGE.new.call 'PATH_INFO' => '/unrecognized'
|
101
|
-
|
101
|
+
|
102
102
|
assert_equal 404, result.first
|
103
103
|
end
|
104
|
-
|
104
|
+
|
105
105
|
test "calling #call with regenerate path should have response status 200" do
|
106
106
|
si = STATIC_IMAGE.new
|
107
107
|
si.instance_variable_set "@challenges", ['abc']
|
108
|
-
|
108
|
+
|
109
109
|
result = si.call 'PATH_INFO' => si.send(:regenerate_path)
|
110
|
-
|
110
|
+
|
111
111
|
assert_equal 200, result.first
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
test "calling #call with regenerate path should have content type response header set to application/json" do
|
115
115
|
si = STATIC_IMAGE.new
|
116
116
|
si.instance_variable_set "@challenges", ['abc']
|
117
|
-
|
117
|
+
|
118
118
|
result = si.call 'PATH_INFO' => si.send(:regenerate_path)
|
119
|
-
|
119
|
+
|
120
120
|
assert result.second.key?('Content-Type')
|
121
121
|
assert_equal 'application/json', result.second['Content-Type']
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
test "calling #generate_challenge should raise runtime error if no images are available" do
|
125
125
|
si = STATIC_IMAGE.new
|
126
126
|
si.instance_variable_set "@images", []
|
127
|
-
|
127
|
+
|
128
128
|
assert_raises RuntimeError do
|
129
129
|
si.generate_challenge
|
130
130
|
end
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
test "calling #generate_challenge should not raise runtime error if an images is available" do
|
134
134
|
si = STATIC_IMAGE.new
|
135
135
|
si.instance_variable_set "@images", ['/path/to/an/image.gif']
|
136
|
-
|
136
|
+
|
137
137
|
assert_nothing_raised do
|
138
138
|
si.generate_challenge
|
139
139
|
end
|
140
|
-
end
|
141
|
-
|
140
|
+
end
|
141
|
+
|
142
142
|
test "calling #generate_challenge should return the image file basename without extension" do
|
143
143
|
si = STATIC_IMAGE.new
|
144
144
|
si.instance_variable_set "@images", ["/path/to/an/captcha-image#{si.send(:image_file_extension)}"]
|
145
|
-
|
145
|
+
|
146
146
|
assert_equal 'captcha-image', si.generate_challenge
|
147
147
|
end
|
148
148
|
end
|
149
|
+
|
@@ -6,110 +6,110 @@ class StringGeneratorTest < ValidatesCaptcha::TestCase
|
|
6
6
|
test "defines a class level #alphabet method" do
|
7
7
|
assert_respond_to SG, :alphabet
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
test "class level #alphabet method returns a string" do
|
11
11
|
assert_kind_of String, SG.alphabet
|
12
12
|
assert_greater_than 0, SG.alphabet.length
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
test "defines a class level #alphabet= method" do
|
16
16
|
assert_respond_to SG, :alphabet=
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
test "#alphabet method's return value should equal the value set using the #alphabet= method" do
|
20
20
|
old_alphabet = SG.alphabet
|
21
|
-
|
21
|
+
|
22
22
|
SG.alphabet = 'abc'
|
23
23
|
assert_equal 'abc', SG.alphabet
|
24
|
-
|
24
|
+
|
25
25
|
SG.alphabet = old_alphabet
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
test "#alphabet= method converts supplied value to a string" do
|
29
29
|
old_alphabet = SG.alphabet
|
30
|
-
|
31
|
-
[:abc, 123, %w(x y z)].each do |value|
|
30
|
+
|
31
|
+
[:abc, 123, %w(x y z)].each do |value|
|
32
32
|
SG.alphabet = value
|
33
33
|
assert_equal value.to_s, SG.alphabet
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
SG.alphabet = old_alphabet
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
test "#alphabet= method removes whitespace from supplied value" do
|
40
40
|
old_alphabet = SG.alphabet
|
41
|
-
|
41
|
+
|
42
42
|
SG.alphabet = " abc d ef\n"
|
43
43
|
assert_equal "abcdef", SG.alphabet
|
44
|
-
|
44
|
+
|
45
45
|
SG.alphabet = old_alphabet
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
test "#alphabet= method raises error if supplied value is blank" do
|
49
49
|
assert_raise RuntimeError do
|
50
50
|
SG.alphabet = ''
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
test "defines a class level #length method" do
|
55
55
|
assert_respond_to SG, :length
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
test "class level #length method returns a number" do
|
59
59
|
assert_kind_of Fixnum, SG.length
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
test "defines a class level #length= method" do
|
63
63
|
assert_respond_to SG, :length=
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
test "#length method's return value should equal the value set using the #length= method" do
|
67
67
|
old_length = SG.length
|
68
|
-
|
68
|
+
|
69
69
|
SG.length = 42
|
70
70
|
assert_equal 42, SG.length
|
71
|
-
|
71
|
+
|
72
72
|
SG.length = old_length
|
73
73
|
end
|
74
74
|
|
75
75
|
test "defines an instance level #generate method" do
|
76
76
|
assert_respond_to SG.new, :generate
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
test "instance level #generate method returns a string" do
|
80
80
|
assert_kind_of String, SG.new.generate
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
test "calling #generate should return a string of #length size" do
|
84
84
|
10.times do
|
85
85
|
assert_equal SG.length, SG.new.generate.length
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
test "calling #generate with custom set #length should return a string of #length size" do
|
90
90
|
old_length = SG.length
|
91
91
|
SG.length = 42
|
92
|
-
|
92
|
+
|
93
93
|
10.times do
|
94
94
|
assert_equal 42, SG.new.generate.length
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
SG.length = old_length
|
98
98
|
end
|
99
|
-
|
99
|
+
|
100
100
|
test "string returned from #generate should only contain chars from #alphabet" do
|
101
101
|
old_alphabet = SG.alphabet
|
102
102
|
old_length = SG.length
|
103
|
-
|
103
|
+
|
104
104
|
SG.alphabet = 'Abc123'
|
105
105
|
SG.length = 1000
|
106
106
|
generated = SG.new.generate
|
107
|
-
|
107
|
+
|
108
108
|
assert generated.tr('Abc123', ' ').blank?
|
109
109
|
assert !generated.tr('abc123', ' ').blank?
|
110
|
-
|
110
|
+
|
111
111
|
SG.length = old_length
|
112
|
-
SG.alphabet = old_alphabet
|
112
|
+
SG.alphabet = old_alphabet
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|