typus 0.9.17
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.
- data/.gitignore +8 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +86 -0
- data/Rakefile +61 -0
- data/VERSION +1 -0
- data/app/controllers/admin/master_controller.rb +354 -0
- data/app/controllers/typus_controller.rb +128 -0
- data/app/helpers/admin/form_helper.rb +386 -0
- data/app/helpers/admin/master_helper.rb +104 -0
- data/app/helpers/admin/public_helper.rb +27 -0
- data/app/helpers/admin/sidebar_helper.rb +236 -0
- data/app/helpers/admin/table_helper.rb +227 -0
- data/app/helpers/typus_helper.rb +194 -0
- data/app/models/typus_mailer.rb +14 -0
- data/app/models/typus_user.rb +5 -0
- data/app/views/admin/dashboard/_sidebar.html.erb +9 -0
- data/app/views/admin/resources/edit.html.erb +24 -0
- data/app/views/admin/resources/index.html.erb +23 -0
- data/app/views/admin/resources/new.html.erb +22 -0
- data/app/views/admin/resources/show.html.erb +18 -0
- data/app/views/admin/shared/_footer.html.erb +1 -0
- data/app/views/admin/shared/_pagination.html.erb +28 -0
- data/app/views/layouts/admin.html.erb +73 -0
- data/app/views/layouts/typus.html.erb +29 -0
- data/app/views/typus/dashboard.html.erb +9 -0
- data/app/views/typus/recover_password.html.erb +7 -0
- data/app/views/typus/reset_password.html.erb +15 -0
- data/app/views/typus/sign_in.html.erb +9 -0
- data/app/views/typus/sign_up.html.erb +7 -0
- data/app/views/typus_mailer/reset_password_link.erb +11 -0
- data/config/locales/typus/de.yml +109 -0
- data/config/locales/typus/es.yml +109 -0
- data/config/locales/typus/language.yml.template +113 -0
- data/config/locales/typus/pt-BR.yml +111 -0
- data/config/locales/typus/ru.yml +111 -0
- data/generators/typus/templates/config/initializers/typus.rb +33 -0
- data/generators/typus/templates/config/typus/README +51 -0
- data/generators/typus/templates/config/typus/application.yml +6 -0
- data/generators/typus/templates/config/typus/application_roles.yml +23 -0
- data/generators/typus/templates/config/typus/typus.yml +14 -0
- data/generators/typus/templates/config/typus/typus_roles.yml +2 -0
- data/generators/typus/templates/db/create_typus_users.rb +21 -0
- data/generators/typus/templates/public/images/admin/arrow_down.gif +0 -0
- data/generators/typus/templates/public/images/admin/arrow_up.gif +0 -0
- data/generators/typus/templates/public/images/admin/spinner.gif +0 -0
- data/generators/typus/templates/public/images/admin/status_false.gif +0 -0
- data/generators/typus/templates/public/images/admin/status_true.gif +0 -0
- data/generators/typus/templates/public/images/admin/trash.gif +0 -0
- data/generators/typus/templates/public/javascripts/admin/application.js +14 -0
- data/generators/typus/templates/public/stylesheets/admin/reset.css +68 -0
- data/generators/typus/templates/public/stylesheets/admin/screen.css +729 -0
- data/generators/typus/typus_generator.rb +122 -0
- data/generators/typus_update_schema_to_01/templates/config/typus.yml +14 -0
- data/generators/typus_update_schema_to_01/templates/migration.rb +11 -0
- data/generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb +19 -0
- data/lib/typus.rb +122 -0
- data/lib/typus/active_record.rb +307 -0
- data/lib/typus/authentication.rb +142 -0
- data/lib/typus/configuration.rb +85 -0
- data/lib/typus/extensions/routes.rb +15 -0
- data/lib/typus/format.rb +55 -0
- data/lib/typus/generator.rb +81 -0
- data/lib/typus/hash.rb +8 -0
- data/lib/typus/locale.rb +17 -0
- data/lib/typus/object.rb +21 -0
- data/lib/typus/quick_edit.rb +40 -0
- data/lib/typus/reloader.rb +15 -0
- data/lib/typus/string.rb +11 -0
- data/lib/typus/templates/index.html.erb +11 -0
- data/lib/typus/templates/resource_controller.rb.erb +15 -0
- data/lib/typus/templates/resource_controller_test.rb.erb +10 -0
- data/lib/typus/templates/resources_controller.rb.erb +37 -0
- data/lib/typus/user.rb +134 -0
- data/lib/vendor/active_record.rb +15 -0
- data/lib/vendor/paginator.rb +143 -0
- data/rails/init.rb +3 -0
- data/tasks/typus_tasks.rake +32 -0
- data/test/config/broken/application.yml +68 -0
- data/test/config/broken/application_roles.yml +20 -0
- data/test/config/broken/empty.yml +0 -0
- data/test/config/broken/empty_roles.yml +0 -0
- data/test/config/broken/undefined.yml +3 -0
- data/test/config/broken/undefined_roles.yml +6 -0
- data/test/config/default/typus.yml +14 -0
- data/test/config/default/typus_roles.yml +2 -0
- data/test/config/empty/empty_01.yml +0 -0
- data/test/config/empty/empty_01_roles.yml +0 -0
- data/test/config/empty/empty_02.yml +0 -0
- data/test/config/empty/empty_02_roles.yml +0 -0
- data/test/config/locales/es.yml +10 -0
- data/test/config/ordered/001_roles.yml +2 -0
- data/test/config/ordered/002_roles.yml +2 -0
- data/test/config/unordered/app_one_roles.yml +2 -0
- data/test/config/unordered/app_two_roles.yml +2 -0
- data/test/config/working/application.yml +68 -0
- data/test/config/working/application_roles.yml +22 -0
- data/test/config/working/typus.yml +14 -0
- data/test/config/working/typus_roles.yml +2 -0
- data/test/fixtures/app/controllers/admin/assets_controller.rb +2 -0
- data/test/fixtures/app/controllers/admin/categories_controller.rb +2 -0
- data/test/fixtures/app/controllers/admin/comments_controller.rb +2 -0
- data/test/fixtures/app/controllers/admin/pages_controller.rb +2 -0
- data/test/fixtures/app/controllers/admin/posts_controller.rb +2 -0
- data/test/fixtures/app/controllers/admin/status_controller.rb +6 -0
- data/test/fixtures/app/controllers/admin/typus_users_controller.rb +2 -0
- data/test/fixtures/app/controllers/admin/watch_dog_controller.rb +6 -0
- data/test/fixtures/app/views/admin/comments/_edit.html.erb +1 -0
- data/test/fixtures/app/views/admin/comments/_index.html.erb +1 -0
- data/test/fixtures/app/views/admin/comments/_new.html.erb +1 -0
- data/test/fixtures/app/views/admin/comments/_show.html.erb +1 -0
- data/test/fixtures/app/views/admin/comments/_sidebar.html.erb +1 -0
- data/test/fixtures/app/views/admin/dashboard/_content.html.erb +1 -0
- data/test/fixtures/app/views/admin/dashboard/_sidebar.html.erb +1 -0
- data/test/fixtures/app/views/admin/resources/_sidebar.html.erb +1 -0
- data/test/fixtures/app/views/admin/shared/_footer.html.erb +1 -0
- data/test/fixtures/app/views/admin/status/index.html.erb +1 -0
- data/test/fixtures/app/views/admin/templates/_datepicker.html.erb +1 -0
- data/test/fixtures/assets.yml +11 -0
- data/test/fixtures/categories.yml +14 -0
- data/test/fixtures/comments.yml +27 -0
- data/test/fixtures/pages.yml +41 -0
- data/test/fixtures/posts.yml +37 -0
- data/test/fixtures/typus_users.yml +54 -0
- data/test/functional/admin/assets_controller_test.rb +57 -0
- data/test/functional/admin/categories_controller_test.rb +106 -0
- data/test/functional/admin/comments_controller_test.rb +120 -0
- data/test/functional/admin/master_controller_test.rb +5 -0
- data/test/functional/admin/posts_controller_test.rb +261 -0
- data/test/functional/admin/status_controller_test.rb +43 -0
- data/test/functional/admin/typus_users_controller_test.rb +239 -0
- data/test/functional/typus_controller_test.rb +321 -0
- data/test/helper.rb +51 -0
- data/test/helpers/admin/form_helper_test.rb +337 -0
- data/test/helpers/admin/master_helper_test.rb +69 -0
- data/test/helpers/admin/public_helper_test.rb +26 -0
- data/test/helpers/admin/sidebar_helper_test.rb +335 -0
- data/test/helpers/admin/table_helper_test.rb +239 -0
- data/test/helpers/typus_helper_test.rb +117 -0
- data/test/lib/active_record_test.rb +382 -0
- data/test/lib/configuration_test.rb +94 -0
- data/test/lib/hash_test.rb +11 -0
- data/test/lib/routes_test.rb +71 -0
- data/test/lib/string_test.rb +25 -0
- data/test/lib/typus_test.rb +85 -0
- data/test/models.rb +51 -0
- data/test/schema.rb +64 -0
- data/test/unit/typus_mailer_test.rb +33 -0
- data/test/unit/typus_test.rb +17 -0
- data/test/unit/typus_user_roles_test.rb +90 -0
- data/test/unit/typus_user_test.rb +177 -0
- data/test/vendor/active_record_test.rb +18 -0
- data/test/vendor/paginator_test.rb +136 -0
- data/typus.gemspec +228 -0
- metadata +241 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'test/helper'
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# Test polimorphic relationships using the relate & unrelate actions.
|
|
5
|
+
#
|
|
6
|
+
class Admin::AssetsControllerTest < ActionController::TestCase
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
typus_user = typus_users(:admin)
|
|
10
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_should_test_polymorphic_relationship_message
|
|
14
|
+
post_ = posts(:published)
|
|
15
|
+
get :new, { :back_to => "/admin/posts/#{post_.id}/edit", :resource => post_.class.name, :resource_id => post_.id }
|
|
16
|
+
assert_match "You're adding a new Asset to Post.", @response.body
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_should_create_a_polymorphic_relationship
|
|
20
|
+
|
|
21
|
+
post_ = posts(:published)
|
|
22
|
+
|
|
23
|
+
assert_difference('post_.assets.count') do
|
|
24
|
+
post :create, { :back_to => "/admin/posts/edit/#{post_.id}", :resource => post_.class.name, :resource_id => post_.id }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
assert_response :redirect
|
|
28
|
+
assert_redirected_to '/admin/posts/edit/1#assets'
|
|
29
|
+
assert flash[:success]
|
|
30
|
+
assert_equal 'Asset successfully assigned to Post.', flash[:success]
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_should_test_polymorphic_relationship_edit_message
|
|
35
|
+
post_ = posts(:published)
|
|
36
|
+
asset_ = assets(:first)
|
|
37
|
+
get :edit, { :id => asset_.id, :back_to => "/admin/posts/#{post_.id}/edit", :resource => post_.class.name, :resource_id => post_.id }
|
|
38
|
+
assert_match "You're updating a Asset for Post.", @response.body
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_should_return_to_back_to_url
|
|
42
|
+
|
|
43
|
+
options = Typus::Configuration.options.merge(:index_after_save => true)
|
|
44
|
+
Typus::Configuration.stubs(:options).returns(options)
|
|
45
|
+
|
|
46
|
+
post_ = posts(:published)
|
|
47
|
+
asset_ = assets(:first)
|
|
48
|
+
|
|
49
|
+
post :update, { :back_to => "/admin/posts/#{post_.id}/edit", :resource => post_.class.name, :resource_id => post_.id, :id => asset_.id }
|
|
50
|
+
assert_response :redirect
|
|
51
|
+
assert_redirected_to '/admin/posts/1/edit#assets'
|
|
52
|
+
assert flash[:success]
|
|
53
|
+
assert_equal 'Asset successfully updated.', flash[:success]
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require 'test/helper'
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# Test position action if acts as list is installed.
|
|
5
|
+
#
|
|
6
|
+
class Admin::CategoriesControllerTest < ActionController::TestCase
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
user = typus_users(:editor)
|
|
10
|
+
@request.session[:typus_user_id] = user.id
|
|
11
|
+
@request.env['HTTP_REFERER'] = '/admin/categories'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_should_position_item_one_step_down
|
|
15
|
+
return if !defined?(ActiveRecord::Acts::List)
|
|
16
|
+
first_category = categories(:first)
|
|
17
|
+
assert_equal 1, first_category.position
|
|
18
|
+
second_category = categories(:second)
|
|
19
|
+
assert_equal 2, second_category.position
|
|
20
|
+
get :position, { :id => first_category.id, :go => 'move_lower' }
|
|
21
|
+
assert flash[:success]
|
|
22
|
+
assert_match /Record moved lower./, flash[:success]
|
|
23
|
+
assert_equal 2, first_category.reload.position
|
|
24
|
+
assert_equal 1, second_category.reload.position
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_should_position_item_one_step_up
|
|
28
|
+
return if !defined?(ActiveRecord::Acts::List)
|
|
29
|
+
first_category = categories(:first)
|
|
30
|
+
assert_equal 1, first_category.position
|
|
31
|
+
second_category = categories(:second)
|
|
32
|
+
assert_equal 2, second_category.position
|
|
33
|
+
get :position, { :id => second_category.id, :go => 'move_higher' }
|
|
34
|
+
assert flash[:success]
|
|
35
|
+
assert_match /Record moved higher./, flash[:success]
|
|
36
|
+
assert_equal 2, first_category.reload.position
|
|
37
|
+
assert_equal 1, second_category.reload.position
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_should_position_top_item_to_bottom
|
|
41
|
+
return if !defined?(ActiveRecord::Acts::List)
|
|
42
|
+
first_category = categories(:first)
|
|
43
|
+
assert_equal 1, first_category.position
|
|
44
|
+
get :position, { :id => first_category.id, :go => 'move_to_bottom' }
|
|
45
|
+
assert flash[:success]
|
|
46
|
+
assert_match /Record moved to bottom./, flash[:success]
|
|
47
|
+
assert_equal 3, first_category.reload.position
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_should_position_bottom_item_to_top
|
|
51
|
+
return if !defined?(ActiveRecord::Acts::List)
|
|
52
|
+
third_category = categories(:third)
|
|
53
|
+
assert_equal 3, third_category.position
|
|
54
|
+
get :position, { :id => third_category.id, :go => 'move_to_top' }
|
|
55
|
+
assert flash[:success]
|
|
56
|
+
assert_match /Record moved to top./, flash[:success]
|
|
57
|
+
assert_equal 1, third_category.reload.position
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_should_verify_items_are_sorted_by_position_on_list
|
|
61
|
+
get :index
|
|
62
|
+
assert_response :success
|
|
63
|
+
assert_equal [ 1, 2, 3 ], assigns['items'].items.map(&:position)
|
|
64
|
+
assert_equal [ 2, 3, 1 ], Category.find(:all, :order => "id ASC").map(&:position)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_should_allow_admin_to_add_a_category
|
|
68
|
+
admin = typus_users(:admin)
|
|
69
|
+
@request.session[:typus_user_id] = admin.id
|
|
70
|
+
assert admin.can_perform?('Category', 'create')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_should_not_allow_designer_to_add_a_category
|
|
74
|
+
designer = typus_users(:designer)
|
|
75
|
+
@request.session[:typus_user_id] = designer.id
|
|
76
|
+
category = categories(:first)
|
|
77
|
+
get :new
|
|
78
|
+
assert_response :redirect
|
|
79
|
+
assert flash[:notice]
|
|
80
|
+
assert_equal "Designer can't perform action (new).", flash[:notice]
|
|
81
|
+
assert_redirected_to :action => :index
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_should_allow_admin_to_destroy_a_category
|
|
85
|
+
admin = typus_users(:admin)
|
|
86
|
+
@request.session[:typus_user_id] = admin.id
|
|
87
|
+
category = categories(:first)
|
|
88
|
+
get :destroy, { :id => category.id }
|
|
89
|
+
assert_response :redirect
|
|
90
|
+
assert flash[:success]
|
|
91
|
+
assert_match /Category successfully removed./, flash[:success]
|
|
92
|
+
assert_redirected_to :action => :index
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_should_not_allow_designer_to_destroy_a_category
|
|
96
|
+
designer = typus_users(:designer)
|
|
97
|
+
@request.session[:typus_user_id] = designer.id
|
|
98
|
+
category = categories(:first)
|
|
99
|
+
get :destroy, { :id => category.id, :method => :delete }
|
|
100
|
+
assert_response :redirect
|
|
101
|
+
assert flash[:notice]
|
|
102
|
+
assert_match /Designer can't delete this item/, flash[:notice]
|
|
103
|
+
assert_redirected_to :action => :index
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require 'test/helper'
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# Test template extensions rendering and things related to views.
|
|
5
|
+
#
|
|
6
|
+
class Admin::CommentsControllerTest < ActionController::TestCase
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@typus_user = typus_users(:admin)
|
|
10
|
+
@request.session[:typus_user_id] = @typus_user.id
|
|
11
|
+
@comment = comments(:first)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_should_render_comments_partials_on_index
|
|
15
|
+
get :index
|
|
16
|
+
assert_response :success
|
|
17
|
+
partials = %w( _index.html.erb _sidebar.html.erb )
|
|
18
|
+
partials.each { |p| assert_match p, @response.body }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_should_render_comments_partials_on_new
|
|
22
|
+
get :new
|
|
23
|
+
assert_response :success
|
|
24
|
+
partials = %w( _new.html.erb _sidebar.html.erb )
|
|
25
|
+
partials.each { |p| assert_match p, @response.body }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_should_render_comments_partials_on_edit
|
|
29
|
+
get :edit, { :id => @comment.id }
|
|
30
|
+
assert_response :success
|
|
31
|
+
partials = %w( _edit.html.erb _sidebar.html.erb )
|
|
32
|
+
partials.each { |p| assert_match p, @response.body }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_should_render_comments_partials_on_show
|
|
36
|
+
get :show, { :id => @comment.id }
|
|
37
|
+
assert_response :success
|
|
38
|
+
partials = %w( _show.html.erb _sidebar.html.erb )
|
|
39
|
+
partials.each { |p| assert_match p, @response.body }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_should_verify_page_title_on_index
|
|
43
|
+
get :index
|
|
44
|
+
assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Comments"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_should_verify_page_title_on_new
|
|
48
|
+
get :new
|
|
49
|
+
assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Comments › New"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_should_verify_page_title_on_edit
|
|
53
|
+
comment = comments(:first)
|
|
54
|
+
get :edit, :id => comment.id
|
|
55
|
+
assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Comments › Edit"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_should_show_add_new_link_in_index
|
|
59
|
+
get :index
|
|
60
|
+
assert_response :success
|
|
61
|
+
assert_match 'Add entry', @response.body
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_should_not_show_add_new_link_in_index
|
|
65
|
+
|
|
66
|
+
typus_user = typus_users(:designer)
|
|
67
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
68
|
+
|
|
69
|
+
get :index
|
|
70
|
+
assert_response :success
|
|
71
|
+
assert_no_match /Add comment/, @response.body
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_should_show_trash_item_image_and_link_in_index
|
|
76
|
+
get :index
|
|
77
|
+
assert_response :success
|
|
78
|
+
assert_match /trash.gif/, @response.body
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_should_not_show_remove_item_link_in_index
|
|
82
|
+
|
|
83
|
+
typus_user = typus_users(:designer)
|
|
84
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
85
|
+
|
|
86
|
+
get :index
|
|
87
|
+
assert_response :success
|
|
88
|
+
assert_no_match /trash.gif/, @response.body
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_should_verify_new_comment_contains_a_link_to_add_a_new_post
|
|
93
|
+
get :new
|
|
94
|
+
match = '/admin/posts/new?back_to=%2Fadmin%2Fcomments%2Fnew&selected=post_id'
|
|
95
|
+
assert_match match, @response.body
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_should_verify_edit_comment_contains_a_link_to_add_a_new_post
|
|
99
|
+
comment = comments(:first)
|
|
100
|
+
get :edit, :id => comment.id
|
|
101
|
+
match = "/admin/posts/new?back_to=%2Fadmin%2Fcomments%2Fedit%2F#{comment.id}&selected=post_id"
|
|
102
|
+
assert_match match, @response.body
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def test_should_generate_csv
|
|
106
|
+
|
|
107
|
+
expected = <<-RAW
|
|
108
|
+
Email,Post
|
|
109
|
+
john@example.com,1
|
|
110
|
+
me@example.com,1
|
|
111
|
+
john@example.com,
|
|
112
|
+
me@example.com,1
|
|
113
|
+
RAW
|
|
114
|
+
|
|
115
|
+
get :index, :format => 'csv'
|
|
116
|
+
assert_equal expected, @response.body
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
require 'test/helper'
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# Test CRUD actions and ...
|
|
5
|
+
#
|
|
6
|
+
# - Relate comment which is a has_many relationship.
|
|
7
|
+
# - Unrelate comment which is a has_many relationship.
|
|
8
|
+
#
|
|
9
|
+
class Admin::PostsControllerTest < ActionController::TestCase
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
typus_user = typus_users(:admin)
|
|
13
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_should_redirect_to_login
|
|
17
|
+
|
|
18
|
+
@request.session[:typus_user_id] = nil
|
|
19
|
+
|
|
20
|
+
get :index
|
|
21
|
+
assert_response :redirect
|
|
22
|
+
assert_redirected_to admin_sign_in_path(:back_to => '/admin/posts')
|
|
23
|
+
get :edit, { :id => 1 }
|
|
24
|
+
assert_response :redirect
|
|
25
|
+
assert_redirected_to admin_sign_in_path(:back_to => '/admin/posts')
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_should_render_index
|
|
30
|
+
get :index
|
|
31
|
+
assert_response :success
|
|
32
|
+
assert_template 'index'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_should_render_new
|
|
36
|
+
test_should_update_item_and_redirect_to_index
|
|
37
|
+
get :new
|
|
38
|
+
assert_response :success
|
|
39
|
+
assert_template 'new'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_should_create_item_and_redirect_to_index
|
|
43
|
+
|
|
44
|
+
options = Typus::Configuration.options.merge(:index_after_save => true)
|
|
45
|
+
Typus::Configuration.stubs(:options).returns(options)
|
|
46
|
+
|
|
47
|
+
assert_difference 'Post.count' do
|
|
48
|
+
post :create, { :item => { :title => 'This is another title', :body => 'Body' } }
|
|
49
|
+
assert_response :redirect
|
|
50
|
+
assert_redirected_to :action => 'index'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_should_create_item_and_redirect_to_edit
|
|
56
|
+
|
|
57
|
+
options = Typus::Configuration.options.merge(:index_after_save => false)
|
|
58
|
+
Typus::Configuration.stubs(:options).returns(options)
|
|
59
|
+
|
|
60
|
+
assert_difference 'Post.count' do
|
|
61
|
+
post :create, { :item => { :title => 'This is another title', :body => 'Body' } }
|
|
62
|
+
assert_response :redirect
|
|
63
|
+
assert_redirected_to :controller => 'admin/posts', :action => 'edit', :id => Post.last
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_should_render_show
|
|
69
|
+
post_ = posts(:published)
|
|
70
|
+
get :show, { :id => post_.id }
|
|
71
|
+
assert_response :success
|
|
72
|
+
assert_template 'show'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_should_render_edit
|
|
76
|
+
post_ = posts(:published)
|
|
77
|
+
get :edit, { :id => post_.id }
|
|
78
|
+
assert_response :success
|
|
79
|
+
assert_template 'edit'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_should_update_item_and_redirect_to_index
|
|
83
|
+
|
|
84
|
+
options = Typus::Configuration.options.merge(:index_after_save => true)
|
|
85
|
+
Typus::Configuration.stubs(:options).returns(options)
|
|
86
|
+
|
|
87
|
+
post_ = posts(:published)
|
|
88
|
+
post :update, { :id => post_.id, :title => 'Updated' }
|
|
89
|
+
assert_response :redirect
|
|
90
|
+
assert_redirected_to :action => 'index'
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_should_update_item_and_redirect_to_edit
|
|
95
|
+
|
|
96
|
+
options = Typus::Configuration.options.merge(:index_after_save => false)
|
|
97
|
+
Typus::Configuration.stubs(:options).returns(options)
|
|
98
|
+
|
|
99
|
+
post_ = posts(:published)
|
|
100
|
+
post :update, { :id => post_.id, :title => 'Updated' }
|
|
101
|
+
assert_response :redirect
|
|
102
|
+
assert_redirected_to :controller => 'admin/posts', :action => 'edit', :id => post_.id
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_should_allow_admin_to_toggle_item
|
|
107
|
+
@request.env['HTTP_REFERER'] = '/admin/posts'
|
|
108
|
+
post = posts(:unpublished)
|
|
109
|
+
get :toggle, { :id => post.id, :field => 'status' }
|
|
110
|
+
assert_response :redirect
|
|
111
|
+
assert_redirected_to :action => 'index'
|
|
112
|
+
assert flash[:success]
|
|
113
|
+
assert Post.find(post.id).status
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_should_perform_a_search
|
|
117
|
+
typus_user = typus_users(:admin)
|
|
118
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
119
|
+
get :index, { :search => 'neinonon' }
|
|
120
|
+
assert_response :success
|
|
121
|
+
assert_template 'index'
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_should_relate_category_to_post_which_is_a_habtm_relationship
|
|
125
|
+
category = categories(:first)
|
|
126
|
+
post_ = posts(:published)
|
|
127
|
+
@request.env['HTTP_REFERER'] = "/admin/posts/edit/#{post_.id}#categories"
|
|
128
|
+
assert_difference('category.posts.count') do
|
|
129
|
+
post :relate, { :id => post_.id, :related => { :model => 'Category', :id => category.id } }
|
|
130
|
+
end
|
|
131
|
+
assert_response :redirect
|
|
132
|
+
assert flash[:success]
|
|
133
|
+
assert_redirected_to @request.env['HTTP_REFERER']
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def test_should_unrelate_category_from_post_which_is_a_habtm_relationship
|
|
137
|
+
category = categories(:first)
|
|
138
|
+
post_ = posts(:published)
|
|
139
|
+
@request.env['HTTP_REFERER'] = "/admin/posts/edit/#{post_.id}#categories"
|
|
140
|
+
assert_difference('category.posts.count', 0) do
|
|
141
|
+
post :unrelate, { :id => post_.id, :resource => 'Category', :resource_id => category.id, :association => 'has_and_belongs_to_many' }
|
|
142
|
+
end
|
|
143
|
+
assert_response :redirect
|
|
144
|
+
assert flash[:success]
|
|
145
|
+
assert_match /Category unrelated from/, flash[:success]
|
|
146
|
+
assert_redirected_to @request.env['HTTP_REFERER']
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
##
|
|
150
|
+
# This is a polimorphic relationship.
|
|
151
|
+
#
|
|
152
|
+
def test_should_unrelate_an_asset_from_a_post
|
|
153
|
+
|
|
154
|
+
post_ = posts(:published)
|
|
155
|
+
|
|
156
|
+
@request.env['HTTP_REFERER'] = "/admin/posts/edit/#{post_.id}#assets"
|
|
157
|
+
|
|
158
|
+
assert_difference('post_.assets.count', -1) do
|
|
159
|
+
get :unrelate, { :id => post_.id, :resource => 'Asset', :resource_id => post_.assets.first.id, :association => 'has_many' }
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
assert_response :redirect
|
|
163
|
+
assert_redirected_to @request.env['HTTP_REFERER']
|
|
164
|
+
assert flash[:success]
|
|
165
|
+
assert_match /Asset removed from/, flash[:success]
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def test_should_check_redirection_when_theres_no_http_referer_on_new
|
|
170
|
+
|
|
171
|
+
typus_user = typus_users(:designer)
|
|
172
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
173
|
+
|
|
174
|
+
get :new
|
|
175
|
+
assert_response :redirect
|
|
176
|
+
assert_redirected_to admin_dashboard_path
|
|
177
|
+
|
|
178
|
+
assert flash[:notice]
|
|
179
|
+
assert_equal "Designer can't perform action (new).", flash[:notice]
|
|
180
|
+
|
|
181
|
+
@request.env['HTTP_REFERER'] = '/admin/posts'
|
|
182
|
+
|
|
183
|
+
typus_user = typus_users(:designer)
|
|
184
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
185
|
+
|
|
186
|
+
get :new
|
|
187
|
+
assert_response :redirect
|
|
188
|
+
assert_redirected_to '/admin/posts'
|
|
189
|
+
|
|
190
|
+
assert flash[:notice]
|
|
191
|
+
assert_equal "Designer can't perform action (new).", flash[:notice]
|
|
192
|
+
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def test_should_disable_toggle_and_check_links_are_disabled
|
|
196
|
+
|
|
197
|
+
options = Typus::Configuration.options.merge(:toggle => false)
|
|
198
|
+
Typus::Configuration.stubs(:options).returns(options)
|
|
199
|
+
|
|
200
|
+
@request.env['HTTP_REFERER'] = '/admin/posts'
|
|
201
|
+
post = posts(:unpublished)
|
|
202
|
+
get :toggle, { :id => post.id, :field => 'status' }
|
|
203
|
+
assert_response :redirect
|
|
204
|
+
assert_redirected_to :action => 'index'
|
|
205
|
+
assert !flash[:success]
|
|
206
|
+
assert !flash[:error]
|
|
207
|
+
assert flash[:notice]
|
|
208
|
+
assert_equal "Toggle is disabled.", flash[:notice]
|
|
209
|
+
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def test_should_show_form_templates
|
|
213
|
+
get :new
|
|
214
|
+
assert_response :success
|
|
215
|
+
assert_match /datepicker_template_published_at/, @response.body
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def test_should_verify_root_can_edit_any_record
|
|
219
|
+
Post.find(:all).each do |post|
|
|
220
|
+
get :edit, { :id => post.id }
|
|
221
|
+
assert_response :success
|
|
222
|
+
assert_template 'edit'
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def test_should_verify_editor_can_view_all_records
|
|
227
|
+
Post.find(:all).each do |post|
|
|
228
|
+
get :show, { :id => post.id }
|
|
229
|
+
assert_response :success
|
|
230
|
+
assert_template 'show'
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def test_should_verify_editor_can_edit_their_records
|
|
235
|
+
|
|
236
|
+
typus_user = typus_users(:editor)
|
|
237
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
238
|
+
|
|
239
|
+
post = posts(:owned_by_editor)
|
|
240
|
+
get :edit, { :id => post.id }
|
|
241
|
+
assert_response :success
|
|
242
|
+
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def test_should_verify_editor_cannot_edit_other_users_records
|
|
246
|
+
|
|
247
|
+
@request.env['HTTP_REFERER'] = '/admin/posts'
|
|
248
|
+
|
|
249
|
+
typus_user = typus_users(:editor)
|
|
250
|
+
@request.session[:typus_user_id] = typus_user.id
|
|
251
|
+
|
|
252
|
+
post = posts(:owned_by_admin)
|
|
253
|
+
get :edit, { :id => post.id }
|
|
254
|
+
assert_response :redirect
|
|
255
|
+
assert_redirected_to '/admin/posts'
|
|
256
|
+
assert flash[:notice]
|
|
257
|
+
assert_equal "You don't have permission to access this item.", flash[:notice]
|
|
258
|
+
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
end
|