1
0
Fork 0
mirror of https://github.com/heartcombo/simple_form.git synced 2022-11-09 12:19:26 -05:00
heartcombo--simple_form/test/inputs/numeric_input_test.rb
Balazs Nagy c4db622757 Don't leak out minimum or maximum values when MinMax component is in use.
It used to emit the last calculated value in bare string just before
label.
2012-03-01 00:08:24 +01:00

173 lines
5.9 KiB
Ruby

# encoding: UTF-8
require 'test_helper'
class NumericInputTest < ActionView::TestCase
test 'input should generate an integer text field for integer attributes ' do
with_input_for @user, :age, :integer
assert_select 'input[type=number].integer#user_age'
end
test 'input should generate a float text field for float attributes ' do
with_input_for @user, :age, :float
assert_select 'input[type=number].float#user_age'
end
test 'input should generate a decimal text field for decimal attributes ' do
with_input_for @user, :age, :decimal
assert_select 'input[type=number].decimal#user_age'
end
test 'input should not generate min attribute by default' do
with_input_for @user, :age, :integer
assert_no_select 'input[min]'
end
test 'input should not generate max attribute by default' do
with_input_for @user, :age, :integer
assert_no_select 'input[max]'
end
test 'input should infer min value from integer attributes with greater than validation' do
with_input_for @other_validating_user, :age, :float
assert_no_select 'input[min]'
with_input_for @other_validating_user, :age, :integer
assert_select 'input[min=18]'
end
test 'input should infer min value from integer attributes with greater than validation using symbol' do
with_input_for @validating_user, :amount, :float
assert_no_select 'input[min]'
with_input_for @validating_user, :amount, :integer
assert_select 'input[min=11]'
end
test 'input should infer min value from integer attributes with greater than or equal to validation using symbol' do
with_input_for @validating_user, :attempts, :float
assert_select 'input[min=1]'
with_input_for @validating_user, :attempts, :integer
assert_select 'input[min=1]'
end
test 'input should infer min value from integer attributes with greater than validation using proc' do
with_input_for @other_validating_user, :amount, :float
assert_no_select 'input[min]'
with_input_for @other_validating_user, :amount, :integer
assert_select 'input[min=20]'
end
test 'input should infer min value from integer attributes with greater than or equal to validation using proc' do
with_input_for @other_validating_user, :attempts, :float
assert_select 'input[min=19]'
with_input_for @other_validating_user, :attempts, :integer
assert_select 'input[min=19]'
end
test 'input should infer max value from attributes with less than validation' do
with_input_for @other_validating_user, :age, :float
assert_no_select 'input[max]'
with_input_for @other_validating_user, :age, :integer
assert_select 'input[max=99]'
end
test 'input should infer max value from attributes with less than validation using symbol' do
with_input_for @validating_user, :amount, :float
assert_no_select 'input[max]'
with_input_for @validating_user, :amount, :integer
assert_select 'input[max=99]'
end
test 'input should infer max value from attributes with less than or equal to validation using symbol' do
with_input_for @validating_user, :attempts, :float
assert_select 'input[max=100]'
with_input_for @validating_user, :attempts, :integer
assert_select 'input[max=100]'
end
test 'input should infer max value from attributes with less than validation using proc' do
with_input_for @other_validating_user, :amount, :float
assert_no_select 'input[max]'
with_input_for @other_validating_user, :amount, :integer
assert_select 'input[max=118]'
end
test 'input should infer max value from attributes with less than or equal to validation using proc' do
with_input_for @other_validating_user, :attempts, :float
assert_select 'input[max=119]'
with_input_for @other_validating_user, :attempts, :integer
assert_select 'input[max=119]'
end
test 'input should have step value of any except for integer attribute' do
with_input_for @validating_user, :age, :float
assert_select 'input[step="any"]'
with_input_for @validating_user, :age, :integer
assert_select 'input[step=1]'
end
test 'numeric input should not generate placeholder by default' do
with_input_for @user, :age, :integer
assert_no_select 'input[placeholder]'
end
test 'numeric input should accept the placeholder option' do
with_input_for @user, :age, :integer, :placeholder => 'Put in your age'
assert_select 'input.integer[placeholder=Put in your age]'
end
test 'numeric input should use i18n to translate placeholder text' do
store_translations(:en, :simple_form => { :placeholders => { :user => {
:age => 'Age goes here'
} } }) do
with_input_for @user, :age, :integer
assert_select 'input.integer[placeholder=Age goes here]'
end
end
# Numeric input but HTML5 disabled
test ' when not using HTML5 input should not generate field with type number and use text instead' do
swap_wrapper do
with_input_for @user, :age, :integer
assert_no_select "input[type=number]"
assert_no_select "input#user_age[text]"
end
end
test 'when not using HTML5 input should not use min or max or step attributes' do
swap_wrapper do
with_input_for @validating_user, :age, :integer
assert_no_select "input[type=number]"
assert_no_select "input[min]"
assert_no_select "input[max]"
assert_no_select "input[step]"
end
end
[:integer, :float, :decimal].each do |type|
test "#{type} input should infer min value from attributes with greater than or equal validation" do
with_input_for @validating_user, :age, type
assert_select 'input[min=18]'
end
test "#{type} input should infer the max value from attributes with less than or equal to validation" do
with_input_for @validating_user, :age, type
assert_select 'input[max=99]'
end
end
test 'min_max should not emit max value as bare string' do
with_input_for @other_validating_user, :age, :integer
assert_select 'div', {:count => 0, :text => %r{^99}}
end
end