typus 0.9.29 → 0.9.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/README.rdoc +4 -54
  2. data/VERSION +1 -1
  3. data/app/controllers/admin/master_controller.rb +36 -18
  4. data/app/helpers/admin/form_helper.rb +40 -7
  5. data/app/helpers/admin/table_helper.rb +6 -17
  6. data/app/views/admin/resources/show.html.erb +1 -2
  7. data/app/views/admin/templates/_file.html.erb +2 -40
  8. data/app/views/layouts/admin.html.erb +3 -0
  9. data/config/locales/de.yml +0 -1
  10. data/config/locales/es.yml +0 -1
  11. data/config/locales/fr.yml +0 -1
  12. data/config/locales/language.yml.template +0 -1
  13. data/config/locales/pt-BR.yml +0 -1
  14. data/config/locales/ru.yml +0 -1
  15. data/generators/typus/templates/public/stylesheets/admin/screen.css +1 -1
  16. data/generators/typus/typus_generator.rb +1 -1
  17. data/lib/typus/preview.rb +66 -2
  18. data/tasks/typus_tasks.rake +0 -2
  19. data/test/config/working/application.yml +9 -3
  20. data/test/config/working/application_roles.yml +3 -1
  21. data/test/fixtures/app/views/admin/{comments → posts}/_edit.html.erb +0 -0
  22. data/test/fixtures/app/views/admin/{comments → posts}/_index.html.erb +0 -0
  23. data/test/fixtures/app/views/admin/{comments → posts}/_new.html.erb +0 -0
  24. data/test/fixtures/app/views/admin/{comments → posts}/_show.html.erb +0 -0
  25. data/test/fixtures/app/views/admin/{comments → posts}/_sidebar.html.erb +0 -0
  26. data/test/functional/admin/{assets_controller_test.rb → master_controller_assets_relationships.rb} +23 -13
  27. data/test/functional/admin/master_controller_categories_lists_test.rb +64 -0
  28. data/test/functional/admin/master_controller_posts_before_test.rb +10 -0
  29. data/test/functional/admin/master_controller_posts_crud_test.rb +97 -0
  30. data/test/functional/admin/master_controller_posts_formats_test.rb +59 -0
  31. data/test/functional/admin/master_controller_posts_permissions_test.rb +127 -0
  32. data/test/functional/admin/master_controller_posts_relationships_test.rb +86 -0
  33. data/test/functional/admin/master_controller_posts_roles.rb +50 -0
  34. data/test/functional/admin/master_controller_posts_toggle_test.rb +35 -0
  35. data/test/functional/admin/master_controller_posts_views_test.rb +209 -0
  36. data/test/functional/admin/{status_controller_test.rb → master_controller_tableless_resource_test.rb} +5 -11
  37. data/test/functional/admin/{typus_users_controller_test.rb → master_controller_typus_users_test.rb} +10 -37
  38. data/test/functional/typus_controller_test.rb +154 -136
  39. data/test/helpers/admin/form_helper_test.rb +49 -27
  40. data/test/helpers/admin/sidebar_helper_test.rb +4 -7
  41. data/test/lib/active_record_test.rb +8 -8
  42. data/test/lib/typus_test.rb +1 -1
  43. data/test/models.rb +8 -1
  44. data/test/schema.rb +6 -0
  45. data/test/unit/typus_user_roles_test.rb +4 -4
  46. data/typus.gemspec +31 -21
  47. metadata +31 -21
  48. data/test/functional/admin/categories_controller_test.rb +0 -105
  49. data/test/functional/admin/comments_controller_test.rb +0 -121
  50. data/test/functional/admin/master_controller_test.rb +0 -51
  51. data/test/functional/admin/posts_controller_test.rb +0 -300
