forked from heartcombo/show_for
-
Notifications
You must be signed in to change notification settings - Fork 0
/
attribute_test.rb
183 lines (153 loc) · 6.73 KB
/
attribute_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
require 'test_helper'
class AttributeTest < ActionView::TestCase
# COLLECTIONS
test "show_for accepts an attribute as a collection" do
with_attribute_for @user, :scopes
assert_select "div.show_for p.wrapper ul.collection"
assert_select "div.show_for p.wrapper ul.collection li", :count => 3
end
test "show_for accepts an attribute as a collection with a block to iterate the collection" do
with_attribute_for @user, :scopes do |scope|
content_tag :span, scope
end
assert_select "div.show_for p.wrapper ul.collection"
assert_select "div.show_for p.wrapper ul.collection span", :count => 3
end
test "show_for treats symbol for :value as method on each element of collection" do
with_attribute_for @user, :scopes, :value => :upcase
@user.scopes.each do |scope|
assert_select "div.show_for p.wrapper ul.collection", /#{scope.upcase}/
end
end
test "show_for allows collection tag to be configured globally" do
swap ShowFor, :collection_tag => :ol, :collection_class => "my_collection" do
with_attribute_for @user, :scopes
assert_select "div.show_for p.wrapper ol.my_collection"
end
end
test "show_for allows collection tag to be changed by attribute" do
with_attribute_for @user, :scopes, :collection_tag => :ol
assert_select "div.show_for p.wrapper ol.collection"
end
test "show_for allows collection tag html to be configured by attribute" do
with_attribute_for @user, :scopes, :collection_html => { :id => "thecollection", :class => "special" }
assert_select "div.show_for p.wrapper ul#thecollection.special.collection"
end
# CONTENT
test "show_for allows content tag to be configured globally" do
swap ShowFor, :content_tag => :span, :content_class => :my_content do
with_attribute_for @user, :name
assert_select "div.show_for p.wrapper span.my_content"
end
end
test "show_for allows content tag to be changed by attribute" do
with_attribute_for @user, :name, :content_tag => :span
assert_select "div.show_for p.wrapper span.content"
end
test "show_for allows content tag html to be configured by attribute" do
with_attribute_for @user, :name, :content_tag => :span, :content_html => { :id => "thecontent", :class => "special" }
assert_select "div.show_for p.wrapper span#thecontent.special.content"
end
test "show_for accepts an attribute as string" do
with_attribute_for @user, :name
assert_select "div.show_for p.wrapper", /ShowFor/
end
test "show_for accepts an attribute as time" do
with_attribute_for @user, :created_at
assert_select "div.show_for p.wrapper", /#{Regexp.escape(I18n.l(@user.created_at))}/
end
test "show_for accepts an attribute as date" do
with_attribute_for @user, :updated_at
assert_select "div.show_for p.wrapper", /#{Regexp.escape(I18n.l(@user.updated_at))}/
end
test "show_for accepts an attribute as time with format options" do
with_attribute_for @user, :created_at, :format => :long
assert_select "div.show_for p.wrapper", /#{Regexp.escape(I18n.l(@user.created_at, :format => :long))}/
end
test "show_for accepts an attribute as true" do
with_attribute_for @user, :active
assert_select "div.show_for p.wrapper", /Yes/
end
test "show_for accepts an attribute as true which can be localized" do
store_translations(:en, :show_for => { :yes => "Hell yeah!" }) do
with_attribute_for @user, :active
assert_select "div.show_for p.wrapper", /Hell yeah!/
end
end
test "show_for accepts an attribute as false" do
with_attribute_for @user, :invalid
assert_select "div.show_for p.wrapper", /No/
end
test "show_for accepts an attribute as false which can be localized" do
store_translations(:en, :show_for => { :no => "Hell no!" }) do
with_attribute_for @user, :invalid
assert_select "div.show_for p.wrapper", /Hell no!/
end
end
test "show_for accepts nil and or blank attributes" do
with_attribute_for @user, :description
assert_select "div.show_for p.wrapper", /Not specified/
end
test "show_for accepts not spcified message can be localized" do
store_translations(:en, :show_for => { :blank => "OMG! It's blank!" }) do
with_attribute_for @user, :description
assert_select "div.show_for p.wrapper", /OMG! It's blank!/
end
end
test "show_for accepts not spcified message can be localized with html" do
store_translations(:en, :show_for => { :blank_html => "<span>OMG! It's blank!</span>" }) do
with_attribute_for @user, :description
assert_select "div.show_for p.wrapper span", "OMG! It's blank!"
end
end
test "show_for uses :if_blank if attribute is blank" do
with_attribute_for @user, :description, :if_blank => "No description provided"
assert_select "div.show_for p.wrapper", /No description provided/
end
test "show_for accepts a block to supply the content" do
with_attribute_for @user, :description do
"This description is not blank"
end
assert_select "div.show_for p.wrapper", /This description/
end
test "show_for escapes content by default" do
@user.name = "<b>hack you!</b>"
with_attribute_for @user, :name
assert_no_select "div.show_for p.wrapper b"
assert_select "div.show_for p.wrapper", /<b>/
end
test "show_for works with html_safe marked strings" do
@user.name = "<b>hack you!</b>".html_safe
with_attribute_for @user, :name
assert_select "div.show_for p.wrapper b", "hack you!"
end
test "show_for uses :value if supplied" do
with_attribute_for @user, :name, :value => "Calculated Value"
assert_select "div.show_for p.wrapper", /Calculated Value/
end
test "show_for ignores :value if a block is supplied" do
with_attribute_for @user, :name, :value => "Calculated Value" do
@user.name.upcase
end
assert_select "div.show_for p.wrapper", /#{@user.name.upcase}/
end
test "show_for treats symbol for :value as method on attribute" do
with_attribute_for @user, :name, :value => :upcase
assert_select "div.show_for p.wrapper", /#{@user.name.upcase}/
end
# ATTRIBUTES
test "show_for attributes wraps each attribute with a label and content" do
with_attributes_for @user, :name, :email
assert_select "div.show_for p.user_name.wrapper", /ShowFor/
assert_select "p.user_name strong.label", "Super User Name!"
assert_select "div.show_for p.user_email.wrapper", /Not specified/
assert_select "p.user_email strong.label", "Email"
end
test "show_for should wrap blank attributes with no_attribute" do
swap ShowFor, :blank_content_class => 'no_attribute' do
with_attributes_for @user, :name, :birthday
assert_select ".wrapper.user_birthday.no_attribute"
assert_select ".wrapper.user_name.no_attribute", false
end
end
end