Commit 4f51c61bd4122ad52f69e71ee393b6f17f7d9e26
1 parent
d8dd8aca
Exists in
master
and in
23 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 | ... | ... |