Commit 2a4c443ad8e7bfa029bcb7e7f7441a8835972d60
1 parent
04bbb571
Exists in
staging
and in
42 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 | ... | ... |