karsthammer-validates_captcha 0.9.5a

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