From 318505132d9a9715f707c17f3614adce936627e6 Mon Sep 17 00:00:00 2001 From: Michel Felipe Date: Thu, 19 Mar 2015 17:37:23 -0300 Subject: [PATCH] Refactory add_members() profile method and break them into two methods. Created functional test to this refactory --- app/models/profile.rb | 29 +++++++++++++---------------- lib/add_members_job.rb | 7 ++++++- test/functional/invite_controller_test.rb | 31 ++++++++++++++++++++++++------- vendor/plugins/access_control/lib/acts_as_accessible.rb | 4 ++-- 4 files changed, 45 insertions(+), 26 deletions(-) diff --git a/app/models/profile.rb b/app/models/profile.rb index db990e7..c2e13f2 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -665,29 +665,26 @@ private :generate_url, :url_options end end - # Adds many people to profile by id's or email's - def add_members(people_ids) + # Adds many people to profile by id's + def add_members_by_id(people_ids) unless people_ids.nil? && people_ids.empty? - people = [] - if people_ids.first =~ /\@/ - people = User.where(email: people_ids) - else - people = Person.where(id: people_ids) + people = Person.where(id: people_ids) + people.each do |person| + + add_member(person) unless person.is_member_of?(self) end + end + end - people.each do |profile| - person = profile + # Adds many people to profile by email's + def add_members_by_email(people_emails) - if profile.is_a? User - person = profile.person - end + people = User.where(email: people_emails) + people.each do |user| - unless person.is_member_of?(self) - add_member person - end - end + add_member(user.person) unless user.person.is_member_of?(self) end end diff --git a/lib/add_members_job.rb b/lib/add_members_job.rb index a6bb20e..83695f1 100644 --- a/lib/add_members_job.rb +++ b/lib/add_members_job.rb @@ -4,7 +4,12 @@ class AddMembersJob < Struct.new(:people_ids, :profile_id, :locale) Noosfero.with_locale(locale) do profile = Profile.find(profile_id) - profile.add_members people_ids + + if people_ids.first =~ /\@/ + profile.add_members_by_email people_ids + else + profile.add_members_by_id people_ids + end end end diff --git a/test/functional/invite_controller_test.rb b/test/functional/invite_controller_test.rb index 83a002f..71c3783 100644 --- a/test/functional/invite_controller_test.rb +++ b/test/functional/invite_controller_test.rb @@ -284,11 +284,6 @@ class InviteControllerTest < ActionController::TestCase assert_empty json_response end - #@todo Copy this test and create a another version - #of this, for test add members in a community - #logged as admin of environment! - # #issue227 - # should 'invite registered users through profile id' do friend1 = create_user('testuser1').person friend2 = create_user('testuser2').person @@ -302,7 +297,7 @@ class InviteControllerTest < ActionController::TestCase end end - should 'add registered users imediatly instead invite if logged user is a environment admin' do + should 'add registered users by id imediatly instead invite if logged user is a environment admin' do #Add user like a environment admin Environment.default.add_admin profile @@ -313,7 +308,29 @@ class InviteControllerTest < ActionController::TestCase assert_difference 'Delayed::Job.count', 1 do assert_equal 0,community.members.count - post :invite_registered_friend, :profile => @community.identifier, :q => [friend1.id,friend2.id] + post :invite_registered_friend, :profile => @community.identifier, :q => "#{friend1.id},#{friend2.id}" + + assert_response :redirect + assert_redirected_to :controller => 'profile', :action => 'members' + end + + Delayed::Worker.new.run(Delayed::Job.last) + + assert_equal 2,community.members.count + + end + + should 'add registered users by email imediatly instead invite if logged user is a environment admin' do + + Environment.default.add_admin profile + + friend1 = create_user('testuser1', {email: 'friend1@test.com.br'}) + friend2 = create_user('testuser2', {email: 'friend2@test.com.br'}) + + assert_difference 'Delayed::Job.count', 1 do + assert_equal 0,community.members.count + + post :invite_registered_friend, :profile => @community.identifier, :q => "#{friend1.email},#{friend2.email}" assert_response :redirect assert_redirected_to :controller => 'profile', :action => 'members' diff --git a/vendor/plugins/access_control/lib/acts_as_accessible.rb b/vendor/plugins/access_control/lib/acts_as_accessible.rb index de3ef37..6b0a1db 100644 --- a/vendor/plugins/access_control/lib/acts_as_accessible.rb +++ b/vendor/plugins/access_control/lib/acts_as_accessible.rb @@ -19,9 +19,9 @@ module ActsAsAccessible nil end - def affiliate(accessor, roles) + def affiliate(accessor, roles, attributes = {}) roles = [roles] unless roles.kind_of?(Array) - roles.map {|role| accessor.add_role(role, self)}.any? + roles.map {|role| accessor.add_role(role, self, attributes)}.any? end def disaffiliate(accessor, roles) -- libgit2 0.21.2