From b7bf1f3a9d8c406024a212e6098f049334cda8e3 Mon Sep 17 00:00:00 2001
From: Robert Schilling <rschilling@student.tugraz.at>
Date: Mon, 21 Nov 2016 15:06:32 +0100
Subject: Grapify the projects snippet API

---
 spec/requests/api/project_snippets_spec.rb | 64 +++++++++++++++++++++++-------
 1 file changed, 50 insertions(+), 14 deletions(-)

(limited to 'spec')

diff --git a/spec/requests/api/project_snippets_spec.rb b/spec/requests/api/project_snippets_spec.rb
index 01148f0a05e..1c25fd04339 100644
--- a/spec/requests/api/project_snippets_spec.rb
+++ b/spec/requests/api/project_snippets_spec.rb
@@ -3,10 +3,12 @@ require 'rails_helper'
 describe API::API, api: true do
   include ApiHelpers
 
+  let(:project) { create(:empty_project, :public) }
+  let(:admin) { create(:admin) }
+
   describe 'GET /projects/:project_id/snippets/:id' do
     # TODO (rspeicher): Deprecated; remove in 9.0
     it 'always exposes expires_at as nil' do
-      admin = create(:admin)
       snippet = create(:project_snippet, author: admin)
 
       get api("/projects/#{snippet.project.id}/snippets/#{snippet.id}", admin)
@@ -17,9 +19,9 @@ describe API::API, api: true do
   end
 
   describe 'GET /projects/:project_id/snippets/' do
+    let(:user) { create(:user) }
+
     it 'returns all snippets available to team member' do
-      project = create(:project, :public)
-      user = create(:user)
       project.team << [user, :developer]
       public_snippet = create(:project_snippet, :public, project: project)
       internal_snippet = create(:project_snippet, :internal, project: project)
@@ -34,8 +36,6 @@ describe API::API, api: true do
     end
 
     it 'hides private snippets from regular user' do
-      project = create(:project, :public)
-      user = create(:user)
       create(:project_snippet, :private, project: project)
 
       get api("/projects/#{project.id}/snippets/", user)
@@ -45,16 +45,16 @@ describe API::API, api: true do
   end
 
   describe 'POST /projects/:project_id/snippets/' do
-    it 'creates a new snippet' do
-      admin = create(:admin)
-      project = create(:project)
-      params = {
+    let(:params) do
+      {
         title: 'Test Title',
         file_name: 'test.rb',
         code: 'puts "hello world"',
         visibility_level: Gitlab::VisibilityLevel::PUBLIC
       }
+    end
 
+    it 'creates a new snippet' do
       post api("/projects/#{project.id}/snippets/", admin), params
 
       expect(response).to have_http_status(201)
@@ -64,12 +64,20 @@ describe API::API, api: true do
       expect(snippet.file_name).to eq(params[:file_name])
       expect(snippet.visibility_level).to eq(params[:visibility_level])
     end
+
+    it 'returns 400 for missing parameters' do
+      params.delete(:title)
+
+      post api("/projects/#{project.id}/snippets/", admin), params
+
+      expect(response).to have_http_status(400)
+    end
   end
 
   describe 'PUT /projects/:project_id/snippets/:id/' do
+    let(:snippet) { create(:project_snippet, author: admin) }
+
     it 'updates snippet' do
-      admin = create(:admin)
-      snippet = create(:project_snippet, author: admin)
       new_content = 'New content'
 
       put api("/projects/#{snippet.project.id}/snippets/#{snippet.id}/", admin), code: new_content
@@ -78,9 +86,24 @@ describe API::API, api: true do
       snippet.reload
       expect(snippet.content).to eq(new_content)
     end
+
+    it 'returns 404 for invalid snippet id' do
+      put api("/projects/#{snippet.project.id}/snippets/1234", admin), title: 'foo'
+
+      expect(response).to have_http_status(404)
+      expect(json_response['message']).to eq('404 Snippet Not Found')
+    end
+
+    it 'returns 400 for missing parameters' do
+      put api("/projects/#{project.id}/snippets/1234", admin)
+
+      expect(response).to have_http_status(400)
+    end
   end
 
   describe 'DELETE /projects/:project_id/snippets/:id/' do
+    let(:snippet) { create(:project_snippet, author: admin) }
+
     it 'deletes snippet' do
       admin = create(:admin)
       snippet = create(:project_snippet, author: admin)
@@ -89,18 +112,31 @@ describe API::API, api: true do
 
       expect(response).to have_http_status(200)
     end
+
+    it 'returns 404 for invalid snippet id' do
+      delete api("/projects/#{snippet.project.id}/snippets/1234", admin)
+
+      expect(response).to have_http_status(404)
+      expect(json_response['message']).to eq('404 Snippet Not Found')
+    end
   end
 
   describe 'GET /projects/:project_id/snippets/:id/raw' do
-    it 'returns raw text' do
-      admin = create(:admin)
-      snippet = create(:project_snippet, author: admin)
+    let(:snippet) { create(:project_snippet, author: admin) }
 
+    it 'returns raw text' do
       get api("/projects/#{snippet.project.id}/snippets/#{snippet.id}/raw", admin)
 
       expect(response).to have_http_status(200)
       expect(response.content_type).to eq 'text/plain'
       expect(response.body).to eq(snippet.content)
     end
+
+    it 'returns 404 for invalid snippet id' do
+      delete api("/projects/#{snippet.project.id}/snippets/1234", admin)
+
+      expect(response).to have_http_status(404)
+      expect(json_response['message']).to eq('404 Snippet Not Found')
+    end
   end
 end
-- 
cgit v1.2.1