public_access_spec.rb 22.7 KB
Newer Older
1 2
# frozen_string_literal: true

3 4
require 'spec_helper'

5
describe "Public Project Access" do
6 7
  include AccessMatchers

8
  set(:project) { create(:project, :public, :repository) }
9

10 11 12 13
  before do
    stub_feature_flags(job_log_json: false)
  end

14
  describe "Project should be public" do
15
    describe '#public?' do
D
Douwe Maan 已提交
16
      subject { project.public? }
17 18
      it { is_expected.to be_truthy }
    end
19 20 21
  end

  describe "GET /:project_path" do
22
    subject { project_path(project) }
23

24 25
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
26
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
27 28 29 30 31 32
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
33 34 35
  end

  describe "GET /:project_path/tree/master" do
36
    subject { project_tree_path(project, project.repository.root_ref) }
37

38 39
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
40
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
41 42 43 44 45 46
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
47 48 49
  end

  describe "GET /:project_path/commits/master" do
50
    subject { project_commits_path(project, project.repository.root_ref, limit: 1) }
51

52 53
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
54
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
55 56 57 58 59 60
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
61 62 63
  end

  describe "GET /:project_path/commit/:sha" do
64
    subject { project_commit_path(project, project.repository.commit) }
65

66 67
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
68
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
69 70 71 72 73 74
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
75 76 77
  end

  describe "GET /:project_path/compare" do
78
    subject { project_compare_index_path(project) }
79

80 81
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
82
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
83 84 85 86 87 88
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
89 90
  end

91
  describe "GET /:project_path/settings/members" do
92
    subject { project_settings_members_path(project) }
93

94 95
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
96
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
97 98 99 100 101 102
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:visitor) }
    it { is_expected.to be_allowed_for(:external) }
103 104
  end

105
  describe "GET /:project_path/settings/ci_cd" do
106
    subject { project_settings_ci_cd_path(project) }
107 108 109

    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
110
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
111 112 113 114
    it { is_expected.to be_denied_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
J
Jose Ivan Vargas 已提交
115 116 117 118 119
    it { is_expected.to be_denied_for(:visitor) }
    it { is_expected.to be_denied_for(:external) }
  end

  describe "GET /:project_path/settings/repository" do
120
    subject { project_settings_repository_path(project) }
J
Jose Ivan Vargas 已提交
121 122 123

    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
124
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
J
Jose Ivan Vargas 已提交
125 126
    it { is_expected.to be_denied_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
127 128 129 130 131 132
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:visitor) }
    it { is_expected.to be_denied_for(:external) }
  end

K
Kamil Trzcinski 已提交
133
  describe "GET /:project_path/pipelines" do
134
    subject { project_pipelines_path(project) }
K
Kamil Trzcinski 已提交
135

136 137
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
138
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
139 140 141 142 143 144
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
K
Kamil Trzcinski 已提交
145 146 147 148
  end

  describe "GET /:project_path/pipelines/:id" do
    let(:pipeline) { create(:ci_pipeline, project: project) }
149
    subject { project_pipeline_path(project, pipeline) }
K
Kamil Trzcinski 已提交
150

151 152
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
153
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
154 155 156 157 158 159
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
K
Kamil Trzcinski 已提交
160 161
  end

162
  describe "GET /:project_path/builds" do
163
    subject { project_jobs_path(project) }
164 165

    context "when allowed for public" do
166 167 168
      before do
        project.update(public_builds: true)
      end
169

170 171
      it { is_expected.to be_allowed_for(:admin) }
      it { is_expected.to be_allowed_for(:owner).of(project) }
172
      it { is_expected.to be_allowed_for(:maintainer).of(project) }
173 174 175 176 177 178
      it { is_expected.to be_allowed_for(:developer).of(project) }
      it { is_expected.to be_allowed_for(:reporter).of(project) }
      it { is_expected.to be_allowed_for(:guest).of(project) }
      it { is_expected.to be_allowed_for(:user) }
      it { is_expected.to be_allowed_for(:external) }
      it { is_expected.to be_allowed_for(:visitor) }
179 180 181
    end

    context "when disallowed for public" do
182 183 184
      before do
        project.update(public_builds: false)
      end
185

186 187
      it { is_expected.to be_allowed_for(:admin) }
      it { is_expected.to be_allowed_for(:owner).of(project) }
188
      it { is_expected.to be_allowed_for(:maintainer).of(project) }
