ccls-common_lib 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.rdoc +116 -0
- data/lib/ccls-common_lib.rb +1 -0
- data/lib/common_lib.rb +37 -0
- data/lib/common_lib/action_controller_extension.rb +8 -0
- data/lib/common_lib/action_controller_extension/accessible_via_protocol.rb +405 -0
- data/lib/common_lib/action_controller_extension/accessible_via_user.rb +605 -0
- data/lib/common_lib/action_controller_extension/routing.rb +20 -0
- data/lib/common_lib/action_controller_extension/test_case.rb +22 -0
- data/lib/common_lib/action_view_extension.rb +3 -0
- data/lib/common_lib/action_view_extension/base.rb +310 -0
- data/lib/common_lib/action_view_extension/form_builder.rb +197 -0
- data/lib/common_lib/active_model.rb +4 -0
- data/lib/common_lib/active_model/errors.rb +16 -0
- data/lib/common_lib/active_model/validations/absence.rb +78 -0
- data/lib/common_lib/active_model/validations/complete_date.rb +138 -0
- data/lib/common_lib/active_model/validations/past_date.rb +121 -0
- data/lib/common_lib/active_record.rb +1 -0
- data/lib/common_lib/active_record/base.rb +129 -0
- data/lib/common_lib/active_support_extension.rb +12 -0
- data/lib/common_lib/active_support_extension/assertions.rb +108 -0
- data/lib/common_lib/active_support_extension/associations.rb +154 -0
- data/lib/common_lib/active_support_extension/attributes.rb +296 -0
- data/lib/common_lib/active_support_extension/pending.rb +115 -0
- data/lib/common_lib/active_support_extension/test_case.rb +203 -0
- data/lib/common_lib/railtie.rb +48 -0
- data/lib/common_lib/ruby.rb +8 -0
- data/lib/common_lib/ruby/array.rb +128 -0
- data/lib/common_lib/ruby/fixnum.rb +5 -0
- data/lib/common_lib/ruby/hash.rb +51 -0
- data/lib/common_lib/ruby/integer.rb +11 -0
- data/lib/common_lib/ruby/nil_class.rb +13 -0
- data/lib/common_lib/ruby/numeric.rb +0 -0
- data/lib/common_lib/ruby/object.rb +53 -0
- data/lib/common_lib/ruby/string.rb +20 -0
- data/lib/common_lib/translation_table.rb +129 -0
- data/lib/tasks/common_lib.rake +10 -0
- data/lib/tasks/csv.rake +0 -0
- data/lib/tasks/database.rake +229 -0
- data/lib/tasks/rcov.rake +52 -0
- data/vendor/assets/javascripts/common_lib.js +77 -0
- data/vendor/assets/stylesheets/common_lib.css +71 -0
- metadata +84 -0
@@ -0,0 +1,605 @@
|
|
1
|
+
module CommonLib::ActionControllerExtension::AccessibleViaUser
|
2
|
+
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
# This needs to be static and not dynamic or the multiple
|
8
|
+
# calls that would create it would overwrite each other.
|
9
|
+
def nawil_redirection(options={})
|
10
|
+
if options[:redirect]
|
11
|
+
send(options[:redirect])
|
12
|
+
else
|
13
|
+
root_path
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
|
19
|
+
def awil_title(options={})
|
20
|
+
"with #{options[:login]} login#{options[:suffix]}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def assert_access_with_login(*actions)
|
24
|
+
user_options = actions.extract_options!
|
25
|
+
|
26
|
+
options = {}
|
27
|
+
# ruby 193 uses symbols
|
28
|
+
if ( self.constants.include?(:ASSERT_ACCESS_OPTIONS) )
|
29
|
+
options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
30
|
+
# elsif ( self.constants.include?('ASSERT_ACCESS_OPTIONS') )
|
31
|
+
# options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
32
|
+
end
|
33
|
+
options.merge!(user_options)
|
34
|
+
actions += options[:actions]||[]
|
35
|
+
|
36
|
+
m_key = options[:model].try(:underscore).try(:to_sym)
|
37
|
+
|
38
|
+
logins = Array(options[:logins]||options[:login])
|
39
|
+
logins.each do |login|
|
40
|
+
# options[:login] is set for the title,
|
41
|
+
# but "login_as send(login)" as options[:login]
|
42
|
+
# will be the last in the array at runtime.
|
43
|
+
options[:login] = login
|
44
|
+
|
45
|
+
test "#{brand}should get new #{awil_title(options)}" do
|
46
|
+
login_as send(login)
|
47
|
+
args = options[:new] || {}
|
48
|
+
send(:get,:new,args)
|
49
|
+
assert_response :success
|
50
|
+
assert_template 'new'
|
51
|
+
assert assigns(m_key), "#{m_key} was not assigned."
|
52
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
53
|
+
end if actions.include?(:new) || options.keys.include?(:new)
|
54
|
+
|
55
|
+
test "#{brand}should post create #{awil_title(options)}" do
|
56
|
+
login_as send(login)
|
57
|
+
args = if options[:create]
|
58
|
+
options[:create]
|
59
|
+
elsif options[:attributes_for_create]
|
60
|
+
{m_key => send(options[:attributes_for_create])}
|
61
|
+
else
|
62
|
+
{}
|
63
|
+
end
|
64
|
+
assert_difference("#{options[:model]}.count",1) do
|
65
|
+
send(:post,:create,args)
|
66
|
+
end
|
67
|
+
assert_response :redirect
|
68
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
69
|
+
end if actions.include?(:create) || options.keys.include?(:create)
|
70
|
+
|
71
|
+
test "#{brand}should NOT post create #{awil_title(options)} and #{m_key} save fails" do
|
72
|
+
login_as send(login)
|
73
|
+
# AFTER login as it may create this resource with the user
|
74
|
+
options[:model].constantize.any_instance.stubs(:create_or_update).returns(false)
|
75
|
+
args = if options[:create]
|
76
|
+
options[:create]
|
77
|
+
elsif options[:attributes_for_create]
|
78
|
+
{m_key => send(options[:attributes_for_create])}
|
79
|
+
else
|
80
|
+
{}
|
81
|
+
end
|
82
|
+
assert_difference("#{options[:model]}.count",0) do
|
83
|
+
send(:post,:create,args)
|
84
|
+
end
|
85
|
+
assert assigns(m_key)
|
86
|
+
assert_response :success
|
87
|
+
assert_template 'new'
|
88
|
+
assert_not_nil flash[:error]
|
89
|
+
end if( actions.include?(:create) || options.keys.include?(:create) ) && !options[:skip_create_failure]
|
90
|
+
|
91
|
+
test "#{brand}should NOT post create #{awil_title(options)} and invalid #{m_key}" do
|
92
|
+
login_as send(login)
|
93
|
+
# AFTER login as it may create this resource with the user
|
94
|
+
options[:model].constantize.any_instance.stubs(:valid?).returns(false)
|
95
|
+
args = if options[:create]
|
96
|
+
options[:create]
|
97
|
+
elsif options[:attributes_for_create]
|
98
|
+
{m_key => send(options[:attributes_for_create])}
|
99
|
+
else
|
100
|
+
{}
|
101
|
+
end
|
102
|
+
assert_difference("#{options[:model]}.count",0) do
|
103
|
+
send(:post,:create,args)
|
104
|
+
end
|
105
|
+
assert assigns(m_key)
|
106
|
+
assert_response :success
|
107
|
+
assert_template 'new'
|
108
|
+
assert_not_nil flash[:error]
|
109
|
+
end if( actions.include?(:create) || options.keys.include?(:create) ) && !options[:skip_create_failure]
|
110
|
+
|
111
|
+
test "#{brand}should get edit #{awil_title(options)}" do
|
112
|
+
login_as send(login)
|
113
|
+
args={}
|
114
|
+
if options[:method_for_create]
|
115
|
+
obj = send(options[:method_for_create])
|
116
|
+
args[:id] = obj.id
|
117
|
+
end
|
118
|
+
send(:get,:edit, args)
|
119
|
+
assert_response :success
|
120
|
+
assert_template 'edit'
|
121
|
+
assert assigns(m_key), "#{m_key} was not assigned."
|
122
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
123
|
+
end if actions.include?(:edit) || options.keys.include?(:edit)
|
124
|
+
|
125
|
+
test "#{brand}should NOT get edit #{awil_title(options)} and an invalid id" do
|
126
|
+
login_as send(login)
|
127
|
+
get :edit, :id => 0
|
128
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
129
|
+
assert_response :redirect
|
130
|
+
end if( actions.include?(:edit) || options.keys.include?(:edit) ) && !options[:skip_edit_failure]
|
131
|
+
|
132
|
+
test "#{brand}should put update #{awil_title(options)}" do
|
133
|
+
login_as send(login)
|
134
|
+
args={}
|
135
|
+
if options[:method_for_create] && options[:attributes_for_create]
|
136
|
+
obj = send(options[:method_for_create],
|
137
|
+
:updated_at => ( Time.now - 2.days ) )
|
138
|
+
args[:id] = obj.id
|
139
|
+
args[m_key] = send(options[:attributes_for_create])
|
140
|
+
end
|
141
|
+
before = obj.updated_at if obj
|
142
|
+
# sleep 1 if obj # if updated too quickly, updated_at won't change
|
143
|
+
send(:put,:update, args)
|
144
|
+
after = obj.reload.updated_at if obj
|
145
|
+
assert_not_equal( before.to_i,after.to_i, "updated_at did not change." ) if obj
|
146
|
+
assert_response :redirect
|
147
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
148
|
+
end if actions.include?(:update) || options.keys.include?(:update)
|
149
|
+
|
150
|
+
test "#{brand}should NOT put update #{awil_title(options)} and #{m_key} save fails" do
|
151
|
+
login_as send(login)
|
152
|
+
args=options[:update]||{}
|
153
|
+
if options[:method_for_create] && options[:attributes_for_create]
|
154
|
+
obj = send(options[:method_for_create],
|
155
|
+
:updated_at => ( Time.now - 2.days ) )
|
156
|
+
args[:id] = obj.id
|
157
|
+
args[m_key] = send(options[:attributes_for_create])
|
158
|
+
end
|
159
|
+
before = obj.updated_at if obj
|
160
|
+
# sleep 1 if obj # if updated too quickly, updated_at won't change
|
161
|
+
options[:model].constantize.any_instance.stubs(:create_or_update).returns(false)
|
162
|
+
send(:put,:update, args)
|
163
|
+
after = obj.reload.updated_at if obj
|
164
|
+
assert_equal( before.to_s(:db), after.to_s(:db), "updated_at changed." ) if obj
|
165
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
166
|
+
unless options[:no_redirect_check]
|
167
|
+
assert_response :success
|
168
|
+
assert_template 'edit'
|
169
|
+
end
|
170
|
+
end if( actions.include?(:update) || options.keys.include?(:update) ) && !options[:skip_update_failure]
|
171
|
+
|
172
|
+
test "#{brand}should NOT put update #{awil_title(options)} and invalid #{m_key}" do
|
173
|
+
login_as send(login)
|
174
|
+
args=options[:update]||{}
|
175
|
+
if options[:method_for_create] && options[:attributes_for_create]
|
176
|
+
obj = send(options[:method_for_create],
|
177
|
+
:updated_at => ( Time.now - 2.days ) )
|
178
|
+
args[:id] = obj.id
|
179
|
+
args[m_key] = send(options[:attributes_for_create])
|
180
|
+
end
|
181
|
+
before = obj.updated_at if obj
|
182
|
+
# sleep 1 if obj # if updated too quickly, updated_at won't change
|
183
|
+
options[:model].constantize.any_instance.stubs(:valid?).returns(false)
|
184
|
+
send(:put,:update, args)
|
185
|
+
after = obj.reload.updated_at if obj
|
186
|
+
assert_equal( before.to_s(:db), after.to_s(:db), "updated_at changed." ) if obj
|
187
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
188
|
+
unless options[:no_redirect_check]
|
189
|
+
assert_response :success
|
190
|
+
assert_template 'edit'
|
191
|
+
end
|
192
|
+
end if( actions.include?(:update) || options.keys.include?(:update) ) && !options[:skip_update_failure]
|
193
|
+
|
194
|
+
test "#{brand}should NOT put update #{awil_title(options)} and an invalid id" do
|
195
|
+
login_as send(login)
|
196
|
+
put :update, :id => 0
|
197
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
198
|
+
assert_response :redirect
|
199
|
+
end if( actions.include?(:update) || options.keys.include?(:update) ) && !options[:skip_update_failure]
|
200
|
+
|
201
|
+
test "#{brand}should get show #{awil_title(options)}" do
|
202
|
+
login_as send(login)
|
203
|
+
args={}
|
204
|
+
if options[:method_for_create]
|
205
|
+
obj = send(options[:method_for_create])
|
206
|
+
args[:id] = obj.id
|
207
|
+
end
|
208
|
+
send(:get,:show, args)
|
209
|
+
assert_response :success
|
210
|
+
assert_template 'show'
|
211
|
+
assert assigns(m_key), "#{m_key} was not assigned."
|
212
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
213
|
+
end if actions.include?(:show) || options.keys.include?(:show)
|
214
|
+
|
215
|
+
test "#{brand}should NOT get show #{awil_title(options)} and an invalid id" do
|
216
|
+
login_as send(login)
|
217
|
+
get :show, :id => 0
|
218
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
219
|
+
assert_response :redirect
|
220
|
+
end if( actions.include?(:show) || options.keys.include?(:show) ) && !options[:skip_show_failure]
|
221
|
+
|
222
|
+
test "#{brand}should delete destroy #{awil_title(options)}" do
|
223
|
+
login_as send(login)
|
224
|
+
args={}
|
225
|
+
if options[:method_for_create]
|
226
|
+
obj = send(options[:method_for_create])
|
227
|
+
args[:id] = obj.id
|
228
|
+
end
|
229
|
+
assert_difference("#{options[:model]}.count",-1) do
|
230
|
+
send(:delete,:destroy,args)
|
231
|
+
end
|
232
|
+
assert_response :redirect
|
233
|
+
assert assigns(m_key), "#{m_key} was not assigned."
|
234
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
235
|
+
end if actions.include?(:destroy) || options.keys.include?(:destroy)
|
236
|
+
|
237
|
+
test "#{brand}should NOT delete destroy #{awil_title(options)} and an invalid id" do
|
238
|
+
login_as send(login)
|
239
|
+
delete :destroy, :id => 0
|
240
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
241
|
+
assert_response :redirect
|
242
|
+
end if( actions.include?(:destroy) || options.keys.include?(:destroy) ) && !options[:skip_destroy_failure]
|
243
|
+
|
244
|
+
test "#{brand}should get index #{awil_title(options)}" do
|
245
|
+
login_as send(login)
|
246
|
+
get :index
|
247
|
+
assert_response :success
|
248
|
+
assert_template 'index'
|
249
|
+
assert assigns(m_key.try(:to_s).try(:pluralize).try(:to_sym)),
|
250
|
+
"#{m_key.try(:to_s).try(:pluralize).try(:to_sym)} was not assigned."
|
251
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
252
|
+
end if actions.include?(:index) || options.keys.include?(:index)
|
253
|
+
|
254
|
+
test "#{brand}should get index #{awil_title(options)} and items" do
|
255
|
+
send(options[:before]) if !options[:before].blank?
|
256
|
+
login_as send(login)
|
257
|
+
3.times{ send(options[:method_for_create]) } if !options[:method_for_create].blank?
|
258
|
+
get :index
|
259
|
+
assert_response :success
|
260
|
+
assert_template 'index'
|
261
|
+
assert assigns(m_key.try(:to_s).try(:pluralize).try(:to_sym)),
|
262
|
+
"#{m_key.try(:to_s).try(:pluralize).try(:to_sym)} was not assigned."
|
263
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
264
|
+
end if actions.include?(:index) || options.keys.include?(:index)
|
265
|
+
|
266
|
+
end # logins.each
|
267
|
+
end
|
268
|
+
|
269
|
+
|
270
|
+
# I can't imagine a whole lot of use for this one.
|
271
|
+
|
272
|
+
def assert_access_without_login(*actions)
|
273
|
+
user_options = actions.extract_options!
|
274
|
+
|
275
|
+
options = {}
|
276
|
+
if ( self.constants.include?(:ASSERT_ACCESS_OPTIONS) )
|
277
|
+
options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
278
|
+
# elsif ( self.constants.include?('ASSERT_ACCESS_OPTIONS') )
|
279
|
+
# options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
280
|
+
end
|
281
|
+
options.merge!(user_options)
|
282
|
+
actions += options[:actions]||[]
|
283
|
+
|
284
|
+
m_key = options[:model].try(:underscore).try(:to_sym)
|
285
|
+
|
286
|
+
test "#{brand}AWoL should get new without login" do
|
287
|
+
get :new
|
288
|
+
assert_response :success
|
289
|
+
assert_template 'new'
|
290
|
+
assert assigns(m_key), "#{m_key} was not assigned."
|
291
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
292
|
+
end if actions.include?(:new) || options.keys.include?(:new)
|
293
|
+
|
294
|
+
test "#{brand}AWoL should post create without login" do
|
295
|
+
args = if options[:create]
|
296
|
+
options[:create]
|
297
|
+
elsif options[:attributes_for_create]
|
298
|
+
{m_key => send(options[:attributes_for_create])}
|
299
|
+
else
|
300
|
+
{}
|
301
|
+
end
|
302
|
+
assert_difference("#{options[:model]}.count",1) do
|
303
|
+
send(:post,:create,args)
|
304
|
+
end
|
305
|
+
assert_response :redirect
|
306
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
307
|
+
end if actions.include?(:create) || options.keys.include?(:create)
|
308
|
+
|
309
|
+
# test "should NOT get edit without login" do
|
310
|
+
# args=[]
|
311
|
+
# if options[:factory]
|
312
|
+
# obj = Factory(options[:factory])
|
313
|
+
# args.push(:id => obj.id)
|
314
|
+
# end
|
315
|
+
# send(:get,:edit, *args)
|
316
|
+
# assert_redirected_to_login
|
317
|
+
# end if actions.include?(:edit) || options.keys.include?(:edit)
|
318
|
+
#
|
319
|
+
# test "should NOT put update without login" do
|
320
|
+
# args={}
|
321
|
+
# if options[:factory]
|
322
|
+
# obj = Factory(options[:factory])
|
323
|
+
# args[:id] = obj.id
|
324
|
+
# args[options[:factory]] = Factory.attributes_for(options[:factory])
|
325
|
+
# end
|
326
|
+
# send(:put,:update, args)
|
327
|
+
# assert_redirected_to_login
|
328
|
+
# end if actions.include?(:update) || options.keys.include?(:update)
|
329
|
+
|
330
|
+
test "#{brand}AWoL should get show without login" do
|
331
|
+
args={}
|
332
|
+
if options[:method_for_create]
|
333
|
+
obj = send(options[:method_for_create])
|
334
|
+
args[:id] = obj.id
|
335
|
+
end
|
336
|
+
send(:get,:show, args)
|
337
|
+
assert_response :success
|
338
|
+
assert_template 'show'
|
339
|
+
assert assigns(m_key), "#{m_key} was not assigned."
|
340
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
341
|
+
end if actions.include?(:show) || options.keys.include?(:show)
|
342
|
+
|
343
|
+
# test "should NOT delete destroy without login" do
|
344
|
+
# args=[]
|
345
|
+
# if options[:factory]
|
346
|
+
# obj = Factory(options[:factory])
|
347
|
+
# args.push(:id => obj.id)
|
348
|
+
# end
|
349
|
+
# assert_no_difference("#{options[:model]}.count") do
|
350
|
+
# send(:delete,:destroy,*args)
|
351
|
+
# end
|
352
|
+
# assert_redirected_to_login
|
353
|
+
# end if actions.include?(:destroy) || options.keys.include?(:destroy)
|
354
|
+
#
|
355
|
+
# test "should NOT get index without login" do
|
356
|
+
# get :index
|
357
|
+
# assert_redirected_to_login
|
358
|
+
# end if actions.include?(:index) || options.keys.include?(:index)
|
359
|
+
|
360
|
+
test "#{brand}should get index without login" do
|
361
|
+
get :index
|
362
|
+
assert_response :success
|
363
|
+
assert_template 'index'
|
364
|
+
assert assigns(m_key.try(:to_s).try(:pluralize).try(:to_sym)),
|
365
|
+
"#{m_key.try(:to_s).try(:pluralize).try(:to_sym)} was not assigned."
|
366
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
367
|
+
end if actions.include?(:index) || options.keys.include?(:index)
|
368
|
+
|
369
|
+
test "#{brand}should get index without login and items" do
|
370
|
+
send(options[:before]) if !options[:before].blank?
|
371
|
+
3.times{ send(options[:method_for_create]) } if !options[:method_for_create].blank?
|
372
|
+
get :index
|
373
|
+
assert_response :success
|
374
|
+
assert_template 'index'
|
375
|
+
assert assigns(m_key.try(:to_s).try(:pluralize).try(:to_sym)),
|
376
|
+
"#{m_key.try(:to_s).try(:pluralize).try(:to_sym)} was not assigned."
|
377
|
+
assert_nil flash[:error], "flash[:error] was not nil"
|
378
|
+
end if actions.include?(:index) || options.keys.include?(:index)
|
379
|
+
|
380
|
+
end
|
381
|
+
|
382
|
+
def nawil_title(options={})
|
383
|
+
"with #{options[:login]} login#{options[:suffix]}"
|
384
|
+
end
|
385
|
+
|
386
|
+
def assert_no_access_with_login(*actions)
|
387
|
+
user_options = actions.extract_options!
|
388
|
+
|
389
|
+
options = {}
|
390
|
+
if ( self.constants.include?(:ASSERT_ACCESS_OPTIONS) )
|
391
|
+
options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
392
|
+
# elsif ( self.constants.include?('ASSERT_ACCESS_OPTIONS') )
|
393
|
+
# options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
394
|
+
end
|
395
|
+
options.merge!(user_options)
|
396
|
+
actions += options[:actions]||[]
|
397
|
+
|
398
|
+
m_key = options[:model].try(:underscore).try(:to_sym)
|
399
|
+
|
400
|
+
logins = Array(options[:logins]||options[:login])
|
401
|
+
logins.each do |login|
|
402
|
+
# options[:login] is set for the title,
|
403
|
+
# but "login_as send(login)" as options[:login]
|
404
|
+
# will be the last in the array at runtime.
|
405
|
+
options[:login] = login
|
406
|
+
|
407
|
+
test "#{brand}should NOT get new #{nawil_title(options)}" do
|
408
|
+
login_as send(login)
|
409
|
+
args = options[:new]||{}
|
410
|
+
send(:get,:new,args)
|
411
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
412
|
+
assert_response :redirect
|
413
|
+
unless options[:no_redirect_check]
|
414
|
+
assert_redirected_to nawil_redirection(options)
|
415
|
+
end
|
416
|
+
end if actions.include?(:new) || options.keys.include?(:new)
|
417
|
+
|
418
|
+
test "#{brand}should NOT post create #{nawil_title(options)}" do
|
419
|
+
login_as send(login)
|
420
|
+
args = if options[:create]
|
421
|
+
options[:create]
|
422
|
+
elsif options[:attributes_for_create]
|
423
|
+
{m_key => send(options[:attributes_for_create])}
|
424
|
+
else
|
425
|
+
{}
|
426
|
+
end
|
427
|
+
assert_no_difference("#{options[:model]}.count") do
|
428
|
+
send(:post,:create,args)
|
429
|
+
end
|
430
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
431
|
+
assert_response :redirect
|
432
|
+
unless options[:no_redirect_check]
|
433
|
+
assert_redirected_to nawil_redirection(options)
|
434
|
+
end
|
435
|
+
end if actions.include?(:create) || options.keys.include?(:create)
|
436
|
+
|
437
|
+
test "#{brand}should NOT get edit #{nawil_title(options)}" do
|
438
|
+
login_as send(login)
|
439
|
+
args=options[:edit]||{}
|
440
|
+
if options[:method_for_create]
|
441
|
+
obj = send(options[:method_for_create])
|
442
|
+
args[:id] = obj.id
|
443
|
+
end
|
444
|
+
send(:get,:edit, args)
|
445
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
446
|
+
assert_response :redirect
|
447
|
+
unless options[:no_redirect_check]
|
448
|
+
assert_redirected_to nawil_redirection(options)
|
449
|
+
end
|
450
|
+
end if actions.include?(:edit) || options.keys.include?(:edit)
|
451
|
+
|
452
|
+
test "#{brand}should NOT put update #{nawil_title(options)}" do
|
453
|
+
login_as send(login)
|
454
|
+
args=options[:update]||{}
|
455
|
+
if options[:method_for_create] && options[:attributes_for_create]
|
456
|
+
obj = send(options[:method_for_create])
|
457
|
+
args[:id] = obj.id
|
458
|
+
args[m_key] = send(options[:attributes_for_create])
|
459
|
+
end
|
460
|
+
before = obj.updated_at if obj
|
461
|
+
send(:put,:update, args)
|
462
|
+
after = obj.reload.updated_at if obj
|
463
|
+
assert_equal( before.to_s(:db), after.to_s(:db), "updated_at changed." ) if obj
|
464
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
465
|
+
assert_response :redirect
|
466
|
+
unless options[:no_redirect_check]
|
467
|
+
assert_redirected_to nawil_redirection(options)
|
468
|
+
end
|
469
|
+
end if actions.include?(:update) || options.keys.include?(:update)
|
470
|
+
|
471
|
+
test "#{brand}should NOT get show #{nawil_title(options)}" do
|
472
|
+
login_as send(login)
|
473
|
+
args=options[:show]||{}
|
474
|
+
if options[:method_for_create]
|
475
|
+
obj = send(options[:method_for_create])
|
476
|
+
args[:id] = obj.id
|
477
|
+
end
|
478
|
+
send(:get,:show, args)
|
479
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
480
|
+
assert_response :redirect
|
481
|
+
unless options[:no_redirect_check]
|
482
|
+
assert_redirected_to nawil_redirection(options)
|
483
|
+
end
|
484
|
+
end if actions.include?(:show) || options.keys.include?(:show)
|
485
|
+
|
486
|
+
test "#{brand}should NOT delete destroy #{nawil_title(options)}" do
|
487
|
+
login_as send(login)
|
488
|
+
args=options[:destroy]||{}
|
489
|
+
if options[:method_for_create]
|
490
|
+
obj = send(options[:method_for_create])
|
491
|
+
args[:id] = obj.id
|
492
|
+
end
|
493
|
+
assert_no_difference("#{options[:model]}.count") do
|
494
|
+
send(:delete,:destroy,args)
|
495
|
+
end
|
496
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
497
|
+
assert_response :redirect
|
498
|
+
unless options[:no_redirect_check]
|
499
|
+
assert_redirected_to nawil_redirection(options)
|
500
|
+
end
|
501
|
+
end if actions.include?(:destroy) || options.keys.include?(:destroy)
|
502
|
+
|
503
|
+
test "#{brand}should NOT get index #{nawil_title(options)}" do
|
504
|
+
login_as send(login)
|
505
|
+
get :index
|
506
|
+
assert_not_nil flash[:error], "flash[:error] was nil"
|
507
|
+
assert_response :redirect
|
508
|
+
unless options[:no_redirect_check]
|
509
|
+
assert_redirected_to nawil_redirection(options)
|
510
|
+
end
|
511
|
+
end if actions.include?(:index) || options.keys.include?(:index)
|
512
|
+
|
513
|
+
end # logins.each
|
514
|
+
end
|
515
|
+
|
516
|
+
def assert_no_access_without_login(*actions)
|
517
|
+
user_options = actions.extract_options!
|
518
|
+
|
519
|
+
options = {}
|
520
|
+
if ( self.constants.include?(:ASSERT_ACCESS_OPTIONS) )
|
521
|
+
options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
522
|
+
# elsif ( self.constants.include?('ASSERT_ACCESS_OPTIONS') )
|
523
|
+
# options.merge!(self::ASSERT_ACCESS_OPTIONS)
|
524
|
+
end
|
525
|
+
options.merge!(user_options)
|
526
|
+
actions += options[:actions]||[]
|
527
|
+
|
528
|
+
m_key = options[:model].try(:underscore).try(:to_sym)
|
529
|
+
|
530
|
+
test "#{brand}should NOT get new without login" do
|
531
|
+
get :new
|
532
|
+
assert_redirected_to_login
|
533
|
+
end if actions.include?(:new) || options.keys.include?(:new)
|
534
|
+
|
535
|
+
test "#{brand}should NOT post create without login" do
|
536
|
+
args = if options[:create]
|
537
|
+
options[:create]
|
538
|
+
elsif options[:attributes_for_create]
|
539
|
+
{m_key => send(options[:attributes_for_create])}
|
540
|
+
else
|
541
|
+
{}
|
542
|
+
end
|
543
|
+
assert_no_difference("#{options[:model]}.count") do
|
544
|
+
send(:post,:create,args)
|
545
|
+
end
|
546
|
+
assert_redirected_to_login
|
547
|
+
end if actions.include?(:create) || options.keys.include?(:create)
|
548
|
+
|
549
|
+
test "#{brand}should NOT get edit without login" do
|
550
|
+
args={}
|
551
|
+
if options[:method_for_create]
|
552
|
+
obj = send(options[:method_for_create])
|
553
|
+
args[:id] = obj.id
|
554
|
+
end
|
555
|
+
send(:get,:edit, args)
|
556
|
+
assert_redirected_to_login
|
557
|
+
end if actions.include?(:edit) || options.keys.include?(:edit)
|
558
|
+
|
559
|
+
test "#{brand}should NOT put update without login" do
|
560
|
+
args={}
|
561
|
+
if options[:method_for_create] && options[:attributes_for_create]
|
562
|
+
obj = send(options[:method_for_create])
|
563
|
+
args[:id] = obj.id
|
564
|
+
args[m_key] = send(options[:attributes_for_create])
|
565
|
+
end
|
566
|
+
before = obj.updated_at if obj
|
567
|
+
send(:put,:update, args)
|
568
|
+
after = obj.reload.updated_at if obj
|
569
|
+
assert_equal( before.to_s(:db), after.to_s(:db) ) if obj
|
570
|
+
assert_redirected_to_login
|
571
|
+
end if actions.include?(:update) || options.keys.include?(:update)
|
572
|
+
|
573
|
+
test "#{brand}should NOT get show without login" do
|
574
|
+
args={}
|
575
|
+
if options[:method_for_create]
|
576
|
+
obj = send(options[:method_for_create])
|
577
|
+
args[:id] = obj.id
|
578
|
+
end
|
579
|
+
send(:get,:show, args)
|
580
|
+
assert_redirected_to_login
|
581
|
+
end if actions.include?(:show) || options.keys.include?(:show)
|
582
|
+
|
583
|
+
test "#{brand}should NOT delete destroy without login" do
|
584
|
+
args={}
|
585
|
+
if options[:method_for_create]
|
586
|
+
obj = send(options[:method_for_create])
|
587
|
+
args[:id] = obj.id
|
588
|
+
end
|
589
|
+
assert_no_difference("#{options[:model]}.count") do
|
590
|
+
send(:delete,:destroy,args)
|
591
|
+
end
|
592
|
+
assert_redirected_to_login
|
593
|
+
end if actions.include?(:destroy) || options.keys.include?(:destroy)
|
594
|
+
|
595
|
+
test "#{brand}should NOT get index without login" do
|
596
|
+
get :index
|
597
|
+
assert_redirected_to_login
|
598
|
+
end if actions.include?(:index) || options.keys.include?(:index)
|
599
|
+
|
600
|
+
end
|
601
|
+
|
602
|
+
end # module ClassMethods
|
603
|
+
end # module CommonLib::ActionControllerExtension::AccessibleViaProtocol
|
604
|
+
ActionController::TestCase.send(:include,
|
605
|
+
CommonLib::ActionControllerExtension::AccessibleViaUser)
|