private_access_spec.rb 9.31 KB
Newer Older
1 2
require 'spec_helper'

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

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
6
  let(:project) { create(:project) }
7 8 9 10

  let(:master)   { create(:user) }
  let(:guest)    { create(:user) }
  let(:reporter) { create(:user) }
11
  let(:external_team_member) { create(:user, external: true) }
12 13 14 15

  before do
    # full access
    project.team << [master, :master]
16
    project.team << [external_team_member, :master]
17 18 19 20 21

    # readonly
    project.team << [reporter, :reporter]
  end

22 23 24
  describe "Project should be private" do
    subject { project }

25 26 27 28
    describe '#private?' do
      subject { super().private? }
      it { is_expected.to be_truthy }
    end
29 30
  end

31
  describe "GET /:project_path" do
Vinnie Okada's avatar
Vinnie Okada committed
32
    subject { namespace_project_path(project.namespace, project) }
33

34 35 36 37 38
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
39
    it { is_expected.to be_denied_for :external }
40
    it { is_expected.to be_allowed_for external_team_member }
41
    it { is_expected.to be_denied_for :visitor }
42 43 44
  end

  describe "GET /:project_path/tree/master" do
Vinnie Okada's avatar
Vinnie Okada committed
45
    subject { namespace_project_tree_path(project.namespace, project, project.repository.root_ref) }
46

47 48 49 50 51
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
52
    it { is_expected.to be_denied_for :external }
53
    it { is_expected.to be_allowed_for external_team_member }
54
    it { is_expected.to be_denied_for :visitor }
55 56 57
  end

  describe "GET /:project_path/commits/master" do
Vinnie Okada's avatar
Vinnie Okada committed
58
    subject { namespace_project_commits_path(project.namespace, project, project.repository.root_ref, limit: 1) }
59

60 61 62 63 64
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
65
    it { is_expected.to be_denied_for :external }
66
    it { is_expected.to be_allowed_for external_team_member }
67
    it { is_expected.to be_denied_for :visitor }
68 69 70
  end

  describe "GET /:project_path/commit/:sha" do
Vinnie Okada's avatar
Vinnie Okada committed
71
    subject { namespace_project_commit_path(project.namespace, project, project.repository.commit) }
72

73 74 75 76 77
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
78
    it { is_expected.to be_allowed_for external_team_member }
79
    it { is_expected.to be_denied_for :visitor }
80 81 82
  end

  describe "GET /:project_path/compare" do
Vinnie Okada's avatar
Vinnie Okada committed
83
    subject { namespace_project_compare_index_path(project.namespace, project) }
84

85 86 87 88 89
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
90
    it { is_expected.to be_denied_for :external }
91
    it { is_expected.to be_allowed_for external_team_member }
92
    it { is_expected.to be_denied_for :visitor }
93 94
  end

95 96
  describe "GET /:project_path/project_members" do
    subject { namespace_project_project_members_path(project.namespace, project) }
97

98 99 100 101 102
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
103
    it { is_expected.to be_denied_for :external }
104
    it { is_expected.to be_allowed_for external_team_member }
105
    it { is_expected.to be_denied_for :visitor }
106 107 108
  end

  describe "GET /:project_path/blob" do
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
109 110
    let(:commit) { project.repository.commit }
    subject { namespace_project_blob_path(project.namespace, project, File.join(commit.id, '.gitignore'))}
111

Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
112 113 114 115 116 117
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
    it { is_expected.to be_denied_for :external }
118
    it { is_expected.to be_allowed_for external_team_member }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
119
    it { is_expected.to be_denied_for :visitor }
120 121 122
  end

  describe "GET /:project_path/edit" do
Vinnie Okada's avatar
Vinnie Okada committed
123
    subject { edit_namespace_project_path(project.namespace, project) }
124

125 126 127 128 129
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
130
    it { is_expected.to be_denied_for :external }
131
    it { is_expected.to be_allowed_for external_team_member }
