From 32788f40f920f1745e541a7cf7c4b04826701119 Mon Sep 17 00:00:00 2001 From: Leandro Nunes dos Santos Date: Tue, 29 Dec 2015 10:30:52 -0300 Subject: [PATCH] efactor with_role person scope to works properly as rails4 scope --- app/models/person.rb | 5 +++++ plugins/people_block/lib/ext/person.rb | 10 ---------- plugins/people_block/test/unit/members_block_test.rb | 15 +++++++++++++++ test/unit/person_test.rb | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 10 deletions(-) delete mode 100644 plugins/people_block/lib/ext/person.rb diff --git a/app/models/person.rb b/app/models/person.rb index db49f9f..1bc4b7a 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -129,6 +129,11 @@ class Person < Profile scope :activated, -> { joins(:user).where('users.activation_code IS NULL AND users.activated_at IS NOT NULL') } scope :deactivated, -> { joins(:user).where('NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)') } + scope :with_role, -> role_id { + distinct.joins(:role_assignments). + where("role_assignments.role_id = #{role_id}") + } + after_destroy do |person| Friendship.where(friend_id: person.id).each{ |friendship| friendship.destroy } end diff --git a/plugins/people_block/lib/ext/person.rb b/plugins/people_block/lib/ext/person.rb deleted file mode 100644 index 03ccddf..0000000 --- a/plugins/people_block/lib/ext/person.rb +++ /dev/null @@ -1,10 +0,0 @@ -require_dependency 'person' - -class Person - - scope :with_role, -> role_id { - select('DISTINCT profiles.*').joins(:role_assignments). - where("role_assignments.role_id = #{role_id}") - } - -end diff --git a/plugins/people_block/test/unit/members_block_test.rb b/plugins/people_block/test/unit/members_block_test.rb index 998d52d..e203148 100644 --- a/plugins/people_block/test/unit/members_block_test.rb +++ b/plugins/people_block/test/unit/members_block_test.rb @@ -272,6 +272,21 @@ class MembersBlockTest < ActionView::TestCase assert_includes block.roles, Profile::Roles.moderator(owner.environment.id) end + should 'count number of profiles by role' do + owner = fast_create(Community) + profile1 = fast_create(Person, {:public_profile => true}) + profile2 = fast_create(Person, {:public_profile => true}) + + owner.add_member profile2 + owner.add_moderator profile1 + + block = MembersBlock.new + block.visible_role = Profile::Roles.moderator(owner.environment.id).key + block.expects(:owner).returns(owner).at_least_once + + assert_equal 1, block.profile_count + end + protected include NoosferoTestHelper diff --git a/test/unit/person_test.rb b/test/unit/person_test.rb index 31ef09c..a424d31 100644 --- a/test/unit/person_test.rb +++ b/test/unit/person_test.rb @@ -1838,4 +1838,92 @@ class PersonTest < ActiveSupport::TestCase assert_equivalent [c1,c3], p1.comments end + should 'get people of one community by moderator role' do + community = fast_create(Community) + p1 = fast_create(Person) + p2 = fast_create(Person) + + community.add_member p1 + community.add_moderator p2 + + assert_equivalent [p2], Person.with_role(Profile::Roles.moderator(community.environment.id).id) + end + + should 'get people of one community by admin role' do + community = fast_create(Community) + p1 = fast_create(Person) + p2 = fast_create(Person) + + community.add_admin p1 + community.add_member p2 + + assert_equivalent [p1], Person.with_role(Profile::Roles.admin(community.environment.id).id) + end + + should 'get people with admin role of any community' do + c1 = fast_create(Community) + p1 = fast_create(Person) + p2 = fast_create(Person) + c1.add_admin p1 + c1.add_member p2 + + c2 = fast_create(Community) + p3 = fast_create(Person) + p4 = fast_create(Person) + + c2.add_admin p4 + c2.add_member p3 + + assert_equivalent [p1, p4], Person.with_role(Profile::Roles.admin(c1.environment.id).id) + end + + should 'get distinct people with moderator role of any community' do + c1 = fast_create(Community) + p1 = fast_create(Person) + p2 = fast_create(Person) + c1.add_member p1 + c1.add_moderator p2 + + c2 = fast_create(Community) + p3 = fast_create(Person) + p4 = fast_create(Person) + + c2.add_member p4 + c2.add_moderator p3 + c2.add_moderator p2 + + assert_equivalent [p2, p3], Person.with_role(Profile::Roles.moderator(c1.environment.id).id) + end + + should 'count members of a community collected by moderator' do + c1 = fast_create(Community) + p1 = fast_create(Person) + p2 = fast_create(Person) + p3 = fast_create(Person) + c1.add_member p1 + c1.add_moderator p2 + c1.add_member p3 + + assert_equal 1, c1.members.with_role(Profile::Roles.moderator(c1.environment.id).id).count + end + + should 'count people of any community collected by moderator' do + c1 = fast_create(Community) + p1 = fast_create(Person) + p2 = fast_create(Person) + c1.add_member p1 + c1.add_moderator p2 + + c2 = fast_create(Community) + p3 = fast_create(Person) + p4 = fast_create(Person) + + c2.add_member p4 + c2.add_moderator p3 + c2.add_moderator p2 + + assert_equal 2, Person.with_role(Profile::Roles.moderator(c1.environment.id).id).count + end + + end -- libgit2 0.21.2