summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-12-20 15:05:57 +0100
committerRémy Coutable <remy@rymai.me>2016-12-20 16:11:10 +0100
commit0349e83aa74b42c3f564fd1bc34104300a41ddf5 (patch)
tree23052c64868d7cfac8d7061e8f751a9c6b75a2f2
parent5652da8bb4ea26acd35a241683e242439fefdd33 (diff)
downloadgitlab-ce-4269-public-files-api.tar.gz
Improve specs for Files API4269-public-files-api
Signed-off-by: Rémy Coutable <remy@rymai.me>
-rw-r--r--spec/requests/api/files_spec.rb74
-rw-r--r--spec/requests/api/repositories_spec.rb11
-rw-r--r--spec/support/api/repositories_shared_context.rb10
3 files changed, 61 insertions, 34 deletions
diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb
index 4dd312e2852..685da28c673 100644
--- a/spec/requests/api/files_spec.rb
+++ b/spec/requests/api/files_spec.rb
@@ -4,7 +4,14 @@ describe API::Files, api: true do
include ApiHelpers
let(:user) { create(:user) }
let!(:project) { create(:project, namespace: user.namespace ) }
+ let(:guest) { create(:user).tap { |u| create(:project_member, :guest, user: u, project: project) } }
let(:file_path) { 'files/ruby/popen.rb' }
+ let(:params) do
+ {
+ file_path: file_path,
+ ref: 'master'
+ }
+ end
let(:author_email) { FFaker::Internet.email }
# I have to remove periods from the end of the name
@@ -24,14 +31,11 @@ describe API::Files, api: true do
before { project.team << [user, :developer] }
describe "GET /projects/:id/repository/files" do
+ let(:route) { "/projects/#{project.id}/repository/files" }
+
shared_examples_for 'repository files' do
it "returns file info" do
- params = {
- file_path: file_path,
- ref: 'master',
- }
-
- get api("/projects/#{project.id}/repository/files", current_user), params
+ get api(route, current_user), params
expect(response).to have_http_status(200)
expect(json_response['file_path']).to eq(file_path)
@@ -39,36 +43,60 @@ describe API::Files, api: true do
expect(json_response['last_commit_id']).to eq('570e7b2abdd848b95f2f578043fc23bd6f6fd24d')
expect(Base64.decode64(json_response['content']).lines.first).to eq("require 'fileutils'\n")
end
+
+ context 'when no params are given' do
+ it_behaves_like '400 response' do
+ let(:request) { get api(route, current_user) }
+ end
+ end
+
+ context 'when file_path does not exist' do
+ let(:params) do
+ {
+ file_path: 'app/models/application.rb',
+ ref: 'master',
+ }
+ end
+
+ it_behaves_like '404 response' do
+ let(:request) { get api(route, current_user), params }
+ let(:message) { '404 File Not Found' }
+ end
+ end
+
+ context 'when repository is disabled' do
+ include_context 'disabled repository'
+
+ it_behaves_like '403 response' do
+ let(:request) { get api(route, current_user), params }
+ end
+ end
end
- context 'when unauthenticated' do
+ context 'when unauthenticated', 'and project is public' do
it_behaves_like 'repository files' do
let(:project) { create(:project, :public) }
let(:current_user) { nil }
end
end
- context 'when authenticated' do
- it_behaves_like 'repository files' do
- let(:current_user) { user }
+ context 'when unauthenticated', 'and project is private' do
+ it_behaves_like '404 response' do
+ let(:request) { get api(route), params }
+ let(:message) { '404 Project Not Found' }
end
end
- it "returns a 400 bad request if no params given" do
- get api("/projects/#{project.id}/repository/files", user)
-
- expect(response).to have_http_status(400)
+ context 'when authenticated', 'as a developer' do
+ it_behaves_like 'repository files' do
+ let(:current_user) { user }
+ end
end
- it "returns a 404 if such file does not exist" do
- params = {
- file_path: 'app/models/application.rb',
- ref: 'master',
- }
-
- get api("/projects/#{project.id}/repository/files", user), params
-
- expect(response).to have_http_status(404)
+ context 'when authenticated', 'as a guest' do
+ it_behaves_like '403 response' do
+ let(:request) { get api(route, guest), params }
+ end
end
end
diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb
index fe28ad1d1a1..0b19fa38c55 100644
--- a/spec/requests/api/repositories_spec.rb
+++ b/spec/requests/api/repositories_spec.rb
@@ -11,17 +11,6 @@ describe API::Repositories, api: true do
let!(:project) { create(:project, creator_id: user.id) }
let!(:master) { create(:project_member, :master, user: user, project: project) }
- shared_context 'disabled repository' do
- before do
- project.project_feature.update_attributes!(
- repository_access_level: ProjectFeature::DISABLED,
- merge_requests_access_level: ProjectFeature::DISABLED,
- builds_access_level: ProjectFeature::DISABLED
- )
- expect(project.feature_available?(:repository, current_user)).to be false
- end
- end
-
describe "GET /projects/:id/repository/tree" do
let(:route) { "/projects/#{project.id}/repository/tree" }
diff --git a/spec/support/api/repositories_shared_context.rb b/spec/support/api/repositories_shared_context.rb
new file mode 100644
index 00000000000..ea38fe4f5b8
--- /dev/null
+++ b/spec/support/api/repositories_shared_context.rb
@@ -0,0 +1,10 @@
+shared_context 'disabled repository' do
+ before do
+ project.project_feature.update_attributes!(
+ repository_access_level: ProjectFeature::DISABLED,
+ merge_requests_access_level: ProjectFeature::DISABLED,
+ builds_access_level: ProjectFeature::DISABLED
+ )
+ expect(project.feature_available?(:repository, current_user)).to be false
+ end
+end