Commit 2a4c443ad8e7bfa029bcb7e7f7441a8835972d60
1 parent
04bbb571
Exists in
master
and in
28 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 @@ |
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 | 3 | # domains. |
4 | 4 | class Environment < ActiveRecord::Base |
5 | 5 | |
6 | + has_many :users | |
7 | + | |
6 | 8 | self.partial_updates = false |
7 | 9 | |
8 | 10 | has_many :tasks, :dependent => :destroy, :as => 'target' |
... | ... | @@ -14,6 +16,7 @@ class Environment < ActiveRecord::Base |
14 | 16 | 'manage_environment_categories' => N_('Manage environment categories'), |
15 | 17 | 'manage_environment_roles' => N_('Manage environment roles'), |
16 | 18 | 'manage_environment_validators' => N_('Manage environment validators'), |
19 | + 'manage_environment_users' => N_('Manage environment users'), | |
17 | 20 | } |
18 | 21 | |
19 | 22 | module Roles | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +<%= user_csv.name %>;<%= user_csv.email %> | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +<%= _('Not implemented yet!') %> | ... | ... |
config/routes.rb
... | ... | @@ -93,6 +93,7 @@ ActionController::Routing::Routes.draw do |map| |
93 | 93 | ###################################################### |
94 | 94 | # administrative tasks for a environment |
95 | 95 | map.admin 'admin', :controller => 'admin_panel' |
96 | + map.admin 'admin/:controller.:format/:action/:id', :controller => Noosfero.pattern_for_controllers_in_directory('admin') | |
96 | 97 | map.admin 'admin/:controller/:action/:id', :controller => Noosfero.pattern_for_controllers_in_directory('admin') |
97 | 98 | |
98 | 99 | ... | ... |
... | ... | @@ -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 | 56 | ###### old stuff to be rearranged |
57 | 57 | def create_admin_user(env) |
58 | 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 | 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 | 61 | admin_user.login |
62 | 62 | end | ... | ... |
test/fixtures/roles.yml
... | ... | @@ -33,6 +33,7 @@ four: |
33 | 33 | - manage_environment_validators |
34 | 34 | - moderate_comments |
35 | 35 | - perform_task |
36 | + - manage_environment_users | |
36 | 37 | profile_admin: |
37 | 38 | id: 5 |
38 | 39 | environment_id: 1 |
... | ... | @@ -84,3 +85,4 @@ environment_administrator: |
84 | 85 | - manage_environment_roles |
85 | 86 | - manage_environment_validators |
86 | 87 | - moderate_comments |
88 | + - manage_environment_users | ... | ... |
... | ... | @@ -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 | 993 | assert_equal 'another', env.theme |
994 | 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 | 1008 | end | ... | ... |