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 | 84 | # TODO: check access control |
85 | 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 | 93 | end | ... | ... |
app/controllers/features_controller.rb
... | ... | @@ -5,8 +5,14 @@ class FeaturesController < ApplicationController |
5 | 5 | @features = VirtualCommunity.available_features |
6 | 6 | end |
7 | 7 | |
8 | + post_only :update | |
8 | 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 | 16 | @virtual_community.save! |
11 | 17 | flash[:notice] = _('Features updated successfully.') |
12 | 18 | redirect_to :action => 'index' | ... | ... |
... | ... | @@ -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 | 12 | @controller = FeaturesController.new |
13 | 13 | @request = ActionController::TestRequest.new |
14 | 14 | @response = ActionController::TestResponse.new |
15 | - uses_host 'anhetegua.net' | |
16 | 15 | end |
17 | 16 | |
18 | 17 | def test_listing_features |
18 | + uses_host 'anhetegua.net' | |
19 | 19 | get :index |
20 | 20 | assert_template 'index' |
21 | 21 | VirtualCommunity.available_features.each do |feature, text| |
... | ... | @@ -23,12 +23,32 @@ class FeaturesControllerTest < Test::Unit::TestCase |
23 | 23 | end |
24 | 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 | 40 | assert_redirected_to :action => 'index' |
29 | 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 | 52 | end |
33 | 53 | |
34 | 54 | end | ... | ... |