Commit 2a4c443ad8e7bfa029bcb7e7f7441a8835972d60

Authored by Joenio Costa
1 parent 04bbb571

Exporting users from environment as XML and CSV

(ActionItem1605)
app/controllers/admin/users_controller.rb 0 → 100644
... ... @@ -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 &lt; 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
... ...
app/views/users/_user_csv.rhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<%= user_csv.name %>;<%= user_csv.email %>
... ...
app/views/users/index.rhtml 0 → 100644
... ... @@ -0,0 +1 @@
  1 +<%= _('Not implemented yet!') %>
... ...
app/views/users/index_csv.rhtml 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +<%= _('name') %>;<%= _('email') %>
  2 +<%= render :partial => 'user_csv', :collection => @users %>
... ...
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  
... ...
features/export_users.feature 0 → 100644
... ... @@ -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
... ...
test/functional/users_controller_test.rb 0 → 100644
... ... @@ -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 &lt; 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
... ...