Commit 318505132d9a9715f707c17f3614adce936627e6

Authored by Michel Felipe
1 parent a70da834

Refactory add_members() profile method and break them into two methods. Created …

…functional test to this refactory
app/models/profile.rb
@@ -665,29 +665,26 @@ private :generate_url, :url_options @@ -665,29 +665,26 @@ private :generate_url, :url_options
665 end 665 end
666 end 666 end
667 667
668 - # Adds many people to profile by id's or email's  
669 - def add_members(people_ids) 668 + # Adds many people to profile by id's
  669 + def add_members_by_id(people_ids)
670 670
671 unless people_ids.nil? && people_ids.empty? 671 unless people_ids.nil? && people_ids.empty?
672 - people = []  
673 672
674 - if people_ids.first =~ /\@/  
675 - people = User.where(email: people_ids)  
676 - else  
677 - people = Person.where(id: people_ids) 673 + people = Person.where(id: people_ids)
  674 + people.each do |person|
  675 +
  676 + add_member(person) unless person.is_member_of?(self)
678 end 677 end
  678 + end
  679 + end
679 680
680 - people.each do |profile|  
681 - person = profile 681 + # Adds many people to profile by email's
  682 + def add_members_by_email(people_emails)
682 683
683 - if profile.is_a? User  
684 - person = profile.person  
685 - end 684 + people = User.where(email: people_emails)
  685 + people.each do |user|
686 686
687 - unless person.is_member_of?(self)  
688 - add_member person  
689 - end  
690 - end 687 + add_member(user.person) unless user.person.is_member_of?(self)
691 end 688 end
692 end 689 end
693 690
lib/add_members_job.rb
@@ -4,7 +4,12 @@ class AddMembersJob < Struct.new(:people_ids, :profile_id, :locale) @@ -4,7 +4,12 @@ class AddMembersJob < Struct.new(:people_ids, :profile_id, :locale)
4 Noosfero.with_locale(locale) do 4 Noosfero.with_locale(locale) do
5 5
6 profile = Profile.find(profile_id) 6 profile = Profile.find(profile_id)
7 - profile.add_members people_ids 7 +
  8 + if people_ids.first =~ /\@/
  9 + profile.add_members_by_email people_ids
  10 + else
  11 + profile.add_members_by_id people_ids
  12 + end
8 13
9 end 14 end
10 end 15 end
test/functional/invite_controller_test.rb
@@ -284,11 +284,6 @@ class InviteControllerTest < ActionController::TestCase @@ -284,11 +284,6 @@ class InviteControllerTest < ActionController::TestCase
284 assert_empty json_response 284 assert_empty json_response
285 end 285 end
286 286
287 - #@todo Copy this test and create a another version  
288 - #of this, for test add members in a community  
289 - #logged as admin of environment!  
290 - # #issue227  
291 - #  
292 should 'invite registered users through profile id' do 287 should 'invite registered users through profile id' do
293 friend1 = create_user('testuser1').person 288 friend1 = create_user('testuser1').person
294 friend2 = create_user('testuser2').person 289 friend2 = create_user('testuser2').person
@@ -302,7 +297,7 @@ class InviteControllerTest < ActionController::TestCase @@ -302,7 +297,7 @@ class InviteControllerTest < ActionController::TestCase
302 end 297 end
303 end 298 end
304 299
305 - should 'add registered users imediatly instead invite if logged user is a environment admin' do 300 + should 'add registered users by id imediatly instead invite if logged user is a environment admin' do
306 301
307 #Add user like a environment admin 302 #Add user like a environment admin
308 Environment.default.add_admin profile 303 Environment.default.add_admin profile
@@ -313,7 +308,29 @@ class InviteControllerTest < ActionController::TestCase @@ -313,7 +308,29 @@ class InviteControllerTest < ActionController::TestCase
313 assert_difference 'Delayed::Job.count', 1 do 308 assert_difference 'Delayed::Job.count', 1 do
314 assert_equal 0,community.members.count 309 assert_equal 0,community.members.count
315 310
316 - post :invite_registered_friend, :profile => @community.identifier, :q => [friend1.id,friend2.id] 311 + post :invite_registered_friend, :profile => @community.identifier, :q => "#{friend1.id},#{friend2.id}"
  312 +
  313 + assert_response :redirect
  314 + assert_redirected_to :controller => 'profile', :action => 'members'
  315 + end
  316 +
  317 + Delayed::Worker.new.run(Delayed::Job.last)
  318 +
  319 + assert_equal 2,community.members.count
  320 +
  321 + end
  322 +
  323 + should 'add registered users by email imediatly instead invite if logged user is a environment admin' do
  324 +
  325 + Environment.default.add_admin profile
  326 +
  327 + friend1 = create_user('testuser1', {email: 'friend1@test.com.br'})
  328 + friend2 = create_user('testuser2', {email: 'friend2@test.com.br'})
  329 +
  330 + assert_difference 'Delayed::Job.count', 1 do
  331 + assert_equal 0,community.members.count
  332 +
  333 + post :invite_registered_friend, :profile => @community.identifier, :q => "#{friend1.email},#{friend2.email}"
317 334
318 assert_response :redirect 335 assert_response :redirect
319 assert_redirected_to :controller => 'profile', :action => 'members' 336 assert_redirected_to :controller => 'profile', :action => 'members'
vendor/plugins/access_control/lib/acts_as_accessible.rb
@@ -19,9 +19,9 @@ module ActsAsAccessible @@ -19,9 +19,9 @@ module ActsAsAccessible
19 nil 19 nil
20 end 20 end
21 21
22 - def affiliate(accessor, roles) 22 + def affiliate(accessor, roles, attributes = {})
23 roles = [roles] unless roles.kind_of?(Array) 23 roles = [roles] unless roles.kind_of?(Array)
24 - roles.map {|role| accessor.add_role(role, self)}.any? 24 + roles.map {|role| accessor.add_role(role, self, attributes)}.any?
25 end 25 end
26 26
27 def disaffiliate(accessor, roles) 27 def disaffiliate(accessor, roles)