OSDN Git Service

3f1016473f5c41f7ea96edc412c8b94e2d9e8363
[wvm/gitlab.git] / spec / features / security / project / public_access_spec.rb
1 require 'spec_helper'
2
3 describe "Public Project Access" do
4   let(:project) { create(:project_with_code) }
5
6   let(:master) { create(:user) }
7   let(:guest) { create(:user) }
8   let(:reporter) { create(:user) }
9
10   before do
11     # public project
12     project.visibility_level = Gitlab::VisibilityLevel::PUBLIC
13     project.save!
14
15     # full access
16     project.team << [master, :master]
17
18     # readonly
19     project.team << [reporter, :reporter]
20
21   end
22
23   describe "Project should be public" do
24     subject { project }
25
26     its(:public?) { should be_true }
27   end
28
29   describe "GET /:project_path" do
30     subject { project_path(project) }
31
32     it { should be_allowed_for master }
33     it { should be_allowed_for reporter }
34     it { should be_allowed_for :admin }
35     it { should be_allowed_for guest }
36     it { should be_allowed_for :user }
37     it { should be_allowed_for :visitor }
38   end
39
40   describe "GET /:project_path/tree/master" do
41     subject { project_tree_path(project, project.repository.root_ref) }
42
43     it { should be_allowed_for master }
44     it { should be_allowed_for reporter }
45     it { should be_allowed_for :admin }
46     it { should be_allowed_for guest }
47     it { should be_allowed_for :user }
48     it { should be_allowed_for :visitor }
49   end
50
51   describe "GET /:project_path/commits/master" do
52     subject { project_commits_path(project, project.repository.root_ref, limit: 1) }
53
54     it { should be_allowed_for master }
55     it { should be_allowed_for reporter }
56     it { should be_allowed_for :admin }
57     it { should be_allowed_for guest }
58     it { should be_allowed_for :user }
59     it { should be_allowed_for :visitor }
60   end
61
62   describe "GET /:project_path/commit/:sha" do
63     subject { project_commit_path(project, project.repository.commit) }
64
65     it { should be_allowed_for master }
66     it { should be_allowed_for reporter }
67     it { should be_allowed_for :admin }
68     it { should be_allowed_for guest }
69     it { should be_allowed_for :user }
70     it { should be_allowed_for :visitor }
71   end
72
73   describe "GET /:project_path/compare" do
74     subject { project_compare_index_path(project) }
75
76     it { should be_allowed_for master }
77     it { should be_allowed_for reporter }
78     it { should be_allowed_for :admin }
79     it { should be_allowed_for guest }
80     it { should be_allowed_for :user }
81     it { should be_allowed_for :visitor }
82   end
83
84   describe "GET /:project_path/team" do
85     subject { project_team_index_path(project) }
86
87     it { should be_allowed_for master }
88     it { should be_denied_for reporter }
89     it { should be_allowed_for :admin }
90     it { should be_denied_for guest }
91     it { should be_denied_for :user }
92     it { should be_denied_for :visitor }
93   end
94
95   describe "GET /:project_path/wall" do
96     subject { project_wall_path(project) }
97
98     it { should be_allowed_for master }
99     it { should be_allowed_for reporter }
100     it { should be_allowed_for :admin }
101     it { should be_allowed_for guest }
102     it { should be_allowed_for :user }
103     it { should be_allowed_for :visitor }
104   end
105
106   describe "GET /:project_path/blob" do
107     before do
108       commit = project.repository.commit
109       path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob) }.first.name
110       @blob_path = project_blob_path(project, File.join(commit.id, path))
111     end
112
113     it { @blob_path.should be_allowed_for master }
114     it { @blob_path.should be_allowed_for reporter }
115     it { @blob_path.should be_allowed_for :admin }
116     it { @blob_path.should be_allowed_for guest }
117     it { @blob_path.should be_allowed_for :user }
118     it { @blob_path.should be_allowed_for :visitor }
119   end
120
121   describe "GET /:project_path/edit" do
122     subject { edit_project_path(project) }
123
124     it { should be_allowed_for master }
125     it { should be_denied_for reporter }
126     it { should be_allowed_for :admin }
127     it { should be_denied_for guest }
128     it { should be_denied_for :user }
129     it { should be_denied_for :visitor }
130   end
131
132   describe "GET /:project_path/deploy_keys" do
133     subject { project_deploy_keys_path(project) }
134
135     it { should be_allowed_for master }
136     it { should be_denied_for reporter }
137     it { should be_allowed_for :admin }
138     it { should be_denied_for guest }
139     it { should be_denied_for :user }
140     it { should be_denied_for :visitor }
141   end
142
143   describe "GET /:project_path/issues" do
144     subject { project_issues_path(project) }
145
146     it { should be_allowed_for master }
147     it { should be_allowed_for reporter }
148     it { should be_allowed_for :admin }
149     it { should be_allowed_for guest }
150     it { should be_allowed_for :user }
151     it { should be_allowed_for :visitor }
152   end
153
154   describe "GET /:project_path/snippets" do
155     subject { project_snippets_path(project) }
156
157     it { should be_allowed_for master }
158     it { should be_allowed_for reporter }
159     it { should be_allowed_for :admin }
160     it { should be_allowed_for guest }
161     it { should be_allowed_for :user }
162     it { should be_allowed_for :visitor }
163   end
164
165   describe "GET /:project_path/snippets/new" do
166     subject { new_project_snippet_path(project) }
167
168     it { should be_allowed_for master }
169     it { should be_allowed_for reporter }
170     it { should be_allowed_for :admin }
171     it { should be_denied_for guest }
172     it { should be_denied_for :user }
173     it { should be_denied_for :visitor }
174   end
175
176   describe "GET /:project_path/merge_requests" do
177     subject { project_merge_requests_path(project) }
178
179     it { should be_allowed_for master }
180     it { should be_allowed_for reporter }
181     it { should be_allowed_for :admin }
182     it { should be_allowed_for guest }
183     it { should be_allowed_for :user }
184     it { should be_allowed_for :visitor }
185   end
186
187   describe "GET /:project_path/merge_requests/new" do
188     subject { new_project_merge_request_path(project) }
189
190     it { should be_allowed_for master }
191     it { should be_denied_for reporter }
192     it { should be_allowed_for :admin }
193     it { should be_denied_for guest }
194     it { should be_denied_for :user }
195     it { should be_denied_for :visitor }
196   end
197
198   describe "GET /:project_path/branches/recent" do
199     subject { recent_project_branches_path(project) }
200
201     it { should be_allowed_for master }
202     it { should be_allowed_for reporter }
203     it { should be_allowed_for :admin }
204     it { should be_allowed_for guest }
205     it { should be_allowed_for :user }
206     it { should be_allowed_for :visitor }
207   end
208
209   describe "GET /:project_path/branches" do
210     subject { project_branches_path(project) }
211
212     before do
213       # Speed increase
214       Project.any_instance.stub(:branches).and_return([])
215     end
216
217     it { should be_allowed_for master }
218     it { should be_allowed_for reporter }
219     it { should be_allowed_for :admin }
220     it { should be_allowed_for guest }
221     it { should be_allowed_for :user }
222     it { should be_allowed_for :visitor }
223   end
224
225   describe "GET /:project_path/tags" do
226     subject { project_tags_path(project) }
227
228     before do
229       # Speed increase
230       Project.any_instance.stub(:tags).and_return([])
231     end
232
233     it { should be_allowed_for master }
234     it { should be_allowed_for reporter }
235     it { should be_allowed_for :admin }
236     it { should be_allowed_for guest }
237     it { should be_allowed_for :user }
238     it { should be_allowed_for :visitor }
239   end
240
241   describe "GET /:project_path/hooks" do
242     subject { project_hooks_path(project) }
243
244     it { should be_allowed_for master }
245     it { should be_denied_for reporter }
246     it { should be_allowed_for :admin }
247     it { should be_denied_for guest }
248     it { should be_denied_for :user }
249     it { should be_denied_for :visitor }
250   end
251 end