internal_access_spec.rb 11.1 KB
Newer Older
1 2
require 'spec_helper'

3
describe "Internal Project Access", feature: true  do
4 5
  include AccessMatchers

6
  let(:project) { create(:project, :internal) }
7

D
Douwe Maan 已提交
8 9 10 11 12
  let(:owner)     { project.owner }
  let(:master)    { create(:user) }
  let(:developer) { create(:user) }
  let(:reporter)  { create(:user) }
  let(:guest)     { create(:user) }
13 14 15

  before do
    project.team << [master, :master]
D
Douwe Maan 已提交
16
    project.team << [developer, :developer]
17
    project.team << [reporter, :reporter]
D
Douwe Maan 已提交
18
    project.team << [guest, :guest]
19 20 21
  end

  describe "Project should be internal" do
22
    describe '#internal?' do
D
Douwe Maan 已提交
23
      subject { project.internal? }
24 25
      it { is_expected.to be_truthy }
    end
26 27 28
  end

  describe "GET /:project_path" do
V
Vinnie Okada 已提交
29
    subject { namespace_project_path(project.namespace, project) }
30

D
Douwe Maan 已提交
31 32
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
33
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
34
    it { is_expected.to be_allowed_for developer }
35 36 37
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
38
    it { is_expected.to be_denied_for :external }
39
    it { is_expected.to be_denied_for :visitor }
40 41 42
  end

  describe "GET /:project_path/tree/master" do
V
Vinnie Okada 已提交
43
    subject { namespace_project_tree_path(project.namespace, project, project.repository.root_ref) }
44

D
Douwe Maan 已提交
45 46
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
47
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
48
    it { is_expected.to be_allowed_for developer }
49 50 51
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
52
    it { is_expected.to be_denied_for :external }
53
    it { is_expected.to be_denied_for :visitor }
54 55 56
  end

  describe "GET /:project_path/commits/master" do
V
Vinnie Okada 已提交
57
    subject { namespace_project_commits_path(project.namespace, project, project.repository.root_ref, limit: 1) }
58

D
Douwe Maan 已提交
59 60
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
61
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
62
    it { is_expected.to be_allowed_for developer }
63 64 65
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
66
    it { is_expected.to be_denied_for :external }
67
    it { is_expected.to be_denied_for :visitor }
68 69 70
  end

  describe "GET /:project_path/commit/:sha" do
V
Vinnie Okada 已提交
71
    subject { namespace_project_commit_path(project.namespace, project, project.repository.commit) }
72

D
Douwe Maan 已提交
73 74
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
75
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
76
    it { is_expected.to be_allowed_for developer }
77 78 79
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
80
    it { is_expected.to be_denied_for :external }
81
    it { is_expected.to be_denied_for :visitor }
82 83 84
  end

  describe "GET /:project_path/compare" do
V
Vinnie Okada 已提交
85
    subject { namespace_project_compare_index_path(project.namespace, project) }
86

D
Douwe Maan 已提交
87 88
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
89
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
90
    it { is_expected.to be_allowed_for developer }
91 92 93
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
94
    it { is_expected.to be_denied_for :external }
95
    it { is_expected.to be_denied_for :visitor }
96 97
  end

98 99
  describe "GET /:project_path/project_members" do
    subject { namespace_project_project_members_path(project.namespace, project) }
100

D
Douwe Maan 已提交
101 102
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
103
    it { is_expected.to be_allowed_for master }
104 105 106 107
    it { is_expected.to be_allowed_for developer }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
108
    it { is_expected.to be_denied_for :visitor }
109
    it { is_expected.to be_denied_for :external }
110 111 112
  end

  describe "GET /:project_path/blob" do
Z
Zeger-Jan van de Weg 已提交
113 114
    let(:commit) { project.repository.commit }
    subject { namespace_project_blob_path(project.namespace, project, File.join(commit.id, '.gitignore')) }
115

D
Douwe Maan 已提交
116 117
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
Z
Zeger-Jan van de Weg 已提交
118
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
119
    it { is_expected.to be_allowed_for developer }
Z
Zeger-Jan van de Weg 已提交
120 121 122 123 124
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
    it { is_expected.to be_denied_for :external }
    it { is_expected.to be_denied_for :visitor }
125 126 127
  end

  describe "GET /:project_path/edit" do
V
Vinnie Okada 已提交
128
    subject { edit_namespace_project_path(project.namespace, project) }
129

D
Douwe Maan 已提交
130 131
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
132
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
133
    it { is_expected.to be_denied_for developer }
134 135 136
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Z
Zeger-Jan van de Weg 已提交
137
    it { is_expected.to be_denied_for :external }
138
    it { is_expected.to be_denied_for :visitor }
139 140 141
  end

  describe "GET /:project_path/deploy_keys" do
V
Vinnie Okada 已提交
142
    subject { namespace_project_deploy_keys_path(project.namespace, project) }
143

