Only turn values to arrays if requested with [] naming. Otherwise use the last provided value for the field.

This commit is contained in:
Rob Holland 2009-12-04 15:19:00 +00:00
parent b4cde1794e
commit 9d4940ee86
3 changed files with 22 additions and 7 deletions

View File

@ -108,13 +108,14 @@ class Capybara::Driver::RackTest
def merge_param!(params, key, value)
collection = key.sub!(/\[\]$/, '')
case params[key]
when nil
params[key] = collection ? [value] : value
when Array
params[key] << value
if collection
if params[key]
params[key] << value
else
params[key] = [value]
end
else
params[key] = [params[key], value]
params[key] = value
end
end
end

View File

@ -67,6 +67,14 @@ shared_examples_for "session" do
@session.visit('/form')
end
context "with multiple values with the same name" do
it "should use the latest given value" do
@session.check('Terms of Use')
@session.click_button('awesome')
extract_results(@session)['terms_of_use'].should == '1'
end
end
context "with value given on a submit button" do
before do
@session.click_button('awesome')

View File

@ -25,7 +25,13 @@
<label for="form_password">Password</label>
<input type="password" name="form[password]" value="seeekrit" id="form_password"/>
</p>
<p>
<label for="form_terms_of_use">Terms of Use</label>
<input type="hidden" name="form[terms_of_use]" value="0" id="form_terms_of_use_default">
<input type="checkbox" name="form[terms_of_use]" value="1" id="form_terms_of_use">
</p>
<p>
<label for="form_image">Image</label>
<input type="file" name="form[image]" id="form_image"/>