Testing Input Field Generation and Attributes in SimpleForm
This test suite validates the functionality of input field generation and attribute handling in SimpleForm. It focuses on testing various input types, CSS class generation, and autofocus attribute behavior across different form elements.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
heartcombo/simple_form
test/inputs/general_test.rb
# frozen_string_literal: true
# encoding: UTF-8
require 'test_helper'
class InputTest < ActionView::TestCase
test 'input generates css class based on default input type' do
with_input_for @user, :name, :string
assert_select 'input.string'
with_input_for @user, :description, :text
assert_select 'textarea.text'
with_input_for @user, :age, :integer
assert_select 'input.integer'
with_input_for @user, :born_at, :date
assert_select 'select.date'
with_input_for @user, :created_at, :datetime
assert_select 'select.datetime'
end
test 'string input generates autofocus attribute when autofocus option is true' do
with_input_for @user, :name, :string, autofocus: true
assert_select 'input.string[autofocus]'
end
test 'input accepts input_class configuration' do
swap SimpleForm, input_class: :xlarge do
with_input_for @user, :name, :string
assert_select 'input.xlarge'
assert_no_select 'div.xlarge'
end
end
test 'input does not add input_class when configured to not generate additional classes for input' do
swap SimpleForm, input_class: 'xlarge', generate_additional_classes_for: [:wrapper] do
with_input_for @user, :name, :string
assert_select 'input'
assert_no_select '.xlarge'
end
end
test 'text input generates autofocus attribute when autofocus option is true' do
with_input_for @user, :description, :text, autofocus: true
assert_select 'textarea.text[autofocus]'
end
test 'numeric input generates autofocus attribute when autofocus option is true' do
with_input_for @user, :age, :integer, autofocus: true
assert_select 'input.integer[autofocus]'
end
test 'date input generates autofocus attribute when autofocus option is true' do
with_input_for @user, :born_at, :date, autofocus: true
assert_select 'select.date[autofocus]'
end
test 'datetime input generates autofocus attribute when autofocus option is true' do
with_input_for @user, :created_at, :datetime, autofocus: true
assert_select 'select.datetime[autofocus]'
end
test 'string input generates autofocus attribute when autofocus option is false' do
with_input_for @user, :name, :string, autofocus: false
assert_no_select 'input.string[autofocus]'
end
test 'text input generates autofocus attribute when autofocus option is false' do
with_input_for @user, :description, :text, autofocus: false
assert_no_select 'textarea.text[autofocus]'
end
test 'numeric input generates autofocus attribute when autofocus option is false' do
with_input_for @user, :age, :integer, autofocus: false
assert_no_select 'input.integer[autofocus]'
end
test 'date input generates autofocus attribute when autofocus option is false' do
with_input_for @user, :born_at, :date, autofocus: false
assert_no_select 'select.date[autofocus]'
end
test 'datetime input generates autofocus attribute when autofocus option is false' do
with_input_for @user, :created_at, :datetime, autofocus: false
assert_no_select 'select.datetime[autofocus]'
end
test 'string input generates autofocus attribute when autofocus option is not present' do
with_input_for @user, :name, :string
assert_no_select 'input.string[autofocus]'
end
test 'text input generates autofocus attribute when autofocus option is not present' do
with_input_for @user, :description, :text
assert_no_select 'textarea.text[autofocus]'
end
test 'numeric input generates autofocus attribute when autofocus option is not present' do
with_input_for @user, :age, :integer
assert_no_select 'input.integer[autofocus]'
end
test 'date input generates autofocus attribute when autofocus option is not present' do
with_input_for @user, :born_at, :date
assert_no_select 'select.date[autofocus]'
end
test 'datetime input generates autofocus attribute when autofocus option is not present' do
with_input_for @user, :created_at, :datetime
assert_no_select 'select.datetime[autofocus]'
end
# With no object
test 'input is generated properly when object is not present' do
with_input_for :project, :name, :string
assert_select 'input.string.required#project_name'
end
test 'input as radio is generated properly when object is not present ' do
with_input_for :project, :name, :radio_buttons
assert_select 'input.radio_buttons#project_name_true'
assert_select 'input.radio_buttons#project_name_false'
end
test 'input as select with collection is generated properly when object is not present' do
with_input_for :project, :name, :select, collection: %w[Jose Carlos]
assert_select 'select.select#project_name'
end
test 'input does not generate empty css class' do
swap SimpleForm, generate_additional_classes_for: %i[wrapper label] do
with_input_for :project, :name, :string
assert_no_select 'input#project_name[class]'
end
end
end