Commit 2a4c443ad8e7bfa029bcb7e7f7441a8835972d60
1 parent
04bbb571
Exists in
master
and in
29 other branches
Exporting users from environment as XML and CSV
(ActionItem1605)
Showing
11 changed files
with
120 additions
and
1 deletions
Show diff stats
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +class UsersController < AdminController | ||
2 | + | ||
3 | + protect 'manage_environment_users', :environment | ||
4 | + | ||
5 | + def index | ||
6 | + @users = environment.users | ||
7 | + respond_to do |format| | ||
8 | + format.html | ||
9 | + format.xml do | ||
10 | + render :xml => @users.to_xml( | ||
11 | + :skip_types => true, | ||
12 | + :only => %w[email login created_at updated_at], | ||
13 | + :include => { :person => {:only => %w[name updated_at created_at address birth_date contact_phone identifier lat lng] } } | ||
14 | + ) | ||
15 | + end | ||
16 | + format.csv do | ||
17 | + render :template => "users/index_csv.rhtml", :content_type => 'text/csv', :layout => false | ||
18 | + end | ||
19 | + end | ||
20 | + end | ||
21 | + | ||
22 | +end |
app/models/environment.rb
@@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
3 | # domains. | 3 | # domains. |
4 | class Environment < ActiveRecord::Base | 4 | class Environment < ActiveRecord::Base |
5 | 5 | ||
6 | + has_many :users | ||
7 | + | ||
6 | self.partial_updates = false | 8 | self.partial_updates = false |
7 | 9 | ||
8 | has_many :tasks, :dependent => :destroy, :as => 'target' | 10 | has_many :tasks, :dependent => :destroy, :as => 'target' |
@@ -14,6 +16,7 @@ class Environment < ActiveRecord::Base | @@ -14,6 +16,7 @@ class Environment < ActiveRecord::Base | ||
14 | 'manage_environment_categories' => N_('Manage environment categories'), | 16 | 'manage_environment_categories' => N_('Manage environment categories'), |
15 | 'manage_environment_roles' => N_('Manage environment roles'), | 17 | 'manage_environment_roles' => N_('Manage environment roles'), |
16 | 'manage_environment_validators' => N_('Manage environment validators'), | 18 | 'manage_environment_validators' => N_('Manage environment validators'), |
19 | + 'manage_environment_users' => N_('Manage environment users'), | ||
17 | } | 20 | } |
18 | 21 | ||
19 | module Roles | 22 | module Roles |
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +<%= user_csv.name %>;<%= user_csv.email %> |
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +<%= _('Not implemented yet!') %> |
config/routes.rb
@@ -93,6 +93,7 @@ ActionController::Routing::Routes.draw do |map| | @@ -93,6 +93,7 @@ ActionController::Routing::Routes.draw do |map| | ||
93 | ###################################################### | 93 | ###################################################### |
94 | # administrative tasks for a environment | 94 | # administrative tasks for a environment |
95 | map.admin 'admin', :controller => 'admin_panel' | 95 | map.admin 'admin', :controller => 'admin_panel' |
96 | + map.admin 'admin/:controller.:format/:action/:id', :controller => Noosfero.pattern_for_controllers_in_directory('admin') | ||
96 | map.admin 'admin/:controller/:action/:id', :controller => Noosfero.pattern_for_controllers_in_directory('admin') | 97 | map.admin 'admin/:controller/:action/:id', :controller => Noosfero.pattern_for_controllers_in_directory('admin') |
97 | 98 | ||
98 | 99 |
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +Feature: export users | ||
2 | + As an administrator | ||
3 | + I want to export user from my environment | ||
4 | + | ||
5 | + Background: | ||
6 | + Given the following user | ||
7 | + | login | | ||
8 | + | ultraje | | ||
9 | + | ||
10 | + Scenario: Manage users not implemented yet | ||
11 | + Given I am logged in as admin | ||
12 | + When I go to /admin/users | ||
13 | + Then I should see "Not implemented yet!" | ||
14 | + | ||
15 | + Scenario: Export users as XML | ||
16 | + Given I am logged in as admin | ||
17 | + When I go to /admin/users.xml | ||
18 | + Then I should see "ultraje" | ||
19 | + | ||
20 | + Scenario: Export users as CSV | ||
21 | + Given I am logged in as admin | ||
22 | + When I go to /admin/users.csv | ||
23 | + Then I should see "name;email" | ||
24 | + And I should see "ultraje" | ||
25 | + | ||
26 | + Scenario: Cant access as normal user | ||
27 | + Given I am logged in as "ultraje" | ||
28 | + When I go to /admin/users | ||
29 | + Then I should see "Access denied" |
test/factories.rb
@@ -56,7 +56,7 @@ module Noosfero::Factory | @@ -56,7 +56,7 @@ module Noosfero::Factory | ||
56 | ###### old stuff to be rearranged | 56 | ###### old stuff to be rearranged |
57 | def create_admin_user(env) | 57 | def create_admin_user(env) |
58 | admin_user = User.find_by_login('adminuser') || create_user('adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser', :environment => env) | 58 | admin_user = User.find_by_login('adminuser') || create_user('adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser', :environment => env) |
59 | - admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators']) | 59 | + admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators', 'manage_environment_users']) |
60 | RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env]) | 60 | RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env]) |
61 | admin_user.login | 61 | admin_user.login |
62 | end | 62 | end |
test/fixtures/roles.yml
@@ -33,6 +33,7 @@ four: | @@ -33,6 +33,7 @@ four: | ||
33 | - manage_environment_validators | 33 | - manage_environment_validators |
34 | - moderate_comments | 34 | - moderate_comments |
35 | - perform_task | 35 | - perform_task |
36 | + - manage_environment_users | ||
36 | profile_admin: | 37 | profile_admin: |
37 | id: 5 | 38 | id: 5 |
38 | environment_id: 1 | 39 | environment_id: 1 |
@@ -84,3 +85,4 @@ environment_administrator: | @@ -84,3 +85,4 @@ environment_administrator: | ||
84 | - manage_environment_roles | 85 | - manage_environment_roles |
85 | - manage_environment_validators | 86 | - manage_environment_validators |
86 | - moderate_comments | 87 | - moderate_comments |
88 | + - manage_environment_users |
@@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | +require 'users_controller' | ||
3 | + | ||
4 | +# Re-raise errors caught by the controller. | ||
5 | +class UsersController; def rescue_action(e) raise e end; end | ||
6 | + | ||
7 | +class UsersControllerTest < Test::Unit::TestCase | ||
8 | + | ||
9 | + all_fixtures | ||
10 | + def setup | ||
11 | + @controller = UsersController.new | ||
12 | + @request = ActionController::TestRequest.new | ||
13 | + @request.stubs(:ssl?).returns(true) | ||
14 | + @response = ActionController::TestResponse.new | ||
15 | + end | ||
16 | + | ||
17 | + should 'not access without right permission' do | ||
18 | + get :index | ||
19 | + assert_response 403 # forbidden | ||
20 | + end | ||
21 | + | ||
22 | + should 'grant access with right permission' do | ||
23 | + admin_user = create_user_with_permission('admin_user', 'manage_environment_users', Environment.default) | ||
24 | + login_as('admin_user') | ||
25 | + | ||
26 | + get :index | ||
27 | + assert_response :success | ||
28 | + end | ||
29 | + | ||
30 | + should 'response as XML to export users' do | ||
31 | + admin_user = create_user_with_permission('admin_user', 'manage_environment_users', Environment.default) | ||
32 | + login_as('admin_user') | ||
33 | + | ||
34 | + get :index, :format => 'xml' | ||
35 | + assert_equal 'application/xml', @response.content_type | ||
36 | + end | ||
37 | + | ||
38 | + should 'response as CSV to export users' do | ||
39 | + admin_user = create_user_with_permission('admin_user', 'manage_environment_users', Environment.default) | ||
40 | + login_as('admin_user') | ||
41 | + | ||
42 | + get :index, :format => 'csv' | ||
43 | + assert_equal 'text/csv', @response.content_type | ||
44 | + end | ||
45 | + | ||
46 | +end |
test/unit/environment_test.rb
@@ -993,4 +993,16 @@ class EnvironmentTest < Test::Unit::TestCase | @@ -993,4 +993,16 @@ class EnvironmentTest < Test::Unit::TestCase | ||
993 | assert_equal 'another', env.theme | 993 | assert_equal 'another', env.theme |
994 | end | 994 | end |
995 | 995 | ||
996 | + should 'has many users' do | ||
997 | + user_from_other_environment = create_user('one user from other env', :environment => Environment.default) | ||
998 | + env = fast_create(Environment) | ||
999 | + user_from_this_environment1 = create_user('one user', :environment => env) | ||
1000 | + user_from_this_environment2 = create_user('another user', :environment => env) | ||
1001 | + user_from_this_environment3 = create_user('some other user', :environment => env) | ||
1002 | + assert_includes env.users, user_from_this_environment1 | ||
1003 | + assert_includes env.users, user_from_this_environment2 | ||
1004 | + assert_includes env.users, user_from_this_environment3 | ||
1005 | + assert_not_includes env.users, user_from_other_environment | ||
1006 | + end | ||
1007 | + | ||
996 | end | 1008 | end |