Commit 180a4d9db964fdc1914446accc752027a12d24f3
1 parent
f639512c
Exists in
master
and in
28 other branches
ActionItem3: properly saving features
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@87 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
81 additions
and
22 deletions
Show diff stats
app/controllers/application.rb
app/controllers/features_controller.rb
| ... | ... | @@ -2,6 +2,14 @@ class FeaturesController < ApplicationController |
| 2 | 2 | acts_as_virtual_community_admin_controller |
| 3 | 3 | |
| 4 | 4 | def index |
| 5 | - @features = VirtualCommunity::EXISTING_FEATURES | |
| 5 | + @features = VirtualCommunity.available_features | |
| 6 | 6 | end |
| 7 | + | |
| 8 | + def update | |
| 9 | + @virtual_community.enabled_features = params[:features].keys | |
| 10 | + @virtual_community.save! | |
| 11 | + flash[:notice] = _('Features updated successfully.') | |
| 12 | + redirect_to :action => 'index' | |
| 13 | + end | |
| 14 | + | |
| 7 | 15 | end | ... | ... |
app/models/virtual_community.rb
| 1 | 1 | class VirtualCommunity < ActiveRecord::Base |
| 2 | 2 | |
| 3 | - # TODO: these are test features | |
| 4 | - EXISTING_FEATURES = { | |
| 5 | - 'feature1' => _('Enable Feature 1'), | |
| 6 | - 'feature2' => _('Enable Feature 2'), | |
| 7 | - 'feature3' => _('Enable Feature 3'), | |
| 8 | - } | |
| 3 | + # returns the available features for a VirtualCommunity, in the form of a | |
| 4 | + # hash, with pairs in the form <tt>'feature_name' => 'Feature name'</tt>. | |
| 5 | + def self.available_features | |
| 6 | + { | |
| 7 | + 'some_feature' => _('Some feature'), | |
| 8 | + 'other_feature' => _('Other feature'), | |
| 9 | + } | |
| 10 | + end | |
| 9 | 11 | |
| 10 | 12 | # ################################################# |
| 11 | 13 | # Relationships and applied behaviour |
| ... | ... | @@ -35,6 +37,16 @@ class VirtualCommunity < ActiveRecord::Base |
| 35 | 37 | def enabled?(feature) |
| 36 | 38 | self.settings["#{feature}_enabled"] == true |
| 37 | 39 | end |
| 40 | + | |
| 41 | + def enabled_features=(features) | |
| 42 | + self.class.available_features.keys.each do |feature| | |
| 43 | + if features.include? feature | |
| 44 | + self.enable(feature) | |
| 45 | + else | |
| 46 | + self.disable(feature) | |
| 47 | + end | |
| 48 | + end | |
| 49 | + end | |
| 38 | 50 | |
| 39 | 51 | # ################################################# |
| 40 | 52 | # Validations | ... | ... |
| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | +<table> | |
| 2 | + <% form_tag({:action => 'update'}) do %> | |
| 3 | + <% @features.each do |feature, text| %> | |
| 4 | + <tr> | |
| 5 | + <td><%= text %></td> | |
| 6 | + <td><%= check_box_tag "features[#{feature}]", '1', @virtual_community.enabled?(feature) %></td> | |
| 7 | + </tr> | |
| 8 | + <% end %> | |
| 9 | + <tr><td colspan='2'><%= submit_tag %></td></tr> | |
| 10 | + <% end %> | |
| 11 | +</table> | ... | ... |
app/views/features/index.rhtml
| 1 | 1 | <h2><%= _('Enable/Disable features') %></h2> |
| 2 | 2 | |
| 3 | -<table> | |
| 4 | - <% form_tag({:action => 'update_features'}) do %> | |
| 5 | - <% @features.each do |feature, text| %> | |
| 6 | - <tr> | |
| 7 | - <td><%= text %></td> | |
| 8 | - <td><%= check_box_tag "feature[#{feature}]" %></td> | |
| 9 | - </tr> | |
| 10 | - <% end %> | |
| 11 | - <tr><td colspan='2'><%= submit_tag %></td></tr> | |
| 12 | - <% end %> | |
| 13 | -</table> | |
| 3 | +<%= render :partial => 'features_table' %> | ... | ... |
test/functional/features_controller_test.rb
| ... | ... | @@ -5,23 +5,30 @@ require 'features_controller' |
| 5 | 5 | class FeaturesController; def rescue_action(e) raise e end; end |
| 6 | 6 | |
| 7 | 7 | class FeaturesControllerTest < Test::Unit::TestCase |
| 8 | + | |
| 9 | + fixtures :virtual_communities | |
| 10 | + | |
| 8 | 11 | def setup |
| 9 | 12 | @controller = FeaturesController.new |
| 10 | 13 | @request = ActionController::TestRequest.new |
| 11 | 14 | @response = ActionController::TestResponse.new |
| 15 | + uses_host 'anhetegua.net' | |
| 12 | 16 | end |
| 13 | 17 | |
| 14 | 18 | def test_listing_features |
| 15 | 19 | get :index |
| 16 | 20 | assert_template 'index' |
| 17 | - VirtualCommunity::EXISTING_FEATURES.each do |feature, text| | |
| 18 | - assert_tag(:tag => 'input', :attributes => { :type => 'checkbox', :name => "feature[#{feature}]" }) | |
| 21 | + VirtualCommunity.available_features.each do |feature, text| | |
| 22 | + assert_tag(:tag => 'input', :attributes => { :type => 'checkbox', :name => "features[#{feature}]" }) | |
| 19 | 23 | end |
| 20 | 24 | end |
| 21 | 25 | |
| 22 | 26 | def test_update_features |
| 23 | - # flunk 'Not implemented yet' | |
| 24 | - assert true | |
| 27 | + get :update, :features => { 'feature1' => '1', 'feature2' => '1' } | |
| 28 | + assert_redirected_to :action => 'index' | |
| 29 | + 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') | |
| 25 | 32 | end |
| 26 | 33 | |
| 27 | 34 | end | ... | ... |
| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | +require 'app/models/virtual_community' | |
| 2 | + | |
| 3 | +class VirtualCommunity < ActiveRecord::Base | |
| 4 | + def self.available_features | |
| 5 | + { | |
| 6 | + 'feature1' => 'Enable Feature 1', | |
| 7 | + 'feature2' => 'Enable Feature 2', | |
| 8 | + 'feature3' => 'Enable Feature 3', | |
| 9 | + } | |
| 10 | + end | |
| 11 | +end | ... | ... |
test/unit/virtual_community_test.rb
| ... | ... | @@ -26,6 +26,10 @@ class VirtualCommunityTest < Test::Unit::TestCase |
| 26 | 26 | assert_kind_of ConfigurableSetting, vc.settings.first |
| 27 | 27 | end |
| 28 | 28 | |
| 29 | + def test_available_features | |
| 30 | + assert_kind_of Hash, VirtualCommunity.available_features | |
| 31 | + end | |
| 32 | + | |
| 29 | 33 | def test_features |
| 30 | 34 | v = virtual_communities(:colivre_net) |
| 31 | 35 | v.enable('feature1') |
| ... | ... | @@ -34,4 +38,19 @@ class VirtualCommunityTest < Test::Unit::TestCase |
| 34 | 38 | assert !v.enabled?('feature1') |
| 35 | 39 | end |
| 36 | 40 | |
| 41 | + def test_enabled_features | |
| 42 | + v = virtual_communities(:colivre_net) | |
| 43 | + v.enabled_features = [ 'feature1', 'feature2' ] | |
| 44 | + assert v.enabled?('feature1') && v.enabled?('feature2') && !v.enabled?('feature3') | |
| 45 | + end | |
| 46 | + | |
| 47 | + def test_name_is_mandatory | |
| 48 | + v = VirtualCommunity.new | |
| 49 | + v.valid? | |
| 50 | + assert v.errors.invalid?(:name) | |
| 51 | + v.name = 'blablabla' | |
| 52 | + v.valid? | |
| 53 | + assert !v.errors.invalid?(:name) | |
| 54 | + end | |
| 55 | + | |
| 37 | 56 | end | ... | ... |