formkeeper 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ login:
2
+ username:
3
+ present: You must input name
4
+ ascii: Name should be ASCII
5
+ length: Name's length should be between 8 and 16
6
+ DEFAULT: Input your name correctly!
7
+ password:
8
+ present: You must input password
9
+ ascii: Password should be ASCII
10
+ length: Password's length should be between 8 and 16
11
+ DEFAULT:
12
+ username:
13
+ ascii: Name should be ASCII
14
+ length: Name's length should be between 8 and 16
15
+ DEFAULT: Input your name correctly!
16
+ password:
17
+ ascii: Password should be ASCII
18
+ length: Password's length should be between 8 and 16
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe FormKeeper::Messages do
4
+
5
+ it "handles messages file correctly" do
6
+
7
+ messages = FormKeeper::Messages.from_file(File.dirname(__FILE__) + '/asset/messages.yaml')
8
+
9
+ messages.get('login', 'username', 'present').should == "You must input name"
10
+
11
+ # work with symbols
12
+ messages.get(:login, :username, :present).should == "You must input name"
13
+
14
+ # unknown field - use DEFAULT action block
15
+ messages.get(:login, :username, :unknown).should == "Input your name correctly!"
16
+
17
+ # unknown field and DEFAULT action block not found
18
+ messages.get(:login, :password, :unknown).should == "password is invalid."
19
+
20
+ # unknown action - search from DEFAULT action block
21
+ messages.get(:unknown, :username, :present).should == "Input your name correctly!"
22
+ end
23
+
24
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe FormKeeper::Record do
4
+
5
+ it "handles failure correctly" do
6
+ record = FormKeeper::Record.new(:username)
7
+
8
+ record.name.should == :username
9
+
10
+ record.value.should be_nil
11
+ record.value = 'foo'
12
+ record.value.should == 'foo'
13
+
14
+ record.failed?.should_not be_true
15
+
16
+ record.fail(:present)
17
+ record.fail(:length)
18
+
19
+ record.failed?.should be_true
20
+ record.failed_by?(:present).should be_true
21
+ record.failed_by?(:length).should be_true
22
+ record.failed_by?(:characters).should_not be_true
23
+
24
+ record.failed_constraints[0].should == :present
25
+ record.failed_constraints[1].should == :length
26
+ end
27
+
28
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe FormKeeper::Report do
4
+
5
+ it "handles valid records correctly" do
6
+
7
+ report = FormKeeper::Report.new
8
+ record1 = FormKeeper::Record.new(:username)
9
+ record1.value = 'foo'
10
+ record2 = FormKeeper::Record.new(:password)
11
+ record2.value = 'bar'
12
+
13
+ report << record1
14
+ report << record2
15
+
16
+ report.failed?.should_not be_true
17
+ report[:username].should == 'foo'
18
+ report[:password].should == 'bar'
19
+
20
+ end
21
+
22
+ it "handles invalid records correctly" do
23
+
24
+ report = FormKeeper::Report.new
25
+ record1 = FormKeeper::Record.new(:username)
26
+ record1.value = 'foo'
27
+ record2 = FormKeeper::Record.new(:password)
28
+ record2.value = 'bar'
29
+ record2.fail(:length)
30
+ record3 = FormKeeper::Record.new(:email)
31
+ record3.value = 'bar'
32
+ record3.fail(:present)
33
+ record3.fail(:length)
34
+
35
+ report << record1
36
+ report << record2
37
+ report << record3
38
+
39
+ report.failed?.should be_true
40
+ report.failed_on?(:password).should be_true
41
+ report.failed_on?(:password, :length).should be_true
42
+ report.failed_on?(:password, :present).should_not be_true
43
+ report.failed_on?(:email).should be_true
44
+ report.failed_on?(:email, :present).should be_true
45
+ report.failed_on?(:email, :length).should be_true
46
+ report.failed_on?(:email, :ascii).should_not be_true
47
+ report[:username].should == 'foo'
48
+ report[:password].should be_nil
49
+ report[:email].should be_nil
50
+
51
+ report.failed_fields.should == [:password, :email]
52
+ report.failed_constraints(:password).should == [:length]
53
+ report.failed_constraints(:email).should == [:present, :length]
54
+
55
+ end
56
+
57
+ it "handles messages correctly" do
58
+
59
+ messages = FormKeeper::Messages.from_file(File.dirname(__FILE__) + '/asset/messages.yaml')
60
+
61
+ report = FormKeeper::Report.new(messages)
62
+ record1 = FormKeeper::Record.new(:username)
63
+ record1.value = 'foo'
64
+ record2 = FormKeeper::Record.new(:password)
65
+ record2.value = 'bar'
66
+ record2.fail(:length)
67
+ record3 = FormKeeper::Record.new(:email)
68
+ record3.value = 'bar'
69
+ record3.fail(:present)
70
+ record3.fail(:length)
71
+
72
+ report << record1
73
+ report << record2
74
+ report << record3
75
+
76
+ report.messages(:login).should == ["Password's length should be between 8 and 16", "email is invalid."]
77
+ report.messages(:login, :password).should == ["Password's length should be between 8 and 16"]
78
+ report.message(:login, :password, :ascii).should be_nil
79
+ report.message(:login, :password, :length).should == "Password's length should be between 8 and 16"
80
+ end
81
+
82
+
83
+ end
@@ -0,0 +1,174 @@
1
+ require 'spec_helper'
2
+
3
+ describe FormKeeper::Respondent do
4
+
5
+ it "fills text form correctly" do
6
+ filled = FormKeeper::Respondent.new.fill_up(<<-HTML, { 'username'=> "Andy >", 'password'=> "Hug", 'message'=> "Hello!<>" })
7
+ <!DOCTYPE html SYSTEM>
8
+ <html>
9
+ <head>test</head>
10
+ <body>
11
+ <h1>Login</h1>
12
+ <form action="/api/post" method="post">
13
+ <input type="text" name="username" value="input your name here">
14
+ <input type="password" name="password">
15
+ <textarea name="message">foobar</textarea>
16
+ </form>
17
+ </body>
18
+ </html>
19
+ HTML
20
+ filled.should == <<-HTML
21
+ <!DOCTYPE html SYSTEM>
22
+ <html>
23
+ <head>test</head>
24
+ <body>
25
+ <h1>Login</h1>
26
+ <form action="/api/post" method="post">
27
+ <input type="text" name="username" value="Andy &gt;" />
28
+ <input type="password" name="password" value="Hug" />
29
+ <textarea name="message">Hello!&lt;&gt;</textarea>
30
+ </form>
31
+ </body>
32
+ </html>
33
+ HTML
34
+ end
35
+
36
+ it "checks checkboxes and radio-buttons correctly" do
37
+ filled = FormKeeper::Respondent.new.fill_up(<<-HTML, { 'food'=> "1", 'media'=> ["1", "2"] })
38
+ <!DOCTYPE html SYSTEM>
39
+ <html>
40
+ <head>test</head>
41
+ <body>
42
+ <form action="/api/post" method="post">
43
+ <h2>Choose your favarite</h2>
44
+ <label>Sushi</label><input type="radio" name="food" value="0" checked>
45
+ <label>Sake</label><input type="radio" name="food" value="1">
46
+ <label>Umeboshi</label><input type="radio" name="food" value="2">
47
+ <h2>Where did you know about this page?</h2>
48
+ <label>web site</label><input type="radio" name="media" value="0" checked>
49
+ <label>magazine</label><input type="radio" name="media" value="1">
50
+ <label>TV show</label><input type="radio" name="media" value="2">
51
+ </form>
52
+ </body>
53
+ </html>
54
+ HTML
55
+ filled.should == <<-HTML
56
+ <!DOCTYPE html SYSTEM>
57
+ <html>
58
+ <head>test</head>
59
+ <body>
60
+ <form action="/api/post" method="post">
61
+ <h2>Choose your favarite</h2>
62
+ <label>Sushi</label><input type="radio" name="food" value="0" />
63
+ <label>Sake</label><input type="radio" name="food" value="1" checked="checked" />
64
+ <label>Umeboshi</label><input type="radio" name="food" value="2" />
65
+ <h2>Where did you know about this page?</h2>
66
+ <label>web site</label><input type="radio" name="media" value="0" />
67
+ <label>magazine</label><input type="radio" name="media" value="1" checked="checked" />
68
+ <label>TV show</label><input type="radio" name="media" value="2" checked="checked" />
69
+ </form>
70
+ </body>
71
+ </html>
72
+ HTML
73
+ end
74
+
75
+ it "fills select-box form correctly" do
76
+ filled = FormKeeper::Respondent.new.fill_up(<<-HTML, { 'favorite' => '1' })
77
+ <!DOCTYPE html SYSTEM>
78
+ <html>
79
+ <head>test</head>
80
+ <body>
81
+ <form action="/api/post" method="post">
82
+ <select name="favorite">
83
+ <option value="1">white</option>
84
+ <option value="2">black</option>
85
+ <option value="3" selected>blue</option>
86
+ </select>
87
+ </form>
88
+ </body>
89
+ </html>
90
+ HTML
91
+ filled.should == <<-HTML
92
+ <!DOCTYPE html SYSTEM>
93
+ <html>
94
+ <head>test</head>
95
+ <body>
96
+ <form action="/api/post" method="post">
97
+ <select name="favorite">
98
+ <option value="1" selected="selected">white</option>
99
+ <option value="2">black</option>
100
+ <option value="3">blue</option>
101
+ </select>
102
+ </form>
103
+ </body>
104
+ </html>
105
+ HTML
106
+ end
107
+
108
+ it "fills multiple select-box form correctly" do
109
+ filled = FormKeeper::Respondent.new.fill_up(<<-HTML, { 'favorite' => ['1', '2'] })
110
+ <!DOCTYPE html SYSTEM>
111
+ <html>
112
+ <head>test</head>
113
+ <body>
114
+ <form action="/api/post" method="post">
115
+ <select name="favorite" multiple>
116
+ <option value="1">white</option>
117
+ <option value="2">black</option>
118
+ <option value="3" selected>blue</option>
119
+ </select>
120
+ </form>
121
+ </body>
122
+ </html>
123
+ HTML
124
+ filled.should == <<-HTML
125
+ <!DOCTYPE html SYSTEM>
126
+ <html>
127
+ <head>test</head>
128
+ <body>
129
+ <form action="/api/post" method="post">
130
+ <select name="favorite" multiple>
131
+ <option value="1" selected="selected">white</option>
132
+ <option value="2" selected="selected">black</option>
133
+ <option value="3">blue</option>
134
+ </select>
135
+ </form>
136
+ </body>
137
+ </html>
138
+ HTML
139
+ end
140
+
141
+ it "fills non-multiple select-box form correctly" do
142
+ filled = FormKeeper::Respondent.new.fill_up(<<-HTML, { 'favorite' => ['1', '2'] })
143
+ <!DOCTYPE html SYSTEM>
144
+ <html>
145
+ <head>test</head>
146
+ <body>
147
+ <form action="/api/post" method="post">
148
+ <select name="favorite">
149
+ <option value="1">white</option>
150
+ <option value="2">black</option>
151
+ <option value="3" selected>blue</option>
152
+ </select>
153
+ </form>
154
+ </body>
155
+ </html>
156
+ HTML
157
+ filled.should == <<-HTML
158
+ <!DOCTYPE html SYSTEM>
159
+ <html>
160
+ <head>test</head>
161
+ <body>
162
+ <form action="/api/post" method="post">
163
+ <select name="favorite">
164
+ <option value="1" selected="selected">white</option>
165
+ <option value="2">black</option>
166
+ <option value="3">blue</option>
167
+ </select>
168
+ </form>
169
+ </body>
170
+ </html>
171
+ HTML
172
+ end
173
+ end
174
+
data/spec/rule_spec.rb ADDED
@@ -0,0 +1,138 @@
1
+ require 'spec_helper'
2
+
3
+ describe FormKeeper::Rule do
4
+
5
+ it "handles default filter correctly" do
6
+
7
+ rule = FormKeeper::Rule.new
8
+ rule.filters :strip
9
+
10
+ rule.default_filters[0].should == :strip
11
+
12
+ rule.filters :upcase, :downcase
13
+ rule.default_filters[0].should == :upcase
14
+ rule.default_filters[1].should == :downcase
15
+ end
16
+
17
+ it "handles field criteria correctly" do
18
+
19
+ rule = FormKeeper::Rule.new
20
+
21
+ # missing parameters
22
+ proc {
23
+ rule.field :field01
24
+ }.should raise_error(ArgumentError)
25
+
26
+ proc {
27
+ rule.field :field01, {}
28
+ }.should_not raise_error
29
+
30
+ proc {
31
+ rule.field :field01, :present => true
32
+ }.should_not raise_error
33
+
34
+ proc {
35
+ rule.field :field01, :default => 'foobar'
36
+ }.should_not raise_error
37
+
38
+ # don't set present and default at once
39
+ proc {
40
+ rule.field :username, :present => true, :default => 'foobar'
41
+ }.should raise_error(ArgumentError)
42
+
43
+ proc {
44
+ rule.field :field01, :default => 'foobar', :filters => [:strip]
45
+ }.should_not raise_error
46
+
47
+ proc {
48
+ rule.field :field01, :default => 'foobar', :filters => :strip
49
+ }.should_not raise_error
50
+
51
+ # invalid filters
52
+ proc {
53
+ rule.field :username, :present => true, :filters => { :foo => 'bar' }
54
+ }.should raise_error(ArgumentError)
55
+
56
+ proc {
57
+ rule.field :field01, :default => 'foobar', :length => 0..10
58
+ }.should_not raise_error
59
+
60
+ end
61
+
62
+ it "handles checkbox criteria correctly" do
63
+
64
+ rule = FormKeeper::Rule.new
65
+
66
+ proc {
67
+ rule.checkbox :field01
68
+ }.should raise_error(ArgumentError)
69
+
70
+ proc {
71
+ rule.checkbox :field01, {}
72
+ }.should_not raise_error
73
+
74
+ proc {
75
+ rule.checkbox :field01, :count => 1
76
+ }.should_not raise_error
77
+
78
+ proc {
79
+ rule.checkbox :field01, :count => 0..2
80
+ }.should_not raise_error
81
+
82
+ proc {
83
+ rule.checkbox :field01, :count => 'hoge'
84
+ }.should raise_error(ArgumentError)
85
+
86
+ proc {
87
+ rule.checkbox :field01, :count => 1, :length => 0..10
88
+ }.should_not raise_error
89
+
90
+ proc {
91
+ rule.checkbox :field01, :count => 1, :length => 0..10, :filters => [:strip]
92
+ }.should_not raise_error
93
+
94
+ proc {
95
+ rule.checkbox :field01, :count => 1, :length => 0..10, :filters => :strip
96
+ }.should_not raise_error
97
+
98
+ # invalid filters
99
+ proc {
100
+ rule.checkbox :username, :count => 1, :filters => { :foo => 'bar' }
101
+ }.should raise_error(ArgumentError)
102
+ end
103
+
104
+ it "handles combination criteria correctly" do
105
+
106
+ rule = FormKeeper::Rule.new
107
+ proc {
108
+ rule.combination :custom
109
+ }.should raise_error
110
+
111
+ # missing constraint
112
+ proc {
113
+ rule.combination :custom, :fields => [:field01, :field02]
114
+ }.should raise_error(ArgumentError)
115
+
116
+ # missing fields
117
+ proc {
118
+ rule.combination :custom, :date => true
119
+ }.should raise_error(ArgumentError)
120
+
121
+ proc {
122
+ rule.combination :custom, :fields => [:field01, :field02], :date => true
123
+ }.should_not raise_error
124
+
125
+ proc {
126
+ rule.combination :custom, :fields => [:field01, :field02], :date => true, :filters => [:strip]
127
+ }.should_not raise_error
128
+
129
+ proc {
130
+ rule.combination :custom, :fields => [:field01, :field02], :date => true, :filters => :strip
131
+ }.should_not raise_error
132
+
133
+ proc {
134
+ rule.combination :custom, :fields => [:field01, :field02], :date => true, :filters => {}
135
+ }.should raise_error(ArgumentError)
136
+ end
137
+
138
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'formkeeper'
4
+
5
+ RSpec.configure do |config|
6
+
7
+ end
8
+