debian-mirror-gitlab/spec/requests/api/discussions_spec.rb

76 lines
3.2 KiB
Ruby
Raw Normal View History

2019-12-26 22:10:19 +05:30
# frozen_string_literal: true
2018-03-27 19:54:05 +05:30
require 'spec_helper'
describe API::Discussions do
let(:user) { create(:user) }
2018-10-15 14:42:47 +05:30
let!(:project) { create(:project, :public, :repository, namespace: user.namespace) }
2019-03-02 22:35:43 +05:30
let(:private_user) { create(:user) }
2018-03-27 19:54:05 +05:30
before do
2018-10-15 14:42:47 +05:30
project.add_developer(user)
2018-03-27 19:54:05 +05:30
end
2019-12-04 20:38:33 +05:30
context 'when discussions have cross-reference system notes' do
2019-10-12 21:52:04 +05:30
let(:url) { "/projects/#{project.id}/merge_requests/#{merge_request.iid}/discussions" }
2019-12-04 20:38:33 +05:30
let(:notes_in_response) { json_response.first['notes'] }
2019-10-12 21:52:04 +05:30
2019-12-04 20:38:33 +05:30
it_behaves_like 'with cross-reference system notes'
2019-10-12 21:52:04 +05:30
end
2018-10-15 14:42:47 +05:30
context 'when noteable is an Issue' do
2018-03-27 19:54:05 +05:30
let!(:issue) { create(:issue, project: project, author: user) }
let!(:issue_note) { create(:discussion_note_on_issue, noteable: issue, project: project, author: user) }
2019-09-04 21:01:54 +05:30
it_behaves_like 'discussions API', 'projects', 'issues', 'iid', can_reply_to_individual_notes: true do
2018-03-27 19:54:05 +05:30
let(:parent) { project }
let(:noteable) { issue }
let(:note) { issue_note }
end
end
2018-10-15 14:42:47 +05:30
context 'when noteable is a Snippet' do
2018-03-27 19:54:05 +05:30
let!(:snippet) { create(:project_snippet, project: project, author: user) }
2020-04-22 19:07:51 +05:30
let!(:snippet_note) { create(:discussion_note_on_project_snippet, noteable: snippet, project: project, author: user) }
2018-03-27 19:54:05 +05:30
2018-10-15 14:42:47 +05:30
it_behaves_like 'discussions API', 'projects', 'snippets', 'id' do
2018-03-27 19:54:05 +05:30
let(:parent) { project }
let(:noteable) { snippet }
let(:note) { snippet_note }
end
end
2018-10-15 14:42:47 +05:30
context 'when noteable is a Merge Request' do
let!(:noteable) { create(:merge_request_with_diffs, source_project: project, target_project: project, author: user) }
let!(:note) { create(:discussion_note_on_merge_request, noteable: noteable, project: project, author: user) }
let!(:diff_note) { create(:diff_note_on_merge_request, noteable: noteable, project: project, author: user) }
let(:parent) { project }
2019-09-04 21:01:54 +05:30
it_behaves_like 'discussions API', 'projects', 'merge_requests', 'iid', can_reply_to_individual_notes: true
2018-10-15 14:42:47 +05:30
it_behaves_like 'diff discussions API', 'projects', 'merge_requests', 'iid'
it_behaves_like 'resolvable discussions API', 'projects', 'merge_requests', 'iid'
2020-03-13 15:44:24 +05:30
context "when position is for a previous commit on the merge request" do
it "returns a 400 bad request error because the line_code is old" do
# SHA taken from an earlier commit listed in spec/factories/merge_requests.rb
position = diff_note.position.to_h.merge(new_line: 'c1acaa58bbcbc3eafe538cb8274ba387047b69f8')
post api("/projects/#{project.id}/merge_requests/#{noteable['iid']}/discussions", user),
params: { body: 'hi!', position: position }
2020-04-08 14:13:33 +05:30
expect(response).to have_gitlab_http_status(:bad_request)
2020-03-13 15:44:24 +05:30
end
end
2018-10-15 14:42:47 +05:30
end
context 'when noteable is a Commit' do
let!(:noteable) { create(:commit, project: project, author: user) }
let!(:note) { create(:discussion_note_on_commit, commit_id: noteable.id, project: project, author: user) }
let!(:diff_note) { create(:diff_note_on_commit, commit_id: noteable.id, project: project, author: user) }
let(:parent) { project }
it_behaves_like 'discussions API', 'projects', 'repository/commits', 'id'
it_behaves_like 'diff discussions API', 'projects', 'repository/commits', 'id'
end
2018-03-27 19:54:05 +05:30
end