189 190 191 192 193 194
      it { is_expected.to be_allowed_for(:developer).of(project) }
      it { is_expected.to be_allowed_for(:reporter).of(project) }
      it { is_expected.to be_denied_for(:guest).of(project) }
      it { is_expected.to be_denied_for(:user) }
      it { is_expected.to be_denied_for(:external) }
      it { is_expected.to be_denied_for(:visitor) }
195 196 197 198
    end
  end

  describe "GET /:project_path/builds/:id" do
199 200
    let(:pipeline) { create(:ci_pipeline, project: project) }
    let(:build) { create(:ci_build, pipeline: pipeline) }
201
    subject { project_job_path(project, build.id) }
202 203

    context "when allowed for public" do
204 205 206
      before do
        project.update(public_builds: true)
      end
207

208 209
      it { is_expected.to be_allowed_for(:admin) }
      it { is_expected.to be_allowed_for(:owner).of(project) }
210
      it { is_expected.to be_allowed_for(:maintainer).of(project) }
211 212 213 214 215 216
      it { is_expected.to be_allowed_for(:developer).of(project) }
      it { is_expected.to be_allowed_for(:reporter).of(project) }
      it { is_expected.to be_allowed_for(:guest).of(project) }
      it { is_expected.to be_allowed_for(:user) }
      it { is_expected.to be_allowed_for(:external) }
      it { is_expected.to be_allowed_for(:visitor) }
217 218 219
    end

    context "when disallowed for public" do
220 221 222
      before do
        project.update(public_builds: false)
      end
223

224 225
      it { is_expected.to be_allowed_for(:admin) }
      it { is_expected.to be_allowed_for(:owner).of(project) }
226
      it { is_expected.to be_allowed_for(:maintainer).of(project) }
227 228
      it { is_expected.to be_allowed_for(:developer).of(project) }
      it { is_expected.to be_allowed_for(:reporter).of(project) }
229 230 231 232 233 234 235 236 237 238
      it { is_expected.to be_denied_for(:guest).of(project) }
      it { is_expected.to be_denied_for(:user) }
      it { is_expected.to be_denied_for(:external) }
      it { is_expected.to be_denied_for(:visitor) }
    end
  end

  describe 'GET /:project_path/builds/:id/trace' do
    let(:pipeline) { create(:ci_pipeline, project: project) }
    let(:build) { create(:ci_build, pipeline: pipeline) }
239
    subject { trace_project_job_path(project, build.id) }
240 241 242 243 244 245 246 247

    context 'when allowed for public' do
      before do
        project.update(public_builds: true)
      end

      it { is_expected.to be_allowed_for(:admin) }
      it { is_expected.to be_allowed_for(:owner).of(project) }
248
      it { is_expected.to be_allowed_for(:maintainer).of(project) }
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
      it { is_expected.to be_allowed_for(:developer).of(project) }
      it { is_expected.to be_allowed_for(:reporter).of(project) }
      it { is_expected.to be_allowed_for(:guest).of(project) }
      it { is_expected.to be_allowed_for(:user) }
      it { is_expected.to be_allowed_for(:external) }
      it { is_expected.to be_allowed_for(:visitor) }
    end

    context 'when disallowed for public' do
      before do
        project.update(public_builds: false)
      end

      it { is_expected.to be_allowed_for(:admin) }
      it { is_expected.to be_allowed_for(:owner).of(project) }
264
      it { is_expected.to be_allowed_for(:maintainer).of(project) }
265 266
      it { is_expected.to be_allowed_for(:developer).of(project) }
      it { is_expected.to be_allowed_for(:reporter).of(project) }
267 268 269 270
      it { is_expected.to be_denied_for(:guest).of(project) }
      it { is_expected.to be_denied_for(:user) }
      it { is_expected.to be_denied_for(:external) }
      it { is_expected.to be_denied_for(:visitor) }
271 272 273
    end
  end

274
  describe "GET /:project_path/pipeline_schedules" do
275
    subject { project_pipeline_schedules_path(project) }
276 277 278

    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
279
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
280
    it { is_expected.to be_allowed_for(:developer).of(project) }
281 282 283 284 285
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
286 287
  end

288
  describe "GET /:project_path/environments" do
289
    subject { project_environments_path(project) }
290

291 292
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
293
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
294 295 296 297 298 299
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
300 301 302 303
  end

  describe "GET /:project_path/environments/:id" do
    let(:environment) { create(:environment, project: project) }
304
    subject { project_environment_path(project, environment) }
305

306 307
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
308
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
309 310 311 312 313 314
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
315 316
  end

317 318
  describe "GET /:project_path/environments/:id/deployments" do
    let(:environment) { create(:environment, project: project) }
