Commit 8cde1e32 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Use polymorphism for common attributes in `GroupChildEntity`

parent bd8943f5
......@@ -6,33 +6,25 @@ class GroupChildEntity < Grape::Entity
:created_at, :updated_at, :avatar_url
expose :type do |instance|
instance.class.name.downcase
type
end
expose :can_edit do |instance|
return false unless request.respond_to?(:current_user)
if project?
can?(request.current_user, :admin_project, instance)
else
can?(request.current_user, :admin_group, instance)
end
can?(request.current_user, "admin_#{type}", instance)
end
expose :edit_path do |instance|
if project?
edit_project_path(instance)
else
edit_group_path(instance)
end
# We know `type` will be one either `project` or `group`.
# The `edit_polymorphic_path` helper would try to call the path helper
# with a plural: `edit_groups_path(instance)` or `edit_projects_path(instance)`
# while our methods are `edit_group_path` or `edit_group_path`
public_send("edit_#{type}_path", instance) # rubocop:disable GitlabSecurity/PublicSend
end
expose :relative_path do |instance|
if project?
project_path(instance)
else
group_path(instance)
end
polymorphic_path(instance)
end
expose :permission do |instance|
......@@ -78,4 +70,8 @@ class GroupChildEntity < Grape::Entity
def project?
object.is_a?(Project)
end
def type
object.class.name.downcase
end
end
require 'spec_helper'
describe GroupChildEntity do
include Gitlab::Routing.url_helpers
let(:user) { create(:user) }
let(:request) { double('request') }
let(:entity) { described_class.new(object, request: request) }
......@@ -24,7 +26,6 @@ describe GroupChildEntity do
type
can_edit
visibility
edit_path
permission
relative_path].each do |attribute|
it "includes #{attribute}" do
......@@ -51,6 +52,10 @@ describe GroupChildEntity do
expect(json[:star_count]).to be_present
end
it 'has the correct edit path' do
expect(json[:edit_path]).to eq(edit_project_path(object))
end
it_behaves_like 'group child json'
end
......@@ -87,6 +92,10 @@ describe GroupChildEntity do
expect(json[:can_leave]).to be_truthy
end
it 'has the correct edit path' do
expect(json[:edit_path]).to eq(edit_group_path(object))
end
it_behaves_like 'group child json'
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment