2010-06-17 18:12:36 -04:00
|
|
|
# encoding: UTF-8
|
2009-12-09 17:36:21 -05:00
|
|
|
require 'test_helper'
|
|
|
|
|
2011-09-03 12:36:02 -04:00
|
|
|
# Isolated tests for label without triggering f.label.
|
|
|
|
class IsolatedLabelTest < ActionView::TestCase
|
2009-12-09 17:36:21 -05:00
|
|
|
setup do
|
2010-01-09 10:05:02 -05:00
|
|
|
SimpleForm::Inputs::Base.reset_i18n_cache :translate_required_html
|
2009-12-09 17:36:21 -05:00
|
|
|
end
|
|
|
|
|
2014-03-11 18:12:08 -04:00
|
|
|
def with_label_for(object, attribute_name, type, options = {})
|
2010-09-26 18:24:30 -04:00
|
|
|
with_concat_form_for(object) do |f|
|
2010-12-07 21:25:14 -05:00
|
|
|
options[:reflection] = Association.new(Company, :company, {}) if options.delete(:setup_association)
|
2010-11-07 04:18:37 -05:00
|
|
|
SimpleForm::Inputs::Base.new(f, attribute_name, nil, type, options).label
|
2010-09-26 18:24:30 -04:00
|
|
|
end
|
2009-12-09 17:36:21 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should generate a default humanized description' do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=user_name]', /Name/
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should allow a customized description' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, label: 'My label!'
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=user_name]', /My label!/
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should use human attribute name from object when available' do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :description, :text
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=user_description]', /User Description!/
|
|
|
|
end
|
|
|
|
|
2009-12-10 23:00:37 -05:00
|
|
|
test 'label should use human attribute name based on association name' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :company_id, :string, setup_association: true
|
2009-12-10 23:00:37 -05:00
|
|
|
assert_select 'label', /Company Human Name!/
|
|
|
|
end
|
|
|
|
|
2009-12-10 10:14:24 -05:00
|
|
|
test 'label should use i18n based on model, action, and attribute to lookup translation' do
|
2009-12-11 15:32:57 -05:00
|
|
|
@controller.action_name = "new"
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: { user: {
|
|
|
|
new: { description: 'Nova descrição' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} } }) do
|
2009-12-11 15:32:57 -05:00
|
|
|
with_label_for @user, :description, :text
|
|
|
|
assert_select 'label[for=user_description]', /Nova descrição/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should fallback to new when action is create' do
|
|
|
|
@controller.action_name = "create"
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: { user: {
|
|
|
|
new: { description: 'Nova descrição' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} } }) do
|
2009-12-10 10:14:24 -05:00
|
|
|
with_label_for @user, :description, :text
|
|
|
|
assert_select 'label[for=user_description]', /Nova descrição/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-09-27 20:37:43 -04:00
|
|
|
test 'label should not explode while looking for i18n translation when action is not set' do
|
|
|
|
def @controller.action_name; nil; end
|
|
|
|
|
|
|
|
assert_nothing_raised do
|
|
|
|
with_label_for @user, :description, :text
|
|
|
|
end
|
|
|
|
assert_select 'label[for=user_description]'
|
|
|
|
end
|
|
|
|
|
2009-12-09 17:36:21 -05:00
|
|
|
test 'label should use i18n based on model and attribute to lookup translation' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: { user: {
|
|
|
|
description: 'Descrição'
|
2012-10-25 23:27:53 -04:00
|
|
|
} } }) do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :description, :text
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=user_description]', /Descrição/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-25 23:27:53 -04:00
|
|
|
test 'label should use i18n under defaults to lookup translation' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: { defaults: { age: 'Idade' } } }) do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :age, :integer
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=user_age]', /Idade/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-25 23:27:53 -04:00
|
|
|
test 'label should not use i18n label if translate is false' do
|
2013-01-28 16:02:59 -05:00
|
|
|
swap SimpleForm, translate_labels: false do
|
|
|
|
store_translations(:en, simple_form: { labels: { defaults: { age: 'Idade' } } }) do
|
2010-09-30 02:12:45 -04:00
|
|
|
with_label_for @user, :age, :integer
|
|
|
|
assert_select 'label[for=user_age]', /Age/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-25 23:27:53 -04:00
|
|
|
test 'label uses i18n with lookup for association name' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: {
|
|
|
|
user: { company: 'My company!' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} }) do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :company_id, :string, setup_association: true
|
2009-12-10 23:00:37 -05:00
|
|
|
assert_select 'label[for=user_company_id]', /My company!/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-25 23:27:53 -04:00
|
|
|
test 'label uses i18n under defaults namespace to lookup for association name' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: {
|
|
|
|
defaults: { company: 'Plataformatec' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} }) do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :company, :string, setup_association: true
|
2012-10-25 23:27:53 -04:00
|
|
|
|
|
|
|
assert_select 'form label', /Plataformatec/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-02-12 10:42:35 -05:00
|
|
|
test 'label should do correct i18n lookup for nested models with nested translation' do
|
|
|
|
@user.company = Company.new(1, 'Empresa')
|
|
|
|
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: {
|
|
|
|
user: { name: 'Usuario', company: { name: 'Nome da empresa' } }
|
2012-10-25 23:27:53 -04:00
|
|
|
} }) do
|
2011-02-12 10:42:35 -05:00
|
|
|
with_concat_form_for @user do |f|
|
|
|
|
concat f.input :name
|
2011-02-26 14:16:21 -05:00
|
|
|
concat(f.simple_fields_for(:company) do |company_form|
|
|
|
|
concat(company_form.input :name)
|
2011-02-12 10:42:35 -05:00
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_select 'label[for=user_name]', /Usuario/
|
|
|
|
assert_select 'label[for=user_company_attributes_name]', /Nome da empresa/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should do correct i18n lookup for nested models with no nested translation' do
|
|
|
|
@user.company = Company.new(1, 'Empresa')
|
|
|
|
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: {
|
|
|
|
user: { name: 'Usuario' },
|
|
|
|
company: { name: 'Nome da empresa' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} }) do
|
2011-02-12 10:42:35 -05:00
|
|
|
with_concat_form_for @user do |f|
|
|
|
|
concat f.input :name
|
2011-02-26 14:16:21 -05:00
|
|
|
concat(f.simple_fields_for(:company) do |company_form|
|
|
|
|
concat(company_form.input :name)
|
2011-02-12 10:42:35 -05:00
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_select 'label[for=user_name]', /Usuario/
|
|
|
|
assert_select 'label[for=user_company_attributes_name]', /Nome da empresa/
|
|
|
|
end
|
|
|
|
end
|
2011-05-22 12:19:44 -04:00
|
|
|
|
2011-05-03 15:33:48 -04:00
|
|
|
test 'label should do correct i18n lookup for nested has_many models with no nested translation' do
|
|
|
|
@user.tags = [Tag.new(1, 'Empresa')]
|
2011-05-22 12:19:44 -04:00
|
|
|
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: {
|
|
|
|
user: { name: 'Usuario' },
|
|
|
|
tags: { name: 'Nome da empresa' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} }) do
|
2011-05-03 15:33:48 -04:00
|
|
|
with_concat_form_for @user do |f|
|
|
|
|
concat f.input :name
|
2013-01-28 16:02:59 -05:00
|
|
|
concat(f.simple_fields_for(:tags, child_index: "new_index") do |tags_form|
|
2011-05-03 15:33:48 -04:00
|
|
|
concat(tags_form.input :name)
|
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_select 'label[for=user_name]', /Usuario/
|
2011-05-22 12:19:44 -04:00
|
|
|
assert_select 'label[for=user_tags_attributes_new_index_name]', /Nome da empresa/
|
2011-05-03 15:33:48 -04:00
|
|
|
end
|
|
|
|
end
|
2011-02-12 10:42:35 -05:00
|
|
|
|
2009-12-09 17:36:21 -05:00
|
|
|
test 'label should have css class from type' do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label.string'
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :description, :text
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label.text'
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :age, :integer
|
|
|
|
assert_select 'label.integer'
|
|
|
|
with_label_for @user, :born_at, :date
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label.date'
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :created_at, :datetime
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label.datetime'
|
|
|
|
end
|
2010-06-17 18:12:36 -04:00
|
|
|
|
2012-02-16 12:42:47 -05:00
|
|
|
test 'label should not have css class from type when generate_additional_classes_for does not include :label' do
|
2013-01-28 16:02:59 -05:00
|
|
|
swap SimpleForm, generate_additional_classes_for: [:wrapper, :input] do
|
2012-02-13 17:22:49 -05:00
|
|
|
with_label_for @user, :name, :string
|
|
|
|
assert_no_select 'label.string'
|
|
|
|
with_label_for @user, :description, :text
|
|
|
|
assert_no_select 'label.text'
|
|
|
|
with_label_for @user, :age, :integer
|
|
|
|
assert_no_select 'label.integer'
|
|
|
|
with_label_for @user, :born_at, :date
|
|
|
|
assert_no_select 'label.date'
|
|
|
|
with_label_for @user, :created_at, :datetime
|
|
|
|
assert_no_select 'label.datetime'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-06-29 15:13:15 -04:00
|
|
|
test 'label should not generate empty css class' do
|
2013-01-28 16:02:59 -05:00
|
|
|
swap SimpleForm, generate_additional_classes_for: [:wrapper, :input] do
|
2012-06-29 15:13:15 -04:00
|
|
|
with_label_for @user, :name, :string
|
|
|
|
assert_no_select 'label[class]'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-05-14 17:58:36 -04:00
|
|
|
test 'label should obtain required from ActiveModel::Validations when it is included' do
|
|
|
|
with_label_for @validating_user, :name, :string
|
|
|
|
assert_select 'label.required'
|
|
|
|
with_label_for @validating_user, :status, :string
|
|
|
|
assert_select 'label.optional'
|
|
|
|
end
|
2010-06-17 18:12:36 -04:00
|
|
|
|
2012-02-16 12:42:47 -05:00
|
|
|
test 'label should not obtain required from ActiveModel::Validations when generate_additional_classes_for does not include :label' do
|
2013-01-28 16:02:59 -05:00
|
|
|
swap SimpleForm, generate_additional_classes_for: [:wrapper, :input] do
|
2012-02-13 17:22:49 -05:00
|
|
|
with_label_for @validating_user, :name, :string
|
|
|
|
assert_no_select 'label.required'
|
|
|
|
with_label_for @validating_user, :status, :string
|
|
|
|
assert_no_select 'label.optional'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-05-14 17:58:36 -04:00
|
|
|
test 'label should allow overriding required when ActiveModel::Validations is included' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @validating_user, :name, :string, required: false
|
2010-05-14 17:58:36 -04:00
|
|
|
assert_select 'label.optional'
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @validating_user, :status, :string, required: true
|
2010-05-14 17:58:36 -04:00
|
|
|
assert_select 'label.required'
|
|
|
|
end
|
2009-12-09 17:36:21 -05:00
|
|
|
|
2010-05-14 17:58:36 -04:00
|
|
|
test 'label should be required by default when ActiveModel::Validations is not included' do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label.required'
|
|
|
|
end
|
|
|
|
|
2010-05-14 17:58:36 -04:00
|
|
|
test 'label should be able to disable required when ActiveModel::Validations is not included' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, required: false
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_no_select 'label.required'
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should add required text when required' do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label.required abbr[title=required]', '*'
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should not have required text in no required inputs' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, required: false
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_no_select 'form label abbr'
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should use i18n to find required text' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { required: { text: 'campo requerido' } }) do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'form label abbr[title=campo requerido]', '*'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should use i18n to find required mark' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { required: { mark: '*-*' } }) do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'form label abbr', '*-*'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should use i18n to find required string tag' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { required: { html: '<span class="required" title="requerido">*</span>' } }) do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for @user, :name, :string
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_no_select 'form label abbr'
|
|
|
|
assert_select 'form label span.required[title=requerido]', '*'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should allow overwriting input id' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, input_html: { id: 'my_new_id' }
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=my_new_id]'
|
2010-12-30 10:39:06 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should allow overwriting of for attribute' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, label_html: { for: 'my_new_id' }
|
2010-12-30 10:39:06 -05:00
|
|
|
assert_select 'label[for=my_new_id]'
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should allow overwriting of for attribute with input_html not containing id' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, label_html: { for: 'my_new_id' }, input_html: { class: 'foo' }
|
2010-12-30 10:39:06 -05:00
|
|
|
assert_select 'label[for=my_new_id]'
|
2009-12-09 17:36:21 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should use default input id when it was not overridden' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :name, :string, input_html: { class: 'my_new_id' }
|
2009-12-09 17:36:21 -05:00
|
|
|
assert_select 'label[for=user_name]'
|
|
|
|
end
|
2009-12-10 06:31:40 -05:00
|
|
|
|
|
|
|
test 'label should be generated properly when object is not present' do
|
|
|
|
with_label_for :project, :name, :string
|
|
|
|
assert_select 'label[for=project_name]', /Name/
|
|
|
|
end
|
|
|
|
|
2011-11-29 14:17:48 -05:00
|
|
|
test 'label should include for attribute for select collection' do
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for @user, :sex, :select, collection: [:male, :female]
|
2011-11-29 14:17:48 -05:00
|
|
|
assert_select 'label[for=user_sex]'
|
|
|
|
end
|
|
|
|
|
2009-12-10 06:31:40 -05:00
|
|
|
test 'label should use i18n properly when object is not present' do
|
2013-01-28 16:02:59 -05:00
|
|
|
store_translations(:en, simple_form: { labels: {
|
|
|
|
project: { name: 'Nome' }
|
2012-10-25 23:27:53 -04:00
|
|
|
} }) do
|
2009-12-10 06:31:40 -05:00
|
|
|
with_label_for :project, :name, :string
|
|
|
|
assert_select 'label[for=project_name]', /Nome/
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test 'label should add required by default when object is not present' do
|
|
|
|
with_label_for :project, :name, :string
|
|
|
|
assert_select 'label.required[for=project_name]'
|
2013-01-28 16:02:59 -05:00
|
|
|
with_label_for :project, :description, :string, required: false
|
2009-12-10 06:31:40 -05:00
|
|
|
assert_no_select 'label.required[for=project_description]'
|
|
|
|
end
|
2011-02-07 20:24:37 -05:00
|
|
|
|
2011-02-07 20:12:28 -05:00
|
|
|
test 'label should add chosen label class' do
|
2013-01-28 16:02:59 -05:00
|
|
|
swap SimpleForm, label_class: :my_custom_class do
|
2011-02-07 20:12:28 -05:00
|
|
|
with_label_for @user, :name, :string
|
|
|
|
assert_select 'label.my_custom_class'
|
|
|
|
end
|
|
|
|
end
|
2012-01-26 08:18:28 -05:00
|
|
|
|
|
|
|
test 'label strips extra classes even when label_class is nil' do
|
2013-01-28 16:02:59 -05:00
|
|
|
swap SimpleForm, label_class: nil do
|
2012-01-26 08:18:28 -05:00
|
|
|
with_label_for @user, :name, :string
|
|
|
|
assert_select "label[class='string required']"
|
|
|
|
assert_no_select "label[class='string required ']"
|
|
|
|
assert_no_select "label[class=' string required']"
|
|
|
|
end
|
|
|
|
end
|
2009-12-09 17:36:21 -05:00
|
|
|
end
|