public
Description: Webrat - Ruby Acceptance Testing for Web applications
Homepage: http://gitrdoc.com/brynary/webrat/tree/master/
Clone URL: git://github.com/brynary/webrat.git
webrat / spec / public / select_spec.rb
100644 247 lines (221 sloc) 7.419 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
 
describe "select" do
  it "should fail with a helpful message when option not found" do
    with_html <<-HTML
<html>
<form method="get" action="/login">
<select name="month"><option value="1">January</option></select>
</form>
</html>
HTML
    
    lambda { select "February", :from => "month" }.should raise_error(Webrat::NotFoundError,
      "The 'February' option was not found in the \"month\" select box")
  end
  
  it "should fail if option not found in list specified by element name" do
    with_html <<-HTML
<html>
<form method="get" action="/login">
<select name="month"><option value="1">January</option></select>
<select name="year"><option value="2008">2008</option></select>
</form>
</html>
HTML
 
    lambda { select "February", :from => "year" }.should raise_error(Webrat::NotFoundError)
  end
  
  it "should fail if specified list not found" do
    with_html <<-HTML
<html>
<form method="get" action="/login">
<select name="month"><option value="1">January</option></select>
</form>
</html>
HTML
 
    lambda { select "February", :from => "year" }.should raise_error(Webrat::NotFoundError)
  end
 
  
  it "should fail if the select is disabled" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month" disabled="disabled"><option value="1">January</option></select>
<input type="submit" />
</form>
</html>
HTML
 
    lambda { select "January", :from => "month" }.should raise_error(Webrat::DisabledFieldError)
  end
  
  it "should send value from option" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option value="1">January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "month" => "1")
    select "January", :from => "month"
    click_button
  end
 
  it "should send values with HTML encoded ampersands" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="encoded"><option value="A &amp; B">Encoded</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "encoded" => "A & B")
    select "Encoded", :from => "encoded"
    click_button
  end
 
  it "should work with empty select lists" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", 'month' => '')
    click_button
  end
  
  it "should work without specifying the field name or label" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option value="1">January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "month" => "1")
    select "January"
    click_button
  end
  
  it "should send value from option in list specified by name" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="start_month"><option value="s1">January</option></select>
<select name="end_month"><option value="e1">January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
    select "January", :from => "end_month"
    click_button
  end
  
  it "should send value from option in list specified by label" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<label for="start_month">Start Month</label>
<select id="start_month" name="start_month"><option value="s1">January</option></select>
<label for="end_month">End Month</label>
<select id="end_month" name="end_month"><option value="e1">January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
    select "January", :from => "End Month"
    click_button
  end
  
  it "should use option text if no value" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option>January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "month" => "January")
    select "January", :from => "month"
    click_button
  end
 
  it "should find option by regexp" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option>January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "month" => "January")
    select /jan/i
    click_button
  end
  
  it "should fail if no option matching the regexp exists" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option>January</option></select>
<input type="submit" />
</form>
</html>
HTML
    
    lambda {
      select /feb/i
    }.should raise_error(Webrat::NotFoundError)
  end
 
  it "should find option by regexp in list specified by label" do
    with_html <<-HTML
<html>
<form method="post" action="/login">
<label for="start_month">Start Month</label>
<select id="start_month" name="start_month"><option value="s1">January</option></select>
<label for="end_month">End Month</label>
<select id="end_month" name="end_month"><option value="e1">January</option></select>
<input type="submit" />
</form>
</html>
HTML
    webrat_session.should_receive(:post).with("/login", "start_month" => "s1", "end_month" => "e1")
    select /jan/i, :from => "End Month"
    click_button
  end
  
  it "should properly handle submitting HTML entities in select values" do
    spec = lambda do
      with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option>Peanut butter &amp; jelly</option></select>
<input type="submit" />
</form>
</html>
HTML
      webrat_session.should_receive(:post).with("/login", "month" => "Peanut butter & jelly")
      click_button
    end
    
    if Webrat.on_java?
      spec.call
    else
      pending("needs bug fix", &spec)
    end
  end
  
  it "should properly handle locating with HTML entities in select values" do
    spec = lambda do
      with_html <<-HTML
<html>
<form method="post" action="/login">
<select name="month"><option>Peanut butter &amp; jelly</option></select>
<input type="submit" />
</form>
</html>
HTML
      
      lambda {
        select "Peanut butter & jelly"
      }.should_not raise_error(Webrat::NotFoundError)
    end
    
    if Webrat.on_java?
      spec.call
    else
      pending("needs bug fix", &spec)
    end
  end
end