Commit 4f51c61bd4122ad52f69e71ee393b6f17f7d9e26
1 parent
d8dd8aca
Exists in
master
and in
29 other branches
ActionItem3: saving features
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@93 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
73 additions
and
6 deletions
Show diff stats
app/controllers/application.rb
@@ -84,4 +84,10 @@ class ApplicationController < ActionController::Base | @@ -84,4 +84,10 @@ class ApplicationController < ActionController::Base | ||
84 | # TODO: check access control | 84 | # TODO: check access control |
85 | end | 85 | end |
86 | 86 | ||
87 | + # declares that the given <tt>actions</tt> cannot be accessed by other HTTP | ||
88 | + # method besides POST. | ||
89 | + def self.post_only(actions, redirect = { :action => 'index'}) | ||
90 | + verify :method => :post, :only => actions, :redirect_to => redirect | ||
91 | + end | ||
92 | + | ||
87 | end | 93 | end |
app/controllers/features_controller.rb
@@ -5,8 +5,14 @@ class FeaturesController < ApplicationController | @@ -5,8 +5,14 @@ class FeaturesController < ApplicationController | ||
5 | @features = VirtualCommunity.available_features | 5 | @features = VirtualCommunity.available_features |
6 | end | 6 | end |
7 | 7 | ||
8 | + post_only :update | ||
8 | def update | 9 | def update |
9 | - @virtual_community.enabled_features = params[:features].keys | 10 | + features = if params[:features].nil? |
11 | + [] | ||
12 | + else | ||
13 | + params[:features].keys | ||
14 | + end | ||
15 | + @virtual_community.enabled_features = features | ||
10 | @virtual_community.save! | 16 | @virtual_community.save! |
11 | flash[:notice] = _('Features updated successfully.') | 17 | flash[:notice] = _('Features updated successfully.') |
12 | redirect_to :action => 'index' | 18 | redirect_to :action => 'index' |
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | +require 'test_controller' | ||
3 | + | ||
4 | +# Re-raise errors caught by the controller. | ||
5 | +class TestController; def rescue_action(e) raise e end; end | ||
6 | + | ||
7 | +class ApplicationControllerTest < Test::Unit::TestCase | ||
8 | + | ||
9 | + fixtures :profiles, :virtual_communities, :domains | ||
10 | + | ||
11 | + def setup | ||
12 | + @controller = TestController.new | ||
13 | + @request = ActionController::TestRequest.new | ||
14 | + @response = ActionController::TestResponse.new | ||
15 | + end | ||
16 | + | ||
17 | + def test_get_against_post_only | ||
18 | + get :post_only | ||
19 | + assert_redirected_to :action => 'index' | ||
20 | + end | ||
21 | + def test_post_against_post_only | ||
22 | + post :post_only | ||
23 | + assert_response :success | ||
24 | + assert_tag :tag => 'span', :content => 'post_only' | ||
25 | + end | ||
26 | + | ||
27 | +end |
test/functional/features_controller_test.rb
@@ -12,10 +12,10 @@ class FeaturesControllerTest < Test::Unit::TestCase | @@ -12,10 +12,10 @@ class FeaturesControllerTest < Test::Unit::TestCase | ||
12 | @controller = FeaturesController.new | 12 | @controller = FeaturesController.new |
13 | @request = ActionController::TestRequest.new | 13 | @request = ActionController::TestRequest.new |
14 | @response = ActionController::TestResponse.new | 14 | @response = ActionController::TestResponse.new |
15 | - uses_host 'anhetegua.net' | ||
16 | end | 15 | end |
17 | 16 | ||
18 | def test_listing_features | 17 | def test_listing_features |
18 | + uses_host 'anhetegua.net' | ||
19 | get :index | 19 | get :index |
20 | assert_template 'index' | 20 | assert_template 'index' |
21 | VirtualCommunity.available_features.each do |feature, text| | 21 | VirtualCommunity.available_features.each do |feature, text| |
@@ -23,12 +23,32 @@ class FeaturesControllerTest < Test::Unit::TestCase | @@ -23,12 +23,32 @@ class FeaturesControllerTest < Test::Unit::TestCase | ||
23 | end | 23 | end |
24 | end | 24 | end |
25 | 25 | ||
26 | - def test_update_features | ||
27 | - get :update, :features => { 'feature1' => '1', 'feature2' => '1' } | 26 | + def test_update |
27 | + uses_host 'anhetegua.net' | ||
28 | + post :update, :features => { 'feature1' => '1', 'feature2' => '1' } | ||
29 | + assert_redirected_to :action => 'index' | ||
30 | + assert_kind_of String, flash[:notice] | ||
31 | + v = VirtualCommunity.find(virtual_communities(:anhetegua_net).id) | ||
32 | + assert v.enabled?('feature2') | ||
33 | + assert v.enabled?('feature2') | ||
34 | + assert !v.enabled?('feature3') | ||
35 | + end | ||
36 | + | ||
37 | + def test_update_disable_all | ||
38 | + uses_host 'anhetegua.net' | ||
39 | + post :update # no features | ||
28 | assert_redirected_to :action => 'index' | 40 | assert_redirected_to :action => 'index' |
29 | assert_kind_of String, flash[:notice] | 41 | assert_kind_of String, flash[:notice] |
30 | - v = VirtualCommunity.find(virtual_communities(:colivre_net).id) | ||
31 | - assert v.enabled?('feature1') && v.enabled?('feature2') && !v.enabled?('feature3') | 42 | + v = VirtualCommunity.find(virtual_communities(:anhetegua_net).id) |
43 | + assert !v.enabled?('feature1') | ||
44 | + assert !v.enabled?('feature2') | ||
45 | + assert !v.enabled?('feature3') | ||
46 | + end | ||
47 | + | ||
48 | + def test_update_no_post | ||
49 | + uses_host 'anhetegua.net' | ||
50 | + get :update | ||
51 | + assert_redirected_to :action => 'index' | ||
32 | end | 52 | end |
33 | 53 | ||
34 | end | 54 | end |
test/mocks/test/test_controller.rb