diff options
author | Michael Kozono <mkozono@gmail.com> | 2017-07-20 22:16:38 +0300 |
---|---|---|
committer | Michael Kozono <mkozono@gmail.com> | 2017-08-15 19:05:31 +0300 |
commit | dab1c7e61d8e020b4e57ca6cca887edf355c1026 (patch) | |
tree | bcfe6c83d81a547452273141015a75209b716ee5 | |
parent | 8a8c47f781b1c2a6865bb1e88212b7e99bb84e19 (diff) |
Replace requester with access_request
Refactoring. More accurate naming, and this will be especially the case after splitting access requests out of members.
-rw-r--r-- | app/services/members/approve_access_request_service.rb | 20 | ||||
-rw-r--r-- | lib/api/access_requests.rb | 12 | ||||
-rw-r--r-- | lib/api/entities.rb | 4 | ||||
-rw-r--r-- | spec/helpers/members_helper_spec.rb | 20 | ||||
-rw-r--r-- | spec/models/member_spec.rb | 40 |
5 files changed, 49 insertions, 47 deletions
diff --git a/app/services/members/approve_access_request_service.rb b/app/services/members/approve_access_request_service.rb index 4c935d28ad4..e923286a088 100644 --- a/app/services/members/approve_access_request_service.rb +++ b/app/services/members/approve_access_request_service.rb @@ -7,8 +7,8 @@ module Members # source - The source object that respond to `#access_requests` (i.g. project or group) # current_user - The user that performs the access request approval # params - A hash of parameters - # :user_id - User ID used to retrieve the access requester - # :id - Member ID used to retrieve the access requester + # :user_id - User ID used to retrieve the access request + # :id - Member ID used to retrieve the access request # :access_level - Optional access level set when the request is accepted def initialize(source, current_user, params = {}) @source = source @@ -20,22 +20,22 @@ module Members # :force - Bypass permission check: current_user can be nil in that case def execute(opts = {}) condition = params[:user_id] ? { user_id: params[:user_id] } : { id: params[:id] } - access_requester = source.access_requests.find_by!(condition) + access_request = source.access_requests.find_by!(condition) - raise Gitlab::Access::AccessDeniedError unless can_update_access_requester?(access_requester, opts) + raise Gitlab::Access::AccessDeniedError unless can_update_access_request?(access_request, opts) - access_requester.access_level = params[:access_level] if params[:access_level] - access_requester.accept_request + access_request.access_level = params[:access_level] if params[:access_level] + access_request.accept_request - access_requester + access_request end private - def can_update_access_requester?(access_requester, opts = {}) - access_requester && ( + def can_update_access_request?(access_request, opts = {}) + access_request && ( opts[:force] || - can?(current_user, action_member_permission(:update, access_requester), access_requester) + can?(current_user, action_member_permission(:update, access_request), access_request) ) end end diff --git a/lib/api/access_requests.rb b/lib/api/access_requests.rb index cc9bec12354..4ef8fc408a4 100644 --- a/lib/api/access_requests.rb +++ b/lib/api/access_requests.rb @@ -33,12 +33,12 @@ module API end post ":id/access_requests" do source = find_source(source_type, params[:id]) - access_requester = source.request_access(current_user) + access_request = source.request_access(current_user) - if access_requester.persisted? - present access_requester.user, with: Entities::AccessRequester, access_requester: access_requester + if access_request.persisted? + present access_request.user, with: Entities::AccessRequester, access_request: access_request else - render_validation_error!(access_requester) + render_validation_error!(access_request) end end @@ -47,7 +47,7 @@ module API success Entities::Member end params do - requires :user_id, type: Integer, desc: 'The user ID of the access requester' + requires :user_id, type: Integer, desc: 'The user ID of the access request' optional :access_level, type: Integer, desc: 'A valid access level (defaults: `30`, developer access level)' end put ':id/access_requests/:user_id/approve' do @@ -63,7 +63,7 @@ module API detail 'This feature was introduced in GitLab 8.11.' end params do - requires :user_id, type: Integer, desc: 'The user ID of the access requester' + requires :user_id, type: Integer, desc: 'The user ID of the access request' end delete ":id/access_requests/:user_id" do source = find_source(source_type, params[:id]) diff --git a/lib/api/entities.rb b/lib/api/entities.rb index dc2cacb6a4e..0ba04bd2c94 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -174,8 +174,8 @@ module API class AccessRequester < UserBasic expose :requested_at do |user, options| - access_requester = options[:access_requester] || options[:source].access_requests.find_by(user_id: user.id) - access_requester.requested_at + access_request = options[:access_request] || options[:source].access_requests.find_by(user_id: user.id) + access_request.requested_at end end diff --git a/spec/helpers/members_helper_spec.rb b/spec/helpers/members_helper_spec.rb index 33186cf50d5..1e6675b6843 100644 --- a/spec/helpers/members_helper_spec.rb +++ b/spec/helpers/members_helper_spec.rb @@ -14,35 +14,35 @@ describe MembersHelper do let(:project) { create(:project, :public, :access_requestable) } let(:project_member) { build(:project_member, project: project) } let(:project_member_invite) { build(:project_member, project: project).tap { |m| m.generate_invite_token! } } - let(:project_member_request) { project.request_access(requester) } + let(:project_access_request) { project.request_access(requester) } let(:group) { create(:group, :access_requestable) } let(:group_member) { build(:group_member, group: group) } let(:group_member_invite) { build(:group_member, group: group).tap { |m| m.generate_invite_token! } } - let(:group_member_request) { group.request_access(requester) } + let(:group_access_request) { group.request_access(requester) } it { expect(remove_member_message(project_member)).to eq "Are you sure you want to remove #{project_member.user.name} from the #{project.name_with_namespace} project?" } it { expect(remove_member_message(project_member_invite)).to eq "Are you sure you want to revoke the invitation for #{project_member_invite.invite_email} to join the #{project.name_with_namespace} project?" } - it { expect(remove_member_message(project_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{project.name_with_namespace} project?" } - it { expect(remove_member_message(project_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{project.name_with_namespace} project?" } + it { expect(remove_member_message(project_access_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{project.name_with_namespace} project?" } + it { expect(remove_member_message(project_access_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{project.name_with_namespace} project?" } it { expect(remove_member_message(group_member)).to eq "Are you sure you want to remove #{group_member.user.name} from the #{group.name} group?" } it { expect(remove_member_message(group_member_invite)).to eq "Are you sure you want to revoke the invitation for #{group_member_invite.invite_email} to join the #{group.name} group?" } - it { expect(remove_member_message(group_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{group.name} group?" } - it { expect(remove_member_message(group_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{group.name} group?" } + it { expect(remove_member_message(group_access_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{group.name} group?" } + it { expect(remove_member_message(group_access_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{group.name} group?" } end describe '#remove_member_title' do let(:requester) { create(:user) } let(:project) { create(:project, :public, :access_requestable) } let(:project_member) { build(:project_member, project: project) } - let(:project_member_request) { project.request_access(requester) } + let(:project_access_request) { project.request_access(requester) } let(:group) { create(:group, :access_requestable) } let(:group_member) { build(:group_member, group: group) } - let(:group_member_request) { group.request_access(requester) } + let(:group_access_request) { group.request_access(requester) } it { expect(remove_member_title(project_member)).to eq 'Remove user from project' } - it { expect(remove_member_title(project_member_request)).to eq 'Deny access request from project' } + it { expect(remove_member_title(project_access_request)).to eq 'Deny access request from project' } it { expect(remove_member_title(group_member)).to eq 'Remove user from group' } - it { expect(remove_member_title(group_member_request)).to eq 'Deny access request from group' } + it { expect(remove_member_title(group_access_request)).to eq 'Deny access request from group' } end describe '#leave_confirmation_message' do diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index a94e6c67d13..b7d3f3f5df5 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -247,29 +247,31 @@ describe Member do end context 'when called with a user object' do - it 'adds the user as a member' do - expect(source.users).not_to include(user) + context 'when the user is not a requester' do + it 'adds the user as a member' do + expect(source.users).not_to include(user) - described_class.add_user(source, user, :master) + described_class.add_user(source, user, :master) - expect(source.users.reload).to include(user) + expect(source.users.reload).to include(user) + end end - end - context 'when called with a requester user object' do - before do - source.request_access(user) - end + context 'when the user is a requester' do + before do + source.request_access(user) + end - it 'adds the requester as a member' do - expect(source.users).not_to include(user) - expect(source.access_requests.exists?(user_id: user)).to be_truthy + it 'does not add the user as a member' do + expect(source.users).not_to include(user) + expect(source.access_requests.exists?(user_id: user)).to be_truthy - expect { described_class.add_user(source, user, :master) } - .to raise_error(Gitlab::Access::AccessDeniedError) + expect { described_class.add_user(source, user, :master) } + .to raise_error(Gitlab::Access::AccessDeniedError) - expect(source.users.reload).not_to include(user) - expect(source.access_requests.reload.exists?(user_id: user)).to be_truthy + expect(source.users.reload).not_to include(user) + expect(source.access_requests.reload.exists?(user_id: user)).to be_truthy + end end end @@ -335,7 +337,7 @@ describe Member do source.request_access(user) end - it 'does not destroy the requester' do + it 'does not destroy the request' do expect(source.users).not_to include(user) expect(source.access_requests.exists?(user_id: user)).to be_truthy @@ -445,10 +447,10 @@ describe Member do describe '#pending?' do let(:invited_member) { create(:project_member, invite_email: "user@example.com", user: nil) } - let(:requester) { create(:project_member, requested_at: Time.now.utc) } + let(:request) { create(:project_member, requested_at: Time.now.utc) } it { expect(invited_member).to be_invite } - it { expect(requester).to be_pending } + it { expect(request).to be_pending } end describe "#accept_invite!" do |