D
Douwe Maan 已提交
144 145
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
146
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
147
    it { is_expected.to be_denied_for developer }
148 149 150
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Z
Zeger-Jan van de Weg 已提交
151
    it { is_expected.to be_denied_for :external }
152
    it { is_expected.to be_denied_for :visitor }
153 154 155
  end

  describe "GET /:project_path/issues" do
V
Vinnie Okada 已提交
156
    subject { namespace_project_issues_path(project.namespace, project) }
157

D
Douwe Maan 已提交
158 159
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
160
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
161
    it { is_expected.to be_allowed_for developer }
162 163 164
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
165
    it { is_expected.to be_denied_for :external }
166
    it { is_expected.to be_denied_for :visitor }
167 168
  end

169 170 171 172
  describe "GET /:project_path/issues/:id/edit" do
    let(:issue) { create(:issue, project: project) }
    subject { edit_namespace_project_issue_path(project.namespace, project, issue) }

D
Douwe Maan 已提交
173 174
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
175
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
176
    it { is_expected.to be_allowed_for developer }
177 178 179
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Z
Zeger-Jan van de Weg 已提交
180
    it { is_expected.to be_denied_for :external }
181 182 183
    it { is_expected.to be_denied_for :visitor }
  end

184
  describe "GET /:project_path/snippets" do
V
Vinnie Okada 已提交
185
    subject { namespace_project_snippets_path(project.namespace, project) }
186

D
Douwe Maan 已提交
187 188
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
189
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
190
    it { is_expected.to be_allowed_for developer }
191 192 193
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
194
    it { is_expected.to be_denied_for :external }
195
    it { is_expected.to be_denied_for :visitor }
196 197 198
  end

  describe "GET /:project_path/snippets/new" do
V
Vinnie Okada 已提交
199
    subject { new_namespace_project_snippet_path(project.namespace, project) }
200

D
Douwe Maan 已提交
201 202
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
203
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
204
    it { is_expected.to be_allowed_for developer }
205 206 207
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Z
Zeger-Jan van de Weg 已提交
208
    it { is_expected.to be_denied_for :external }
209
    it { is_expected.to be_denied_for :visitor }
210 211 212
  end

  describe "GET /:project_path/merge_requests" do
V
Vinnie Okada 已提交
213
    subject { namespace_project_merge_requests_path(project.namespace, project) }
214

D
Douwe Maan 已提交
215 216
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
217
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
218
    it { is_expected.to be_allowed_for developer }
219 220 221
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
222
    it { is_expected.to be_denied_for :external }
223
    it { is_expected.to be_denied_for :visitor }
224 225 226
  end

  describe "GET /:project_path/merge_requests/new" do
V
Vinnie Okada 已提交
227
    subject { new_namespace_project_merge_request_path(project.namespace, project) }
228

D
Douwe Maan 已提交
229 230
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
231
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
232
    it { is_expected.to be_allowed_for developer }
233 234 235
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Z
Zeger-Jan van de Weg 已提交
236
    it { is_expected.to be_denied_for :external }
237
    it { is_expected.to be_denied_for :visitor }
238 239 240
  end

  describe "GET /:project_path/branches" do
V
Vinnie Okada 已提交
241
    subject { namespace_project_branches_path(project.namespace, project) }
242 243 244

    before do
      # Speed increase
245
      allow_any_instance_of(Project).to receive(:branches).and_return([])
246 247
    end

D
Douwe Maan 已提交
248 249
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
250
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
251
    it { is_expected.to be_allowed_for developer }
252 253 254
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
255
    it { is_expected.to be_denied_for :external }
256
    it { is_expected.to be_denied_for :visitor }
257 258 259
  end

  describe "GET /:project_path/tags" do
V
Vinnie Okada 已提交
260
    subject { namespace_project_tags_path(project.namespace, project) }
261 262 263

    before do
      # Speed increase
264
      allow_any_instance_of(Project).to receive(:tags).and_return([])
265 266
    end

D
Douwe Maan 已提交
267 268
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
269
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
270
    it { is_expected.to be_allowed_for developer }
271 272 273
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for guest }
    it { is_expected.to be_allowed_for :user }
Z
Zeger-Jan van de Weg 已提交
274
    it { is_expected.to be_denied_for :external }
275
    it { is_expected.to be_denied_for :visitor }
276 277 278
  end

  describe "GET /:project_path/hooks" do
V
Vinnie Okada 已提交
279
    subject { namespace_project_hooks_path(project.namespace, project) }
280

D
Douwe Maan 已提交
281 282
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_allowed_for owner }
283
    it { is_expected.to be_allowed_for master }
D
Douwe Maan 已提交
284
    it { is_expected.to be_denied_for developer }
285 286 287
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Z
Zeger-Jan van de Weg 已提交
288
    it { is_expected.to be_denied_for :external }
289
    it { is_expected.to be_denied_for :visitor }
290 291
  end
end