@@ -1,105 +0,0 @@
1
- require 'test/helper'
2
-
3
- # Test position action if acts as list is installed.
4
-
5
- class Admin::CategoriesControllerTest < ActionController::TestCase
6
-
7
- def setup
8
- user = typus_users(:editor)
9
- @request.session[:typus_user_id] = user.id
10
- @request.env['HTTP_REFERER'] = '/admin/categories'
11
- end
12
-
13
- def test_should_position_item_one_step_down
14
- return if !defined?(ActiveRecord::Acts::List)
15
- first_category = categories(:first)
16
- assert_equal 1, first_category.position
17
- second_category = categories(:second)
18
- assert_equal 2, second_category.position
19
- get :position, { :id => first_category.id, :go => 'move_lower' }
20
- assert flash[:success]
21
- assert_match /Record moved lower./, flash[:success]
22
- assert_equal 2, first_category.reload.position
23
- assert_equal 1, second_category.reload.position
24
- end
25
-
26
- def test_should_position_item_one_step_up
27
- return if !defined?(ActiveRecord::Acts::List)
28
- first_category = categories(:first)
29
- assert_equal 1, first_category.position
30
- second_category = categories(:second)
31
- assert_equal 2, second_category.position
32
- get :position, { :id => second_category.id, :go => 'move_higher' }
33
- assert flash[:success]
34
- assert_match /Record moved higher./, flash[:success]
35
- assert_equal 2, first_category.reload.position
36
- assert_equal 1, second_category.reload.position
37
- end
38
-
39
- def test_should_position_top_item_to_bottom
40
- return if !defined?(ActiveRecord::Acts::List)
41
- first_category = categories(:first)
42
- assert_equal 1, first_category.position
43
- get :position, { :id => first_category.id, :go => 'move_to_bottom' }
44
- assert flash[:success]
45
- assert_match /Record moved to bottom./, flash[:success]
46
- assert_equal 3, first_category.reload.position
47
- end
48
-
49
- def test_should_position_bottom_item_to_top
50
- return if !defined?(ActiveRecord::Acts::List)
51
- third_category = categories(:third)
52
- assert_equal 3, third_category.position
53
- get :position, { :id => third_category.id, :go => 'move_to_top' }
54
- assert flash[:success]
55
- assert_match /Record moved to top./, flash[:success]
56
- assert_equal 1, third_category.reload.position
57
- end
58
-
59
- def test_should_verify_items_are_sorted_by_position_on_list
60
- get :index
61
- assert_response :success
62
- assert_equal [ 1, 2, 3 ], assigns['items'].items.map(&:position)
63
- assert_equal [ 2, 3, 1 ], Category.find(:all, :order => "id ASC").map(&:position)
64
- end
65
-
66
- def test_should_allow_admin_to_add_a_category
67
- admin = typus_users(:admin)
68
- @request.session[:typus_user_id] = admin.id
69
- assert admin.can_perform?('Category', 'create')
70
- end
71
-
72
- def test_should_not_allow_designer_to_add_a_category
73
- designer = typus_users(:designer)
74
- @request.session[:typus_user_id] = designer.id
75
- category = categories(:first)
76
- get :new
77
- assert_response :redirect
78
- assert flash[:notice]
79
- assert_equal "Designer can't perform action (new).", flash[:notice]
80
- assert_redirected_to :action => :index
81
- end
82
-
83
- def test_should_allow_admin_to_destroy_a_category
84
- admin = typus_users(:admin)
85
- @request.session[:typus_user_id] = admin.id
86
- category = categories(:first)
87
- get :destroy, { :id => category.id }
88
- assert_response :redirect
89
- assert flash[:success]
90
- assert_match /Category successfully removed./, flash[:success]
91
- assert_redirected_to :action => :index
92
- end
93
-
94
- def test_should_not_allow_designer_to_destroy_a_category
95
- designer = typus_users(:designer)
96
- @request.session[:typus_user_id] = designer.id
97
- category = categories(:first)
98
- get :destroy, { :id => category.id, :method => :delete }
99
- assert_response :redirect
100
- assert flash[:notice]
101
- assert_match /Designer can't delete this item/, flash[:notice]
102
- assert_redirected_to :action => :index
103
- end
104
-
105
- end
@@ -1,121 +0,0 @@
1
- require 'test/helper'
2
-
3
- # Test template extensions rendering and things related to views.
4
-
5
- class Admin::CommentsControllerTest < ActionController::TestCase
6
-
7
- def setup
8
- @typus_user = typus_users(:admin)
9
- @request.session[:typus_user_id] = @typus_user.id
10
- @comment = comments(:first)
11
- end
12
-
13
- def test_should_render_comments_partials_on_index
14
- get :index
15
- assert_response :success
16
- partials = %w( _index.html.erb _sidebar.html.erb )
17
- partials.each { |p| assert_match p, @response.body }
18
- end
19
-
20
- def test_should_render_comments_partials_on_new
21
- get :new
22
- assert_response :success
23
- partials = %w( _new.html.erb _sidebar.html.erb )
24
- partials.each { |p| assert_match p, @response.body }
25
- end
26
-
27
- def test_should_render_comments_partials_on_edit
28
- get :edit, { :id => @comment.id }
29
- assert_response :success
30
- partials = %w( _edit.html.erb _sidebar.html.erb )
31
- partials.each { |p| assert_match p, @response.body }
32
- end
33
-
34
- def test_should_render_comments_partials_on_show
35
- get :show, { :id => @comment.id }
36
- assert_response :success
37
- partials = %w( _show.html.erb _sidebar.html.erb )
38
- partials.each { |p| assert_match p, @response.body }
39
- end
40
-
41
- def test_should_verify_page_title_on_index
42
- get :index
43
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Comments"
44
- end
45
-
46
- def test_should_verify_page_title_on_new
47
- get :new
48
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Comments &rsaquo; New"
49
- end
50
-
51
- def test_should_verify_page_title_on_edit
52
- comment = comments(:first)
53
- get :edit, :id => comment.id
54
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Comments &rsaquo; Edit"
55
- end
56
-
57
- def test_should_show_add_new_link_in_index
58
- get :index
59
- assert_response :success
60
- assert_match 'Add entry', @response.body
61
- end
62
-
63
- def test_should_not_show_add_new_link_in_index
64
-
65
- typus_user = typus_users(:designer)
66
- @request.session[:typus_user_id] = typus_user.id
67
-
68
- get :index
69
- assert_response :success
70
- assert_no_match /Add comment/, @response.body
71
-
72
- end
73
-
74
- def test_should_show_trash_item_image_and_link_in_index
75
- get :index
76
- assert_response :success
77
- assert_match /Trash/, @response.body
78
- end
79
-
80
- def test_should_not_show_remove_item_link_in_index
81
-
82
- typus_user = typus_users(:designer)
83
- @request.session[:typus_user_id] = typus_user.id
84
-
85
- get :index
86
- assert_response :success
87
- assert_no_match /Trash/, @response.body
88
-
89
- end
90
-
91
- def test_should_verify_new_comment_contains_a_link_to_add_a_new_post
92
- get :new
93
- match = '/admin/posts/new?back_to=%2Fadmin%2Fcomments%2Fnew&amp;selected=post_id'
94
- assert_match match, @response.body
95
- end
96
-
97
- def test_should_verify_edit_comment_contains_a_link_to_add_a_new_post
98
- comment = comments(:first)
99
- get :edit, :id => comment.id
100
- match = "/admin/posts/new?back_to=%2Fadmin%2Fcomments%2Fedit%2F#{comment.id}&amp;selected=post_id"
101
- assert_match match, @response.body
102
- end
103
-
104
- def test_should_generate_csv
105
-
106
- return if !defined?(FasterCSV)
107
-
108
- expected = <<-RAW
109
- Email,Post
110
- john@example.com,1
111
- me@example.com,1
112
- john@example.com,
113
- me@example.com,1
114
- RAW
115
-
116
- get :index, :format => 'csv'
117
- assert_equal expected, @response.body
118
-
119
- end
120
-
121
- end
@@ -1,51 +0,0 @@
1
- require 'test/helper'
2
-
3
- # Test private methods.
4
-
5
- class Admin::MasterControllerTest < ActionController::TestCase
6
-
7
- def test_check_resource
8
- assert true
9
- end
10
-
11
- def test_find_item
12
- assert true
13
- end
14
-
15
- def test_check_ownership_of_item
16
- assert true
17
- end
18
-
19
- def test_check_ownership_of_items
20
- assert true
21
- end
22
-
23
- def check_ownership_of_referal_item
24
- assert true
25
- end
26
-
27
- def test_set_fields
28
- assert true
29
- end
30
-
31
- def test_set_order
32
- assert true
33
- end
34
-
35
- def test_set_tiny_mce
36
- assert true
37
- end
38
-
39
- def test_select_template
40
- assert true
41
- end
42
-
43
- def test_create_with_back_to
44
- assert true
45
- end
46
-
47
- def test_error_handler
48
- assert true
49
- end
50
-
51
- end
@@ -1,300 +0,0 @@
1
- require 'test/helper'
2
-
3
- # Test CRUD actions and ...
4
- #
5
- # - Relate comment which is a has_many relationship.
6
- # - Unrelate comment which is a has_many relationship.
7
-
8
- class Admin::PostsControllerTest < ActionController::TestCase
9
-
10
- def setup
11
- typus_user = typus_users(:admin)
12
- @request.session[:typus_user_id] = typus_user.id
13
- end
14
-
15
- def test_should_redirect_to_login
16
-
17
- @request.session[:typus_user_id] = nil
18
-
19
- get :index
20
- assert_response :redirect
21
- assert_redirected_to admin_sign_in_path(:back_to => '/admin/posts')
22
- get :edit, { :id => 1 }
23
- assert_response :redirect
24
- assert_redirected_to admin_sign_in_path(:back_to => '/admin/posts')
25
-
26
- end
27
-
28
- def test_should_render_index
29
- get :index
30
- assert_response :success
31
- assert_template 'index'
32
- end
33
-
34
- def test_should_render_new
35
- test_should_update_item_and_redirect_to_index
36
- get :new
37
- assert_response :success
38
- assert_template 'new'
39
- end
40
-
41
- def test_should_create_item_and_redirect_to_index
42
-
43
- options = Typus::Configuration.options.merge(:index_after_save => true)
44
- Typus::Configuration.stubs(:options).returns(options)
45
-
46
- assert_difference 'Post.count' do
47
- post :create, { :item => { :title => 'This is another title', :body => 'Body' } }
48
- assert_response :redirect
49
- assert_redirected_to :action => 'index'
50
- end
51
-
52
- end
53
-
54
- def test_should_create_item_and_redirect_to_edit
55
-
56
- options = Typus::Configuration.options.merge(:index_after_save => false)
57
- Typus::Configuration.stubs(:options).returns(options)
58
-
59
- assert_difference 'Post.count' do
60
- post :create, { :item => { :title => 'This is another title', :body => 'Body' } }
61
- assert_response :redirect
62
- assert_redirected_to :controller => 'admin/posts', :action => 'edit', :id => Post.last
63
- end
64
-
65
- end
66
-
67
- def test_should_render_show
68
- post_ = posts(:published)
69
- get :show, { :id => post_.id }
70
- assert_response :success
71
- assert_template 'show'
72
- end
73
-
74
- def test_should_render_edit
75
- post_ = posts(:published)
76
- get :edit, { :id => post_.id }
77
- assert_response :success
78
- assert_template 'edit'
79
- end
80
-
81
- def test_should_update_item_and_redirect_to_index
82
-
83
- options = Typus::Configuration.options.merge(:index_after_save => true)
84
- Typus::Configuration.stubs(:options).returns(options)
85
-
86
- post_ = posts(:published)
87
- post :update, { :id => post_.id, :title => 'Updated' }
88
- assert_response :redirect
89
- assert_redirected_to :action => 'index'
90
-
91
- end
92
-
93
- def test_should_update_item_and_redirect_to_edit
94
-
95
- options = Typus::Configuration.options.merge(:index_after_save => false)
96
- Typus::Configuration.stubs(:options).returns(options)
97
-
98
- post_ = posts(:published)
99
- post :update, { :id => post_.id, :title => 'Updated' }
100
- assert_response :redirect
101
- assert_redirected_to :controller => 'admin/posts', :action => 'edit', :id => post_.id
102
-
103
- end
104
-
105
- def test_should_allow_admin_to_toggle_item
106
- @request.env['HTTP_REFERER'] = '/admin/posts'
107
- post = posts(:unpublished)
108
- get :toggle, { :id => post.id, :field => 'status' }
109
- assert_response :redirect
110
- assert_redirected_to :action => 'index'
111
- assert flash[:success]
112
- assert Post.find(post.id).status
113
- end
114
-
115
- def test_should_perform_a_search
116
- typus_user = typus_users(:admin)
117
- @request.session[:typus_user_id] = typus_user.id
118
- get :index, { :search => 'neinonon' }
119
- assert_response :success
120
- assert_template 'index'
121
- end
122
-
123
- def test_should_relate_category_to_post_which_is_a_habtm_relationship
124
- category = categories(:first)
125
- post_ = posts(:published)
126
- @request.env['HTTP_REFERER'] = "/admin/posts/edit/#{post_.id}#categories"
127
- assert_difference('category.posts.count') do
128
- post :relate, { :id => post_.id, :related => { :model => 'Category', :id => category.id } }
129
- end
130
- assert_response :redirect
131
- assert flash[:success]
132
- assert_redirected_to @request.env['HTTP_REFERER']
133
- end
134
-
135
- def test_should_unrelate_category_from_post_which_is_a_habtm_relationship
136
- category = categories(:first)
137
- post_ = posts(:published)
138
- @request.env['HTTP_REFERER'] = "/admin/posts/edit/#{post_.id}#categories"
139
- assert_difference('category.posts.count', 0) do
140
- post :unrelate, { :id => post_.id, :resource => 'Category', :resource_id => category.id, :association => 'has_and_belongs_to_many' }
141
- end
142
- assert_response :redirect
143
- assert flash[:success]
144
- assert_match /Category unrelated from/, flash[:success]
145
- assert_redirected_to @request.env['HTTP_REFERER']
146
- end
147
-
148
- ##
149
- # This is a polimorphic relationship.
150
- #
151
- def test_should_unrelate_an_asset_from_a_post
152
-
153
- post_ = posts(:published)
154
-
155
- @request.env['HTTP_REFERER'] = "/admin/posts/edit/#{post_.id}#assets"
156
-
157
- assert_difference('post_.assets.count', -1) do
158
- get :unrelate, { :id => post_.id, :resource => 'Asset', :resource_id => post_.assets.first.id, :association => 'has_many' }
159
- end
160
-
161
- assert_response :redirect
162
- assert_redirected_to @request.env['HTTP_REFERER']
163
- assert flash[:success]
164
- assert_match /Asset removed from/, flash[:success]
165
-
166
- end
167
-
168
- def test_should_check_redirection_when_theres_no_http_referer_on_new
169
-
170
- typus_user = typus_users(:designer)
171
- @request.session[:typus_user_id] = typus_user.id
172
-
173
- get :new
174
- assert_response :redirect
175
- assert_redirected_to admin_dashboard_path
176
-
177
- assert flash[:notice]
178
- assert_equal "Designer can't perform action (new).", flash[:notice]
179
-
180
- @request.env['HTTP_REFERER'] = '/admin/posts'
181
-
182
- typus_user = typus_users(:designer)
183
- @request.session[:typus_user_id] = typus_user.id
184
-
185
- get :new
186
- assert_response :redirect
187
- assert_redirected_to '/admin/posts'
188
-
189
- assert flash[:notice]
190
- assert_equal "Designer can't perform action (new).", flash[:notice]
191
-
192
- end
193
-
194
- def test_should_disable_toggle_and_check_links_are_disabled
195
-
196
- options = Typus::Configuration.options.merge(:toggle => false)
197
- Typus::Configuration.stubs(:options).returns(options)
198
-
199
- @request.env['HTTP_REFERER'] = '/admin/posts'
200
- post = posts(:unpublished)
201
- get :toggle, { :id => post.id, :field => 'status' }
202
- assert_response :redirect
203
- assert_redirected_to :action => 'index'
204
- assert !flash[:success]
205
- assert !flash[:error]
206
- assert flash[:notice]
207
- assert_equal "Toggle is disabled.", flash[:notice]
208
-
209
- end
210
-
211
- def test_should_show_form_templates
212
- get :new
213
- assert_response :success
214
- assert_match /datepicker_template_published_at/, @response.body
215
- end
216
-
217
- def test_should_verify_root_can_edit_any_record
218
- Post.find(:all).each do |post|
219
- get :edit, { :id => post.id }
220
- assert_response :success
221
- assert_template 'edit'
222
- end
223
- end
224
-
225
- def test_should_verify_editor_can_view_all_records
226
- Post.find(:all).each do |post|
227
- get :show, { :id => post.id }
228
- assert_response :success
229
- assert_template 'show'
230
- end
231
- end
232
-
233
- def test_should_verify_editor_can_edit_their_records
234
-
235
- typus_user = typus_users(:editor)
236
- @request.session[:typus_user_id] = typus_user.id
237
-
238
- post = posts(:owned_by_editor)
239
- get :edit, { :id => post.id }
240
- assert_response :success
241
-
242
- end
243
-
244
- def test_should_verify_editor_cannot_edit_other_users_records
245
-
246
- @request.env['HTTP_REFERER'] = '/admin/posts'
247
-
248
- typus_user = typus_users(:editor)
249
- @request.session[:typus_user_id] = typus_user.id
250
-
251
- post = posts(:owned_by_admin)
252
- get :edit, { :id => post.id }
253
- assert_response :redirect
254
- assert_redirected_to '/admin/posts'
255
- assert flash[:notice]
256
- assert_equal "You don't have permission to access this item.", flash[:notice]
257
-
258
- end
259
-
260
- def test_should_verify_admin_updating_an_item_does_not_change_typus_user_id_if_not_defined
261
- post_ = posts(:owned_by_editor)
262
- post :update, { :id => post_.id, :item => { :title => 'Updated by admin' } }
263
- post_updated = Post.find(post_.id)
264
- assert_equal post_.typus_user_id, post_updated.typus_user_id
265
- end
266
-
267
- def test_should_verify_admin_updating_an_item_does_change_typus_user_id_to_whatever_admin_wants
268
- post_ = posts(:owned_by_editor)
269
- post :update, { :id => post_.id, :item => { :title => 'Updated', :typus_user_id => 108 } }
270
- post_updated = Post.find(post_.id)
271
- assert_equal 108, post_updated.typus_user_id
272
- end
273
-
274
- def test_should_verify_editor_updating_an_item_does_not_change_typus_user_id
275
-
276
- typus_user = typus_users(:editor)
277
- @request.session[:typus_user_id] = typus_user.id
278
-
279
- [ 108, nil ].each do |typus_user_id|
280
- post_ = posts(:owned_by_editor)
281
- post :update, { :id => post_.id, :item => { :title => 'Updated', :typus_user_id => typus_user_id } }
282
- post_updated = Post.find(post_.id)
283
- assert_equal typus_user.id, post_updated.typus_user_id
284
- end
285
-
286
- end
287
-
288
- def test_should_verify_typus_user_id_of_item_when_creating_record
289
-
290
- typus_user = typus_users(:editor)
291
- @request.session[:typus_user_id] = typus_user.id
292
-
293
- post :create, { :item => { :title => "Chunky Bacon", :body => "Lorem ipsum ..." } }
294
- post_ = Post.find_by_title("Chunky Bacon")
295
-
296
- assert_equal typus_user.id, post_.typus_user_id
297
-
298
- end
299
-
300
- end