From 5b2aa86f3b932efb9cb87aed0f776c57ad7c3924 Mon Sep 17 00:00:00 2001 From: Andrea Dal Ponte Date: Sat, 20 Jun 2015 16:30:34 +0200 Subject: [PATCH] Change: make bowser validations configurable via DSL --- app/helpers/rails_admin/main_helper.rb | 6 ++- lib/rails_admin/config.rb | 4 ++ lib/rails_admin/config/fields/base.rb | 4 +- lib/rails_admin/config/fields/types/string.rb | 7 +++- lib/rails_admin/config/fields/types/text.rb | 1 + spec/helpers/rails_admin/main_helper_spec.rb | 39 +++++++++++++++++++ .../basic/edit/rails_admin_basic_edit_spec.rb | 6 +-- .../types/belongs_to_association_spec.rb | 5 +++ .../config/fields/types/boolean_spec.rb | 5 +++ .../fields/types/bson_object_id_spec.rb | 5 +++ .../config/fields/types/carrierwave_spec.rb | 5 +++ .../config/fields/types/ck_editor_spec.rb | 2 + .../config/fields/types/code_mirror_spec.rb | 5 +++ .../config/fields/types/color_spec.rb | 5 +++ .../config/fields/types/date_spec.rb | 5 +++ .../config/fields/types/datetime_spec.rb | 2 + .../config/fields/types/decimal_spec.rb | 5 +++ .../config/fields/types/drangonfly_spec.rb | 5 +++ .../config/fields/types/enum_spec.rb | 5 +++ .../config/fields/types/file_upload_spec.rb | 5 +++ .../config/fields/types/float_spec.rb | 5 +++ .../config/fields/types/froala_spec.rb | 5 +++ ...as_and_belongs_to_many_association_spec.rb | 5 +++ .../fields/types/has_many_association_spec.rb | 5 +++ .../fields/types/has_one_association_spec.rb | 5 +++ .../config/fields/types/hidden_spec.rb | 5 +++ .../config/fields/types/inet_spec.rb | 5 +++ .../config/fields/types/integer_spec.rb | 5 +++ .../config/fields/types/json_spec.rb | 2 + .../config/fields/types/paperclip_spec.rb | 5 +++ .../config/fields/types/password_spec.rb | 5 +++ .../config/fields/types/serialized_spec.rb | 5 +++ .../config/fields/types/string_spec.rb | 2 + .../config/fields/types/text_spec.rb | 5 +++ .../config/fields/types/time_spec.rb | 5 +++ .../config/fields/types/uuid_spec.rb | 2 + .../config/fields/types/wysihtml5_spec.rb | 5 +++ .../shared_examples_for_field_types.rb | 25 ++++++++++++ spec/spec_helper.rb | 2 + 39 files changed, 223 insertions(+), 6 deletions(-) create mode 100644 spec/helpers/rails_admin/main_helper_spec.rb create mode 100644 spec/rails_admin/config/fields/types/belongs_to_association_spec.rb create mode 100644 spec/rails_admin/config/fields/types/boolean_spec.rb create mode 100644 spec/rails_admin/config/fields/types/bson_object_id_spec.rb create mode 100644 spec/rails_admin/config/fields/types/carrierwave_spec.rb create mode 100644 spec/rails_admin/config/fields/types/code_mirror_spec.rb create mode 100644 spec/rails_admin/config/fields/types/color_spec.rb create mode 100644 spec/rails_admin/config/fields/types/date_spec.rb create mode 100644 spec/rails_admin/config/fields/types/decimal_spec.rb create mode 100644 spec/rails_admin/config/fields/types/drangonfly_spec.rb create mode 100644 spec/rails_admin/config/fields/types/enum_spec.rb create mode 100644 spec/rails_admin/config/fields/types/file_upload_spec.rb create mode 100644 spec/rails_admin/config/fields/types/float_spec.rb create mode 100644 spec/rails_admin/config/fields/types/froala_spec.rb create mode 100644 spec/rails_admin/config/fields/types/has_and_belongs_to_many_association_spec.rb create mode 100644 spec/rails_admin/config/fields/types/has_many_association_spec.rb create mode 100644 spec/rails_admin/config/fields/types/has_one_association_spec.rb create mode 100644 spec/rails_admin/config/fields/types/hidden_spec.rb create mode 100644 spec/rails_admin/config/fields/types/inet_spec.rb create mode 100644 spec/rails_admin/config/fields/types/integer_spec.rb create mode 100644 spec/rails_admin/config/fields/types/paperclip_spec.rb create mode 100644 spec/rails_admin/config/fields/types/password_spec.rb create mode 100644 spec/rails_admin/config/fields/types/serialized_spec.rb create mode 100644 spec/rails_admin/config/fields/types/text_spec.rb create mode 100644 spec/rails_admin/config/fields/types/time_spec.rb create mode 100644 spec/rails_admin/config/fields/types/wysihtml5_spec.rb create mode 100644 spec/shared_examples/shared_examples_for_field_types.rb diff --git a/app/helpers/rails_admin/main_helper.rb b/app/helpers/rails_admin/main_helper.rb index 103613ed06..fd5c23a9d0 100644 --- a/app/helpers/rails_admin/main_helper.rb +++ b/app/helpers/rails_admin/main_helper.rb @@ -3,7 +3,11 @@ module RailsAdmin module MainHelper def rails_admin_form_for(*args, &block) - options = args.extract_options!.reverse_merge(builder: RailsAdmin::FormBuilder) + options = args.extract_options!.reverse_merge( + html: {novalidate: !RailsAdmin::Config.browser_validations}, + builder: RailsAdmin::FormBuilder, + ) + form_for(*(args << options), &block) << after_nested_form_callbacks end diff --git a/lib/rails_admin/config.rb b/lib/rails_admin/config.rb index 6694655ec3..b33b9861a6 100644 --- a/lib/rails_admin/config.rb +++ b/lib/rails_admin/config.rb @@ -50,6 +50,9 @@ class << self # hide blank fields in show view if true attr_accessor :compact_show_view + # Tell browsers whether to use the native HTML5 validations (novalidate form option). + attr_accessor :browser_validations + # Set the max width of columns in list view before a new set is created attr_accessor :total_columns_width @@ -254,6 +257,7 @@ def models # @see RailsAdmin::Config.registry def reset @compact_show_view = true + @browser_validations = true @yell_for_non_accessible_fields = true @authenticate = nil @authorize = nil diff --git a/lib/rails_admin/config/fields/base.rb b/lib/rails_admin/config/fields/base.rb index a692d6acdd..2bc3cb656e 100644 --- a/lib/rails_admin/config/fields/base.rb +++ b/lib/rails_admin/config/fields/base.rb @@ -124,7 +124,9 @@ def virtual? end register_instance_option :html_attributes do - {} + { + required: required?, + } end register_instance_option :default_value do diff --git a/lib/rails_admin/config/fields/types/string.rb b/lib/rails_admin/config/fields/types/string.rb index 31aa38d008..07c3deb68b 100644 --- a/lib/rails_admin/config/fields/types/string.rb +++ b/lib/rails_admin/config/fields/types/string.rb @@ -7,10 +7,15 @@ module Types class String < RailsAdmin::Config::Fields::Base RailsAdmin::Config::Fields::Types.register(self) + def input_size + [50, length.to_i].reject(&:zero?).min + end + register_instance_option :html_attributes do { + required: required?, maxlength: length, - size: [50, length.to_i].reject(&:zero?).min, + size: input_size, } end diff --git a/lib/rails_admin/config/fields/types/text.rb b/lib/rails_admin/config/fields/types/text.rb index 9c1abb87cc..b4eb4ece32 100644 --- a/lib/rails_admin/config/fields/types/text.rb +++ b/lib/rails_admin/config/fields/types/text.rb @@ -28,6 +28,7 @@ class Text < RailsAdmin::Config::Fields::Base register_instance_option :html_attributes do { + required: required?, cols: '48', rows: '3', } diff --git a/spec/helpers/rails_admin/main_helper_spec.rb b/spec/helpers/rails_admin/main_helper_spec.rb new file mode 100644 index 0000000000..d42cb9b791 --- /dev/null +++ b/spec/helpers/rails_admin/main_helper_spec.rb @@ -0,0 +1,39 @@ +require 'spec_helper' + +describe RailsAdmin::MainHelper, type: :helper do + describe '#rails_admin_form_for' do + let(:html_form) do + helper.rails_admin_form_for(FieldTest.new, url: new_path(model_name: 'field_test')) {} + end + + context 'with html5 browser_validations enabled' do + before do + RailsAdmin.config.browser_validations = true + RailsAdmin.config FieldTest do + field :address, :string do + required true + end + end + end + + it 'should not add novalidate attribute to the html form tag' do + expect(html_form).to_not include 'novalidate' + end + end + + context 'with html5 browser_validations disabled' do + before do + RailsAdmin.config.browser_validations = false + RailsAdmin.config FieldTest do + field :address, :string do + required true + end + end + end + + it 'should add novalidate attribute to the html form tag' do + expect(html_form).to include "novalidate=\"novalidate\"" + end + end + end +end diff --git a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb index 7395f5b18b..024863fdf1 100644 --- a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +++ b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb @@ -25,12 +25,12 @@ end it 'checks required fields to have required attribute set' do - expect(find_field('player_name')[:required].nil?).to eq(false) - expect(find_field('player_number')[:required].nil?).to eq(false) + expect(find_field('player_name')[:required]).to be_present + expect(find_field('player_number')[:required]).to be_present end it 'checks optional fields to not have required attribute set' do - expect(find_field('player_position')[:required].nil?).to eq(true) + expect(find_field('player_position')[:required]).to be_blank end end diff --git a/spec/rails_admin/config/fields/types/belongs_to_association_spec.rb b/spec/rails_admin/config/fields/types/belongs_to_association_spec.rb new file mode 100644 index 0000000000..c9bdd79646 --- /dev/null +++ b/spec/rails_admin/config/fields/types/belongs_to_association_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::BelongsToAssociation do + it_behaves_like 'a generic field type', :integer_field, :belongs_to_association +end diff --git a/spec/rails_admin/config/fields/types/boolean_spec.rb b/spec/rails_admin/config/fields/types/boolean_spec.rb new file mode 100644 index 0000000000..e3b4839d88 --- /dev/null +++ b/spec/rails_admin/config/fields/types/boolean_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Boolean do + it_behaves_like 'a generic field type', :boolean_field, :boolean +end diff --git a/spec/rails_admin/config/fields/types/bson_object_id_spec.rb b/spec/rails_admin/config/fields/types/bson_object_id_spec.rb new file mode 100644 index 0000000000..24ed287ce5 --- /dev/null +++ b/spec/rails_admin/config/fields/types/bson_object_id_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::BsonObjectId do + it_behaves_like 'a generic field type', :string_field, :bson_object_id +end diff --git a/spec/rails_admin/config/fields/types/carrierwave_spec.rb b/spec/rails_admin/config/fields/types/carrierwave_spec.rb new file mode 100644 index 0000000000..08eb4d4d4e --- /dev/null +++ b/spec/rails_admin/config/fields/types/carrierwave_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Carrierwave do + it_behaves_like 'a generic field type', :string_field, :carrierwave +end diff --git a/spec/rails_admin/config/fields/types/ck_editor_spec.rb b/spec/rails_admin/config/fields/types/ck_editor_spec.rb index 043e261be3..2b0130a1b3 100644 --- a/spec/rails_admin/config/fields/types/ck_editor_spec.rb +++ b/spec/rails_admin/config/fields/types/ck_editor_spec.rb @@ -21,4 +21,6 @@ ).to eq @custom_prefix end end + + it_behaves_like 'a generic field type', :text_field, :ck_editor end diff --git a/spec/rails_admin/config/fields/types/code_mirror_spec.rb b/spec/rails_admin/config/fields/types/code_mirror_spec.rb new file mode 100644 index 0000000000..a62f0445f4 --- /dev/null +++ b/spec/rails_admin/config/fields/types/code_mirror_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::CodeMirror do + it_behaves_like 'a generic field type', :text_field, :code_mirror +end diff --git a/spec/rails_admin/config/fields/types/color_spec.rb b/spec/rails_admin/config/fields/types/color_spec.rb new file mode 100644 index 0000000000..7c341f8ad1 --- /dev/null +++ b/spec/rails_admin/config/fields/types/color_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Color do + it_behaves_like 'a generic field type', :string_field, :color +end diff --git a/spec/rails_admin/config/fields/types/date_spec.rb b/spec/rails_admin/config/fields/types/date_spec.rb new file mode 100644 index 0000000000..f40e34ea18 --- /dev/null +++ b/spec/rails_admin/config/fields/types/date_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Date do + it_behaves_like 'a generic field type', :date_field, :date +end diff --git a/spec/rails_admin/config/fields/types/datetime_spec.rb b/spec/rails_admin/config/fields/types/datetime_spec.rb index 9cd5920605..da97141a19 100644 --- a/spec/rails_admin/config/fields/types/datetime_spec.rb +++ b/spec/rails_admin/config/fields/types/datetime_spec.rb @@ -15,4 +15,6 @@ expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :datetime_field }.with(object: FieldTest.new).formatted_date_value).to eq 'January 01, 2012' end end + + it_behaves_like 'a generic field type', :datetime_field, :datetime end diff --git a/spec/rails_admin/config/fields/types/decimal_spec.rb b/spec/rails_admin/config/fields/types/decimal_spec.rb new file mode 100644 index 0000000000..d69a91272c --- /dev/null +++ b/spec/rails_admin/config/fields/types/decimal_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Decimal do + it_behaves_like 'a generic field type', :decimal_field, :decimal +end diff --git a/spec/rails_admin/config/fields/types/drangonfly_spec.rb b/spec/rails_admin/config/fields/types/drangonfly_spec.rb new file mode 100644 index 0000000000..f431d5786e --- /dev/null +++ b/spec/rails_admin/config/fields/types/drangonfly_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Dragonfly do + it_behaves_like 'a generic field type', :string_field, :dragonfly +end diff --git a/spec/rails_admin/config/fields/types/enum_spec.rb b/spec/rails_admin/config/fields/types/enum_spec.rb new file mode 100644 index 0000000000..d597a2df30 --- /dev/null +++ b/spec/rails_admin/config/fields/types/enum_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Enum do + it_behaves_like 'a generic field type', :string_field, :enum +end diff --git a/spec/rails_admin/config/fields/types/file_upload_spec.rb b/spec/rails_admin/config/fields/types/file_upload_spec.rb new file mode 100644 index 0000000000..dbbc2ae368 --- /dev/null +++ b/spec/rails_admin/config/fields/types/file_upload_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::FileUpload do + it_behaves_like 'a generic field type', :string_field, :file_upload +end diff --git a/spec/rails_admin/config/fields/types/float_spec.rb b/spec/rails_admin/config/fields/types/float_spec.rb new file mode 100644 index 0000000000..3fcb47d89f --- /dev/null +++ b/spec/rails_admin/config/fields/types/float_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Float do + it_behaves_like 'a generic field type', :float_field, :float +end diff --git a/spec/rails_admin/config/fields/types/froala_spec.rb b/spec/rails_admin/config/fields/types/froala_spec.rb new file mode 100644 index 0000000000..eba209ce27 --- /dev/null +++ b/spec/rails_admin/config/fields/types/froala_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Froala do + it_behaves_like 'a generic field type', :text_field, :froala +end diff --git a/spec/rails_admin/config/fields/types/has_and_belongs_to_many_association_spec.rb b/spec/rails_admin/config/fields/types/has_and_belongs_to_many_association_spec.rb new file mode 100644 index 0000000000..831b3755db --- /dev/null +++ b/spec/rails_admin/config/fields/types/has_and_belongs_to_many_association_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::HasAndBelongsToManyAssociation do + it_behaves_like 'a generic field type', :integer_field, :has_and_belongs_to_many_association +end diff --git a/spec/rails_admin/config/fields/types/has_many_association_spec.rb b/spec/rails_admin/config/fields/types/has_many_association_spec.rb new file mode 100644 index 0000000000..e8fb5a9067 --- /dev/null +++ b/spec/rails_admin/config/fields/types/has_many_association_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::HasManyAssociation do + it_behaves_like 'a generic field type', :integer_field, :has_many_association +end diff --git a/spec/rails_admin/config/fields/types/has_one_association_spec.rb b/spec/rails_admin/config/fields/types/has_one_association_spec.rb new file mode 100644 index 0000000000..e3e05204f6 --- /dev/null +++ b/spec/rails_admin/config/fields/types/has_one_association_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::HasOneAssociation do + it_behaves_like 'a generic field type', :integer_field, :has_one_association +end diff --git a/spec/rails_admin/config/fields/types/hidden_spec.rb b/spec/rails_admin/config/fields/types/hidden_spec.rb new file mode 100644 index 0000000000..cba94f43a4 --- /dev/null +++ b/spec/rails_admin/config/fields/types/hidden_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Hidden do + it_behaves_like 'a generic field type', :integer_field, :hidden +end diff --git a/spec/rails_admin/config/fields/types/inet_spec.rb b/spec/rails_admin/config/fields/types/inet_spec.rb new file mode 100644 index 0000000000..6d2fe48563 --- /dev/null +++ b/spec/rails_admin/config/fields/types/inet_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Inet do + it_behaves_like 'a generic field type', :string_field, :inet +end diff --git a/spec/rails_admin/config/fields/types/integer_spec.rb b/spec/rails_admin/config/fields/types/integer_spec.rb new file mode 100644 index 0000000000..b13b70778f --- /dev/null +++ b/spec/rails_admin/config/fields/types/integer_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Integer do + it_behaves_like 'a generic field type', :integer_field, :integer +end diff --git a/spec/rails_admin/config/fields/types/json_spec.rb b/spec/rails_admin/config/fields/types/json_spec.rb index 68fd6e9ded..9b517ae349 100644 --- a/spec/rails_admin/config/fields/types/json_spec.rb +++ b/spec/rails_admin/config/fields/types/json_spec.rb @@ -35,4 +35,6 @@ expect(field.class).to eq RailsAdmin::Config::Fields::Types::Json end end + + it_behaves_like 'a generic field type', :text, :json end diff --git a/spec/rails_admin/config/fields/types/paperclip_spec.rb b/spec/rails_admin/config/fields/types/paperclip_spec.rb new file mode 100644 index 0000000000..8975cacac0 --- /dev/null +++ b/spec/rails_admin/config/fields/types/paperclip_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Paperclip do + it_behaves_like 'a generic field type', :string_field, :paperclip +end diff --git a/spec/rails_admin/config/fields/types/password_spec.rb b/spec/rails_admin/config/fields/types/password_spec.rb new file mode 100644 index 0000000000..da278f3f0c --- /dev/null +++ b/spec/rails_admin/config/fields/types/password_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Password do + it_behaves_like 'a generic field type', :string_field, :password +end diff --git a/spec/rails_admin/config/fields/types/serialized_spec.rb b/spec/rails_admin/config/fields/types/serialized_spec.rb new file mode 100644 index 0000000000..a13104ce09 --- /dev/null +++ b/spec/rails_admin/config/fields/types/serialized_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Serialized do + it_behaves_like 'a generic field type', :text_field, :serialized +end diff --git a/spec/rails_admin/config/fields/types/string_spec.rb b/spec/rails_admin/config/fields/types/string_spec.rb index 647d1f9e2c..c4bb72d94c 100644 --- a/spec/rails_admin/config/fields/types/string_spec.rb +++ b/spec/rails_admin/config/fields/types/string_spec.rb @@ -22,4 +22,6 @@ expect(string_field.html_attributes[:size]).to_not be_zero end end + + it_behaves_like 'a generic field type', :string_field, :string end diff --git a/spec/rails_admin/config/fields/types/text_spec.rb b/spec/rails_admin/config/fields/types/text_spec.rb new file mode 100644 index 0000000000..d281570cf8 --- /dev/null +++ b/spec/rails_admin/config/fields/types/text_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Text do + it_behaves_like 'a generic field type', :text_field, :text +end diff --git a/spec/rails_admin/config/fields/types/time_spec.rb b/spec/rails_admin/config/fields/types/time_spec.rb new file mode 100644 index 0000000000..1fcfce2862 --- /dev/null +++ b/spec/rails_admin/config/fields/types/time_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Time do + it_behaves_like 'a generic field type', :time_field, :time +end diff --git a/spec/rails_admin/config/fields/types/uuid_spec.rb b/spec/rails_admin/config/fields/types/uuid_spec.rb index dab49dbc30..7c6b98ec02 100644 --- a/spec/rails_admin/config/fields/types/uuid_spec.rb +++ b/spec/rails_admin/config/fields/types/uuid_spec.rb @@ -24,4 +24,6 @@ it 'handles uuid string' do expect(@field.value).to eq uuid end + + it_behaves_like 'a generic field type', :string_field, :uuid end diff --git a/spec/rails_admin/config/fields/types/wysihtml5_spec.rb b/spec/rails_admin/config/fields/types/wysihtml5_spec.rb new file mode 100644 index 0000000000..075c534051 --- /dev/null +++ b/spec/rails_admin/config/fields/types/wysihtml5_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe RailsAdmin::Config::Fields::Types::Wysihtml5 do + it_behaves_like 'a generic field type', :text_field, :wysihtml5 +end diff --git a/spec/shared_examples/shared_examples_for_field_types.rb b/spec/shared_examples/shared_examples_for_field_types.rb new file mode 100644 index 0000000000..2d3a1d9b05 --- /dev/null +++ b/spec/shared_examples/shared_examples_for_field_types.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +RSpec.shared_examples 'a generic field type' do |column_name, field_type| + describe '#html_attributes' do + context 'when the field is required' do + before do + RailsAdmin.config FieldTest do + field column_name, field_type do + required true + end + end + end + + let :rails_admin_field do + RailsAdmin.config('FieldTest').fields.detect do |f| + f.name == column_name + end.with(object: FieldTest.new) + end + + it 'should contain a required attribute with the string "required" as value' do + expect(rails_admin_field.html_attributes[:required]).to be_truthy + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 7128c9788c..7e8559a54b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -23,6 +23,8 @@ require 'database_cleaner' require "orm/#{CI_ORM}" +Dir[File.expand_path('../shared_examples/**/*.rb', __FILE__)].each { |f| require f } + ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true ActionMailer::Base.default_url_options[:host] = 'example.com'