Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-06-09 03:08:47 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-06-09 03:08:47 +0300
commit7258040618b5093cbb65035d2af4718db3a993a4 (patch)
treea33b762d2aa4bc086f39256bf296ab3b617e2ab5 /spec/requests/api/suggestions_spec.rb
parentd48cbe178636a01db031327b93b6e3b279c12aa5 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/requests/api/suggestions_spec.rb')
-rw-r--r--spec/requests/api/suggestions_spec.rb140
1 files changed, 116 insertions, 24 deletions
diff --git a/spec/requests/api/suggestions_spec.rb b/spec/requests/api/suggestions_spec.rb
index df3f72e3447..ffb8c811622 100644
--- a/spec/requests/api/suggestions_spec.rb
+++ b/spec/requests/api/suggestions_spec.rb
@@ -7,8 +7,7 @@ describe API::Suggestions do
let(:user) { create(:user) }
let(:merge_request) do
- create(:merge_request, source_project: project,
- target_project: project)
+ create(:merge_request, source_project: project, target_project: project)
end
let(:position) do
@@ -19,26 +18,45 @@ describe API::Suggestions do
diff_refs: merge_request.diff_refs)
end
+ let(:position2) do
+ Gitlab::Diff::Position.new(old_path: "files/ruby/popen.rb",
+ new_path: "files/ruby/popen.rb",
+ old_line: nil,
+ new_line: 15,
+ diff_refs: merge_request.diff_refs)
+ end
+
let(:diff_note) do
+ create(:diff_note_on_merge_request,
+ noteable: merge_request,
+ position: position,
+ project: project)
+ end
+
+ let(:diff_note2) do
create(:diff_note_on_merge_request, noteable: merge_request,
- position: position,
- project: project)
+ position: position2,
+ project: project)
+ end
+
+ let(:suggestion) do
+ create(:suggestion, note: diff_note,
+ from_content: " raise RuntimeError, \"System commands must be given as an array of strings\"\n",
+ to_content: " raise RuntimeError, 'Explosion'\n # explosion?")
+ end
+
+ let(:unappliable_suggestion) do
+ create(:suggestion, :unappliable, note: diff_note2)
end
describe "PUT /suggestions/:id/apply" do
let(:url) { "/suggestions/#{suggestion.id}/apply" }
context 'when successfully applies patch' do
- let(:suggestion) do
- create(:suggestion, note: diff_note,
- from_content: " raise RuntimeError, \"System commands must be given as an array of strings\"\n",
- to_content: " raise RuntimeError, 'Explosion'\n # explosion?")
- end
-
- it 'returns 200 with json content' do
+ it 'renders an ok response and returns json content' do
project.add_maintainer(user)
- put api(url, user), params: { id: suggestion.id }
+ put api(url, user)
expect(response).to have_gitlab_http_status(:ok)
expect(json_response)
@@ -48,31 +66,105 @@ describe API::Suggestions do
end
context 'when not able to apply patch' do
- let(:suggestion) do
- create(:suggestion, :unappliable, note: diff_note)
- end
+ let(:url) { "/suggestions/#{unappliable_suggestion.id}/apply" }
- it 'returns 400 with json content' do
+ it 'renders a bad request error and returns json content' do
project.add_maintainer(user)
- put api(url, user), params: { id: suggestion.id }
+ put api(url, user)
expect(response).to have_gitlab_http_status(:bad_request)
- expect(json_response).to eq({ 'message' => 'Suggestion is not appliable' })
+ expect(json_response).to eq({ 'message' => 'A suggestion is not applicable.' })
+ end
+ end
+
+ context 'when suggestion is not found' do
+ let(:url) { "/suggestions/foo-123/apply" }
+
+ it 'renders a not found error and returns json content' do
+ project.add_maintainer(user)
+
+ put api(url, user)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(json_response).to eq({ 'message' => 'Suggestion is not applicable as the suggestion was not found.' })
end
end
context 'when unauthorized' do
- let(:suggestion) do
- create(:suggestion, note: diff_note,
- from_content: " raise RuntimeError, \"System commands must be given as an array of strings\"\n",
- to_content: " raise RuntimeError, 'Explosion'\n # explosion?")
+ it 'renders a forbidden error and returns json content' do
+ project.add_reporter(user)
+
+ put api(url, user)
+
+ expect(response).to have_gitlab_http_status(:forbidden)
+ expect(json_response).to eq({ 'message' => '403 Forbidden' })
end
+ end
+ end
+
+ describe "PUT /suggestions/batch_apply" do
+ let(:suggestion2) do
+ create(:suggestion, note: diff_note2,
+ from_content: " \"PWD\" => path\n",
+ to_content: " *** FOO ***\n")
+ end
- it 'returns 403 with json content' do
+ let(:url) { "/suggestions/batch_apply" }
+
+ context 'when successfully applies multiple patches as a batch' do
+ it 'renders an ok response and returns json content' do
+ project.add_maintainer(user)
+
+ put api(url, user), params: { ids: [suggestion.id, suggestion2.id] }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to all(include('id', 'from_line', 'to_line',
+ 'appliable', 'applied',
+ 'from_content', 'to_content'))
+ end
+ end
+
+ context 'when not able to apply one or more of the patches' do
+ it 'renders a bad request error and returns json content' do
+ project.add_maintainer(user)
+
+ put api(url, user),
+ params: { ids: [suggestion.id, unappliable_suggestion.id] }
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response).to eq({ 'message' => 'A suggestion is not applicable.' })
+ end
+ end
+
+ context 'with missing suggestions' do
+ it 'renders a not found error and returns json content if any suggestion is not found' do
+ project.add_maintainer(user)
+
+ put api(url, user), params: { ids: [suggestion.id, 'foo-123'] }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(json_response)
+ .to eq({ 'message' => 'Suggestions are not applicable as one or more suggestions were not found.' })
+ end
+
+ it 'renders a bad request error and returns json content when no suggestions are provided' do
+ project.add_maintainer(user)
+
+ put api(url, user), params: {}
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response)
+ .to eq({ 'error' => "ids is missing" })
+ end
+ end
+
+ context 'when unauthorized' do
+ it 'renders a forbidden error and returns json content' do
project.add_reporter(user)
- put api(url, user), params: { id: suggestion.id }
+ put api(url, user),
+ params: { ids: [suggestion.id, suggestion2.id] }
expect(response).to have_gitlab_http_status(:forbidden)
expect(json_response).to eq({ 'message' => '403 Forbidden' })