From b21d7b44e2db09ea0118f6fea6697fc85aa1dd8a Mon Sep 17 00:00:00 2001 From: Henriette Darge Date: Thu, 23 Nov 2023 09:43:21 +0100 Subject: [PATCH] Rewrite inherited membership method --- .../share/user_details_component.rb | 8 +++-- .../share/user_details_component_spec.rb | 35 +++++++++++-------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/app/components/work_packages/share/user_details_component.rb b/app/components/work_packages/share/user_details_component.rb index f43fec09d0b8..a9c549c78530 100644 --- a/app/components/work_packages/share/user_details_component.rb +++ b/app/components/work_packages/share/user_details_component.rb @@ -98,9 +98,11 @@ def project_member? # Explicitly check whether the project membership was inherited by a group def inherited_project_member? - project_member? && - Member.where(user_id: GroupUser.where(user_id: user.id).map(&:group_id)).any? && - Member.where(user_id: user.id).any? + Member.includes(:roles) + .references(:member_roles) + .where(project: share.project, principal: user, entity: nil) # membership in the project + .merge(MemberRole.only_inherited) # that was inherited + .any? end def project_group? diff --git a/spec/components/work_packages/share/user_details_component_spec.rb b/spec/components/work_packages/share/user_details_component_spec.rb index 03b6df9bb9bc..b1337756d103 100644 --- a/spec/components/work_packages/share/user_details_component_spec.rb +++ b/spec/components/work_packages/share/user_details_component_spec.rb @@ -43,11 +43,11 @@ let(:invite_resent) { false } - def build_inherited_share(group_share:, user_share:) + def build_inherited_membership(group_membership:, user_membership:, role: work_package_role) create(:member_role, - member: user_share, - role: work_package_role, - inherited_from: group_share.member_roles.first.id) + member: user_membership, + role:, + inherited_from: group_membership.member_roles.first.id) end describe 'when not in manager mode' do @@ -176,7 +176,7 @@ def build_inherited_share(group_share:, user_share:) entity: work_package, roles: [work_package_role]) - build_inherited_share(group_share:, user_share: share) + build_inherited_membership(group_membership: group_share, user_membership: share) end context 'and the user is not a project member' do @@ -300,9 +300,7 @@ def build_inherited_share(group_share:, user_share:) end context 'when the user is a project member' do - before do - create(:member, project:, principal:, roles: [project_role]) - end + shared_let(:user_membership) { create(:member, project:, principal:, roles: [project_role]) } context 'and the user is not part of any group' do it do @@ -318,7 +316,12 @@ def build_inherited_share(group_share:, user_share:) context 'and the group is a project member itself' do before do - create(:member, project:, principal: group, roles: [project_role]) + group_membership = create(:member, + project:, + principal: group, + roles: [project_role]) + + build_inherited_membership(group_membership:, user_membership:, role: project_role) end context 'and the group is shared with' do @@ -328,7 +331,7 @@ def build_inherited_share(group_share:, user_share:) entity: work_package, roles: [work_package_role]) - build_inherited_share(group_share:, user_share: share) + build_inherited_membership(group_membership: group_share, user_membership: share) end it do @@ -359,7 +362,7 @@ def build_inherited_share(group_share:, user_share:) entity: work_package, roles: [work_package_role]) - build_inherited_share(group_share:, user_share: share) + build_inherited_membership(group_membership: group_share, user_membership: share) end it do @@ -399,8 +402,10 @@ def build_inherited_share(group_share:, user_share:) context 'and the group is a project member itself' do before do - create(:member, project:, principal: group, roles: [project_role]) - create(:member, project:, principal:, roles: [project_role]) + group_membership = create(:member, project:, principal: group, roles: [project_role]) + user_membership = create(:member, project:, principal:, roles: [project_role]) + + build_inherited_membership(group_membership:, user_membership:, role: project_role) end context 'and the group is shared with' do @@ -410,7 +415,7 @@ def build_inherited_share(group_share:, user_share:) entity: work_package, roles: [work_package_role]) - build_inherited_share(group_share:, user_share: share) + build_inherited_membership(group_membership: group_share, user_membership: share) end it do @@ -441,7 +446,7 @@ def build_inherited_share(group_share:, user_share:) entity: work_package, roles: [work_package_role]) - build_inherited_share(group_share:, user_share: share) + build_inherited_membership(group_membership: group_share, user_membership: share) end it do