132
    it { is_expected.to be_denied_for :visitor }
133 134 135
  end

  describe "GET /:project_path/deploy_keys" do
Vinnie Okada's avatar
Vinnie Okada committed
136
    subject { namespace_project_deploy_keys_path(project.namespace, project) }
137

138 139 140 141 142
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
143
    it { is_expected.to be_denied_for :external }
144
    it { is_expected.to be_allowed_for external_team_member }
145
    it { is_expected.to be_denied_for :visitor }
146 147 148
  end

  describe "GET /:project_path/issues" do
Vinnie Okada's avatar
Vinnie Okada committed
149
    subject { namespace_project_issues_path(project.namespace, project) }
150

151 152 153 154 155
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
156
    it { is_expected.to be_denied_for :external }
157
    it { is_expected.to be_allowed_for external_team_member }
158
    it { is_expected.to be_denied_for :visitor }
159 160
  end

161 162 163 164 165 166 167 168 169
  describe "GET /:project_path/issues/:id/edit" do
    let(:issue) { create(:issue, project: project) }
    subject { edit_namespace_project_issue_path(project.namespace, project, issue) }

    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
170
    it { is_expected.to be_denied_for :external }
171
    it { is_expected.to be_allowed_for external_team_member }
172 173 174
    it { is_expected.to be_denied_for :visitor }
  end

175
  describe "GET /:project_path/snippets" do
Vinnie Okada's avatar
Vinnie Okada committed
176
    subject { namespace_project_snippets_path(project.namespace, project) }
177

178 179 180 181 182
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
183
    it { is_expected.to be_denied_for :external }
184
    it { is_expected.to be_allowed_for external_team_member }
185
    it { is_expected.to be_denied_for :visitor }
186 187 188
  end

  describe "GET /:project_path/merge_requests" do
Vinnie Okada's avatar
Vinnie Okada committed
189
    subject { namespace_project_merge_requests_path(project.namespace, project) }
190

191 192 193 194 195
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
196
    it { is_expected.to be_denied_for :external }
197
    it { is_expected.to be_allowed_for external_team_member }
198
    it { is_expected.to be_denied_for :visitor }
199 200 201
  end

  describe "GET /:project_path/branches" do
Vinnie Okada's avatar
Vinnie Okada committed
202
    subject { namespace_project_branches_path(project.namespace, project) }
203 204 205

    before do
      # Speed increase
206
      allow_any_instance_of(Project).to receive(:branches).and_return([])
207 208
    end

209 210 211 212 213
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
214
    it { is_expected.to be_denied_for :external }
215
    it { is_expected.to be_allowed_for external_team_member }
216
    it { is_expected.to be_denied_for :visitor }
217 218 219
  end

  describe "GET /:project_path/tags" do
Vinnie Okada's avatar
Vinnie Okada committed
220
    subject { namespace_project_tags_path(project.namespace, project) }
221 222 223

    before do
      # Speed increase
224
      allow_any_instance_of(Project).to receive(:tags).and_return([])
225 226
    end

227 228 229 230 231
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_allowed_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
232
    it { is_expected.to be_denied_for :external }
233
    it { is_expected.to be_allowed_for external_team_member }
234
    it { is_expected.to be_denied_for :visitor }
235 236 237
  end

  describe "GET /:project_path/hooks" do
Vinnie Okada's avatar
Vinnie Okada committed
238
    subject { namespace_project_hooks_path(project.namespace, project) }
239

240 241 242 243 244
    it { is_expected.to be_allowed_for master }
    it { is_expected.to be_denied_for reporter }
    it { is_expected.to be_allowed_for :admin }
    it { is_expected.to be_denied_for guest }
    it { is_expected.to be_denied_for :user }
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg committed
245
    it { is_expected.to be_denied_for :external }
246
    it { is_expected.to be_allowed_for external_team_member }
247
    it { is_expected.to be_denied_for :visitor }
248 249
  end
end