Commit 06b4d17aa5f84997438aae45addc2809efd3fd5d

Authored by AntonioTerceiro
1 parent d88e7095

ActionItem103: adding organizanization_approval_method for environment features



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@655 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/environment_admin/features_controller.rb
... ... @@ -8,15 +8,12 @@ class FeaturesController < EnvironmentAdminController
8 8  
9 9 post_only :update
10 10 def update
11   - features = if params[:features].nil?
12   - []
13   - else
14   - params[:features].keys
15   - end
16   - @environment.enabled_features = features
17   - @environment.save!
18   - flash[:notice] = _('Features updated successfully.')
19   - redirect_to :action => 'index'
  11 + if @environment.update_attributes(params[:environment])
  12 + flash[:notice] = _('Features updated successfully.')
  13 + redirect_to :action => 'index'
  14 + else
  15 + render :action => 'index'
  16 + end
20 17 end
21 18  
22 19 end
... ...
app/helpers/features_helper.rb
1 1 module FeaturesHelper
  2 + def select_organization_approval_method(object, method)
  3 + choices = [
  4 + [ _('Administrator must approve all new organizations'), 'admin'],
  5 + [ _('Administrator assigns validator organizations per region.'), 'region'],
  6 + ]
  7 + value = instance_variable_get("@#{object}").send(method).to_s
  8 + select_tag("#{object}[#{method}]", options_for_select(choices, value))
  9 + end
2 10 end
... ...
app/views/features/_features_table.rhtml
  1 +<% labelled_form_for(:environment, @environment, :url => {:action => 'update'}) do |f| %>
  2 +
1 3 <table>
2   - <% form_tag({:action => 'update'}) do %>
3 4 <% @features.each do |feature, text| %>
4 5 <tr>
5 6 <td><%= text %></td>
6   - <td><%= check_box_tag "features[#{feature}]", '1', @environment.enabled?(feature) %></td>
  7 + <td><%= check_box_tag "environment[enabled_features][]", feature, @environment.enabled?(feature) %></td>
7 8 </tr>
8 9 <% end %>
9   - <tr><td colspan='2'><%= submit_tag _('Save changes') %></td></tr>
10   - <% end %>
11 10 </table>
  11 +
  12 +<%= labelled_form_field(_('Organization Approval Method'), select_organization_approval_method('environment', 'organization_approval_method')) %>
  13 +
  14 +<div>
  15 + <%= submit_tag _('Save changes') %>
  16 +</div>
  17 +
  18 +<% end %>
... ...
test/functional/features_controller_test.rb
... ... @@ -19,13 +19,13 @@ class FeaturesControllerTest &lt; Test::Unit::TestCase
19 19 get :index
20 20 assert_template 'index'
21 21 Environment.available_features.each do |feature, text|
22   - assert_tag(:tag => 'input', :attributes => { :type => 'checkbox', :name => "features[#{feature}]" })
  22 + assert_tag(:tag => 'input', :attributes => { :type => 'checkbox', :name => "environment[enabled_features][]", :value => feature})
23 23 end
24 24 end
25 25  
26   - def test_update
  26 + def test_updates_enabled_features
27 27 uses_host 'anhetegua.net'
28   - post :update, :features => { 'feature1' => '1', 'feature2' => '1' }
  28 + post :update, :environment => { :enabled_features => [ 'feature1', 'feature2' ] }
29 29 assert_redirected_to :action => 'index'
30 30 assert_kind_of String, flash[:notice]
31 31 v = Environment.find(environments(:anhetegua_net).id)
... ... @@ -51,4 +51,24 @@ class FeaturesControllerTest &lt; Test::Unit::TestCase
51 51 assert_redirected_to :action => 'index'
52 52 end
53 53  
  54 + def test_updates_organization_approval_method
  55 + uses_host 'anhetegua.net'
  56 + post :update, :environment => { :organization_approval_method => 'region' }
  57 + assert_redirected_to :action => 'index'
  58 + assert_kind_of String, flash[:notice]
  59 + v = Environment.find(environments(:anhetegua_net).id)
  60 + assert_equal :region, v.organization_approval_method
  61 + end
  62 +
  63 + def test_should_mark_current_organization_approval_method_in_view
  64 + uses_host 'anhetegua.net'
  65 + Environment.find(environments(:anhetegua_net).id).update_attributes(:organization_approval_method => :region)
  66 +
  67 + post :index
  68 +
  69 + assert_tag :tag => 'select', :attributes => { :name => 'environment[organization_approval_method]' }, :descendant => { :tag => 'option', :attributes => { :value => 'region', :selected => true } }
  70 +
  71 +
  72 + end
  73 +
54 74 end
... ...
test/integration/enable_disable_features_test.rb
... ... @@ -9,9 +9,9 @@ class EnableDisableFeaturesTest &lt; ActionController::IntegrationTest
9 9  
10 10 get '/admin/features'
11 11 assert_response :success
12   - assert_tag :tag => 'input', :attributes => { :name => 'features[feature1]' }
13   - assert_tag :tag => 'input', :attributes => { :name => 'features[feature2]' }
14   - assert_tag :tag => 'input', :attributes => { :name => 'features[feature3]' }
  12 + assert_tag :tag => 'input', :attributes => { :name => 'environment[enabled_features][]', :value => 'feature1' }
  13 + assert_tag :tag => 'input', :attributes => { :name => 'environment[enabled_features][]', :value => 'feature2' }
  14 + assert_tag :tag => 'input', :attributes => { :name => 'environment[enabled_features][]', :value => 'feature3' }
15 15  
16 16 post '/admin/features/update'
17 17 assert_response :redirect
... ... @@ -20,7 +20,7 @@ class EnableDisableFeaturesTest &lt; ActionController::IntegrationTest
20 20 assert_response :success
21 21 assert_equal '/admin/features', path
22 22  
23   - post '/admin/features/update', :features => { 'feature1' => '1' }
  23 + post '/admin/features/update', :environments => { :enabled_features => [ 'feature1' ], :organization_approval_method => 'region' }
24 24 assert_response :redirect
25 25  
26 26 follow_redirect!
... ...