@@ -573,13 +573,20 @@ def custom(arg1, arg2, options = {})
573
573
574
574
describe 'when not provided' do
575
575
576
- it 'should default to a string for forms without objects' do
576
+ it 'should default to a string for forms without objects unless column is password ' do
577
577
semantic_form_for ( :project , :url => 'http://test.host' ) do |builder |
578
578
concat ( builder . input ( :anything ) )
579
579
end
580
580
output_buffer . should have_tag ( 'form li.string' )
581
581
end
582
582
583
+ it 'should default to password for forms without objects if column is password' do
584
+ semantic_form_for ( :project , :url => 'http://test.host' ) do |builder |
585
+ concat ( builder . input ( :password ) )
586
+ end
587
+ output_buffer . should have_tag ( 'form li.password' )
588
+ end
589
+
583
590
it 'should default to a string for methods on objects that don\'t respond to "column_for_attribute"' do
584
591
@new_post . stub! ( :method_without_a_database_column )
585
592
@new_post . stub! ( :column_for_attribute ) . and_return ( nil )
@@ -688,45 +695,84 @@ def custom(arg1, arg2, options = {})
688
695
end
689
696
690
697
describe ':label option' do
691
-
698
+
692
699
describe 'when provided' do
693
-
694
700
it 'should be passed down to the label tag' do
695
701
semantic_form_for ( @new_post ) do |builder |
696
702
concat ( builder . input ( :title , :label => "Kustom" ) )
697
703
end
698
704
output_buffer . should have_tag ( "form li label" , /Kustom/ )
699
705
end
700
-
701
706
end
702
707
703
708
describe 'when not provided' do
704
- describe 'and object is not given' do
705
- it 'should default the humanized method name, passing it down to the label tag' do
706
- Formtastic ::SemanticFormBuilder . label_str_method = :humanize
707
-
708
- semantic_form_for ( :project , :url => 'http://test.host' ) do |builder |
709
- concat ( builder . input ( :meta_description ) )
709
+ describe 'when localized label is NOT provided' do
710
+ describe 'and object is not given' do
711
+ it 'should default the humanized method name, passing it down to the label tag' do
712
+ Formtastic ::SemanticFormBuilder . label_str_method = :humanize
713
+
714
+ semantic_form_for ( :project , :url => 'http://test.host' ) do |builder |
715
+ concat ( builder . input ( :meta_description ) )
716
+ end
717
+
718
+ output_buffer . should have_tag ( "form li label" , /#{ 'meta_description' . humanize } / )
719
+ end
720
+ end
721
+
722
+ describe 'and object is given' do
723
+ it 'should delegate the label logic to class human attribute name and pass it down to the label tag' do
724
+ @new_post . stub! ( :meta_description ) # a two word method name
725
+ @new_post . class . should_receive ( :human_attribute_name ) . with ( 'meta_description' ) . and_return ( 'meta_description' . humanize )
726
+
727
+ semantic_form_for ( @new_post ) do |builder |
728
+ concat ( builder . input ( :meta_description ) )
729
+ end
730
+
731
+ output_buffer . should have_tag ( "form li label" , /#{ 'meta_description' . humanize } / )
710
732
end
711
-
712
- output_buffer . should have_tag ( "form li label" , /#{ 'meta_description' . humanize } / )
713
733
end
714
734
end
715
-
716
- describe 'and object is given' do
717
- it 'should delegate the label logic to class human attribute name and pass it down to the label tag' do
718
- @new_post . stub! ( :meta_description ) # a two word method name
719
- @new_post . class . should_receive ( :human_attribute_name ) . with ( 'meta_description' ) . and_return ( 'meta_description' . humanize )
720
-
735
+
736
+ describe 'when localized label is provided' do
737
+ before do
738
+ @localized_label_text = 'Localized title'
739
+ @default_localized_label_text = 'Default localized title'
740
+ ::I18n . backend . store_translations :en ,
741
+ :formtastic => {
742
+ :labels => {
743
+ :title => @default_localized_label_text ,
744
+ :post => {
745
+ :title => @localized_label_text
746
+ }
747
+ }
748
+ }
749
+ ::Formtastic ::SemanticFormBuilder . i18n_lookups_by_default = false
750
+ end
751
+
752
+ it 'should render a label with localized label (I18n)' do
721
753
semantic_form_for ( @new_post ) do |builder |
722
- concat ( builder . input ( :meta_description ) )
754
+ concat ( builder . input ( :title , :label => true ) )
723
755
end
724
-
725
- output_buffer . should have_tag ( "form li label" , /#{ 'meta_description' . humanize } / )
756
+ output_buffer . should have_tag ( 'form li label' , @localized_label_text )
757
+ end
758
+
759
+ it 'should render a hint paragraph containing an optional localized label (I18n) if first is not set' do
760
+ ::I18n . backend . store_translations :en ,
761
+ :formtastic => {
762
+ :labels => {
763
+ :post => {
764
+ :title => nil
765
+ }
766
+ }
767
+ }
768
+ semantic_form_for ( @new_post ) do |builder |
769
+ concat ( builder . input ( :title , :label => true ) )
770
+ end
771
+ output_buffer . should have_tag ( 'form li label' , @default_localized_label_text )
726
772
end
727
773
end
728
774
end
729
-
775
+
730
776
end
731
777
732
778
describe ':hint option' do
@@ -742,12 +788,63 @@ def custom(arg1, arg2, options = {})
742
788
end
743
789
744
790
describe 'when not provided' do
745
- it 'should not render a hint paragraph' do
746
- hint_text = "this is the title of the post"
747
- semantic_form_for ( @new_post ) do |builder |
748
- concat ( builder . input ( :title ) )
791
+ describe 'when localized hint (I18n) is provided' do
792
+ before do
793
+ @localized_hint_text = "This is the localized hint."
794
+ @default_localized_hint_text = "This is the default localized hint."
795
+ ::I18n . backend . store_translations :en ,
796
+ :formtastic => {
797
+ :hints => {
798
+ :title => @default_localized_hint_text ,
799
+ :post => {
800
+ :title => @localized_hint_text
801
+ }
802
+ }
803
+ }
804
+ ::Formtastic ::SemanticFormBuilder . i18n_lookups_by_default = false
805
+ end
806
+
807
+ describe 'when provided value (hint value) is set to TRUE' do
808
+ it 'should render a hint paragraph containing a localized hint (I18n)' do
809
+ semantic_form_for ( @new_post ) do |builder |
810
+ concat ( builder . input ( :title , :hint => true ) )
811
+ end
812
+ output_buffer . should have_tag ( 'form li p.inline-hints' , @localized_hint_text )
813
+ end
814
+
815
+ it 'should render a hint paragraph containing an optional localized hint (I18n) if first is not set' do
816
+ ::I18n . backend . store_translations :en ,
817
+ :formtastic => {
818
+ :hints => {
819
+ :post => {
820
+ :title => nil
821
+ }
822
+ }
823
+ }
824
+ semantic_form_for ( @new_post ) do |builder |
825
+ concat ( builder . input ( :title , :hint => true ) )
826
+ end
827
+ output_buffer . should have_tag ( 'form li p.inline-hints' , @default_localized_hint_text )
828
+ end
829
+ end
830
+
831
+ describe 'when provided value (label value) is set to FALSE' do
832
+ it 'should not render a hint paragraph' do
833
+ semantic_form_for ( @new_post ) do |builder |
834
+ concat ( builder . input ( :title , :hint => false ) )
835
+ end
836
+ output_buffer . should_not have_tag ( 'form li p.inline-hints' , @localized_hint_text )
837
+ end
838
+ end
839
+ end
840
+
841
+ describe 'when localized hint (I18n) is not provided' do
842
+ it 'should not render a hint paragraph' do
843
+ semantic_form_for ( @new_post ) do |builder |
844
+ concat ( builder . input ( :title ) )
845
+ end
846
+ output_buffer . should_not have_tag ( 'form li p.inline-hints' )
749
847
end
750
- output_buffer . should_not have_tag ( "form li p.inline-hints" )
751
848
end
752
849
end
753
850
@@ -922,31 +1019,33 @@ def custom(arg1, arg2, options = {})
922
1019
output_buffer . should have_tag ( "form li input[@name=\" post[title]\" ]" )
923
1020
end
924
1021
925
- it 'should have a maxlength matching the column limit' do
926
- @new_post . column_for_attribute ( :title ) . limit . should == 50
927
- output_buffer . should have_tag ( "form li input[@maxlength='50']" )
928
- end
1022
+ unless type == :numeric
1023
+ it 'should have a maxlength matching the column limit' do
1024
+ @new_post . column_for_attribute ( :title ) . limit . should == 50
1025
+ output_buffer . should have_tag ( "form li input[@maxlength='50']" )
1026
+ end
929
1027
930
- it 'should use default_text_field_size for columns longer than default_text_field_size' do
931
- default_size = Formtastic ::SemanticFormBuilder . default_text_field_size
932
- @new_post . stub! ( :column_for_attribute ) . and_return ( mock ( 'column' , :type => type , :limit => default_size * 2 ) )
1028
+ it 'should use default_text_field_size for columns longer than default_text_field_size' do
1029
+ default_size = Formtastic ::SemanticFormBuilder . default_text_field_size
1030
+ @new_post . stub! ( :column_for_attribute ) . and_return ( mock ( 'column' , :type => type , :limit => default_size * 2 ) )
933
1031
934
- semantic_form_for ( @new_post ) do |builder |
935
- concat ( builder . input ( :title , :as => type ) )
1032
+ semantic_form_for ( @new_post ) do |builder |
1033
+ concat ( builder . input ( :title , :as => type ) )
1034
+ end
1035
+
1036
+ output_buffer . should have_tag ( "form li input[@size='#{ default_size } ']" )
936
1037
end
937
1038
938
- output_buffer . should have_tag ( "form li input[@size='#{ default_size } ']" )
939
- end
1039
+ it 'should use the column size for columns shorter than default_text_field_size' do
1040
+ column_limit_shorted_than_default = 1
1041
+ @new_post . stub! ( :column_for_attribute ) . and_return ( mock ( 'column' , :type => type , :limit => column_limit_shorted_than_default ) )
940
1042
941
- it 'should use the column size for columns shorter than default_text_field_size' do
942
- column_limit_shorted_than_default = 1
943
- @new_post . stub! ( :column_for_attribute ) . and_return ( mock ( 'column' , :type => type , :limit => column_limit_shorted_than_default ) )
1043
+ semantic_form_for ( @new_post ) do | builder |
1044
+ concat ( builder . input ( :title , :as => type ) )
1045
+ end
944
1046
945
- semantic_form_for ( @new_post ) do |builder |
946
- concat ( builder . input ( :title , :as => type ) )
1047
+ output_buffer . should have_tag ( "form li input[@size='#{ column_limit_shorted_than_default } ']" )
947
1048
end
948
-
949
- output_buffer . should have_tag ( "form li input[@size='#{ column_limit_shorted_than_default } ']" )
950
1049
end
951
1050
952
1051
it 'should use default_text_field_size for methods without database columns' do
0 commit comments