blob: 7f330da44a76fb5b965174a1932dc500e462a79d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe GroupChildEntity do
include ExternalAuthorizationServiceHelpers
include Gitlab::Routing.url_helpers
let(:user) { create(:user) }
let(:request) { double('request') }
let(:entity) { described_class.new(object, request: request) }
subject(:json) { entity.as_json }
before do
allow(request).to receive(:current_user).and_return(user)
stub_commonmark_sourcepos_disabled
end
shared_examples 'group child json' do
it 'renders json' do
is_expected.not_to be_nil
end
%w[id
full_name
avatar_url
name
description
markdown_description
visibility
type
can_edit
visibility
permission
relative_path].each do |attribute|
it "includes #{attribute}" do
expect(json[attribute.to_sym]).to be_present
end
end
end
describe 'for a project' do
let(:object) do
create(:project, :with_avatar,
description: 'Awesomeness')
end
before do
object.add_maintainer(user)
end
it 'has the correct type' do
expect(json[:type]).to eq('project')
end
it 'includes the star count' 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
describe 'for a group' do
let(:description) { 'Awesomeness' }
let(:object) do
create(:group, :nested, :with_avatar,
description: description)
end
before do
object.add_owner(user)
end
it 'has the correct type' do
expect(json[:type]).to eq('group')
end
it 'counts projects and subgroups as children' do
create(:project, namespace: object)
create(:group, parent: object)
expect(json[:children_count]).to eq(2)
end
%w[children_count leave_path parent_id number_projects_with_delimiter number_users_with_delimiter project_count subgroup_count].each do |attribute|
it "includes #{attribute}" do
expect(json[attribute.to_sym]).to be_present
end
end
it 'allows an owner to leave when there is another one' do
object.add_owner(create(:user))
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
context 'emoji in description' do
let(:description) { ':smile:' }
it 'has the correct markdown_description' do
expect(json[:markdown_description]).to eq('<p dir="auto"><gl-emoji title="smiling face with open mouth and smiling eyes" data-name="smile" data-unicode-version="6.0">😄</gl-emoji></p>')
end
end
it_behaves_like 'group child json'
end
describe 'for a project with external authorization enabled' do
let(:object) do
create(:project, :with_avatar,
description: 'Awesomeness')
end
before do
enable_external_authorization_service_check
object.add_maintainer(user)
end
it 'does not hit the external authorization service' do
expect(::Gitlab::ExternalAuthorization).not_to receive(:access_allowed?)
expect(json[:can_edit]).to eq(false)
end
end
end
|