319
    subject { project_environment_deployments_path(project, environment) }
320 321 322

    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
323
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
324 325 326 327 328 329 330 331
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
  end

332
  describe "GET /:project_path/environments/new" do
333
    subject { new_project_environment_path(project) }
334

335 336
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
337
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
338 339 340 341 342 343
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
344 345
  end

346
  describe "GET /:project_path/blob" do
Z
Zeger-Jan van de Weg 已提交
347 348
    let(:commit) { project.repository.commit }

349
    subject { project_blob_path(project, File.join(commit.id, '.gitignore')) }
350

351 352
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
353
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
354 355 356 357 358
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:visitor) }
359 360 361
  end

  describe "GET /:project_path/edit" do
362
    subject { edit_project_path(project) }
363

364 365
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
366
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
367 368 369 370 371 372
    it { is_expected.to be_denied_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
373 374 375
  end

  describe "GET /:project_path/deploy_keys" do
376
    subject { project_deploy_keys_path(project) }
377

378 379
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
380
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
381 382 383 384 385 386
    it { is_expected.to be_denied_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
387 388 389
  end

  describe "GET /:project_path/issues" do
390
    subject { project_issues_path(project) }
391

392 393
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
394
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
395 396 397 398 399 400
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
401 402
  end

403 404 405 406 407 408
  describe "GET /:project_path/issues/:id/edit" do
    let(:issue) { create(:issue, project: project) }
    subject { edit_project_issue_path(project, issue) }

    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
409
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
410 411 412 413 414 415 416 417
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
  end

418
  describe "GET /:project_path/snippets" do
419
    subject { project_snippets_path(project) }
420

421 422
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
423
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
424 425 426 427 428 429
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
430 431 432
  end

  describe "GET /:project_path/snippets/new" do
433
    subject { new_project_snippet_path(project) }
434

435 436
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
437
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
438 439 440 441 442 443
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
444 445 446
  end

  describe "GET /:project_path/merge_requests" do
447
    subject { project_merge_requests_path(project) }
448

449 450
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
451
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
452 453 454 455 456 457
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
458 459 460
  end

  describe "GET /:project_path/merge_requests/new" do
461
    subject { project_new_merge_request_path(project) }
462

463 464
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
465
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
466 467 468 469 470 471
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
472 473 474
  end

  describe "GET /:project_path/branches" do
475
    subject { project_branches_path(project) }
476 477 478

    before do
      # Speed increase
479
      allow_any_instance_of(Project).to receive(:branches).and_return([])
480 481
    end

482 483
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
484
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
485 486 487 488 489 490
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
491 492 493
  end

  describe "GET /:project_path/tags" do
494
    subject { project_tags_path(project) }
495 496 497

    before do
      # Speed increase
498
      allow_any_instance_of(Project).to receive(:tags).and_return([])
499 500
    end

501 502
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
503
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
504 505 506 507 508 509
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
510 511
  end

512
  describe "GET /:project_path/settings/integrations" do
513
    subject { project_settings_integrations_path(project) }
514

515 516
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
517
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
518 519 520 521 522 523
    it { is_expected.to be_denied_for(:developer).of(project) }
    it { is_expected.to be_denied_for(:reporter).of(project) }
    it { is_expected.to be_denied_for(:guest).of(project) }
    it { is_expected.to be_denied_for(:user) }
    it { is_expected.to be_denied_for(:external) }
    it { is_expected.to be_denied_for(:visitor) }
524
  end
525 526

  describe "GET /:project_path/container_registry" do
527
    let(:container_repository) { create(:container_repository) }
A
Andre Guedes 已提交
528

529
    before do
530
      stub_container_registry_tags(repository: :any, tags: ['latest'])
531
      stub_container_registry_config(enabled: true)
532
      project.container_repositories << container_repository
533 534
    end

535
    subject { project_container_registry_index_path(project) }
536

537 538
    it { is_expected.to be_allowed_for(:admin) }
    it { is_expected.to be_allowed_for(:owner).of(project) }
539
    it { is_expected.to be_allowed_for(:maintainer).of(project) }
540 541 542 543 544 545
    it { is_expected.to be_allowed_for(:developer).of(project) }
    it { is_expected.to be_allowed_for(:reporter).of(project) }
    it { is_expected.to be_allowed_for(:guest).of(project) }
    it { is_expected.to be_allowed_for(:user) }
    it { is_expected.to be_allowed_for(:external) }
    it { is_expected.to be_allowed_for(:visitor) }
546
  end
547
end