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:
Diffstat (limited to 'spec/controllers/projects/discussions_controller_spec.rb')
-rw-r--r--spec/controllers/projects/discussions_controller_spec.rb109
1 files changed, 85 insertions, 24 deletions
diff --git a/spec/controllers/projects/discussions_controller_spec.rb b/spec/controllers/projects/discussions_controller_spec.rb
index 0c8677ea4b9..8251b963563 100644
--- a/spec/controllers/projects/discussions_controller_spec.rb
+++ b/spec/controllers/projects/discussions_controller_spec.rb
@@ -2,18 +2,19 @@
require 'spec_helper'
-RSpec.describe Projects::DiscussionsController do
- let(:user) { create(:user) }
- let(:merge_request) { create(:merge_request) }
- let(:project) { merge_request.source_project }
- let(:note) { create(:discussion_note_on_merge_request, noteable: merge_request, project: project) }
- let(:discussion) { note.discussion }
+RSpec.describe Projects::DiscussionsController, feature_category: :team_planning do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:merge_request) { create(:merge_request, source_project: project) }
+ let_it_be(:issue) { create(:issue, project: project) }
+ let_it_be(:note, reload: true) { create(:discussion_note_on_merge_request, noteable: merge_request, project: project) }
+ let_it_be(:user) { create(:user) }
let(:request_params) do
{
namespace_id: project.namespace,
project_id: project,
- merge_request_id: merge_request,
+ noteable_type: 'merge_requests',
+ noteable_id: merge_request,
id: note.discussion_id
}
end
@@ -32,7 +33,7 @@ RSpec.describe Projects::DiscussionsController do
end
context 'when user is authorized to read the MR' do
- before do
+ before_all do
project.add_reporter(user)
end
@@ -43,21 +44,20 @@ RSpec.describe Projects::DiscussionsController do
end
it 'returns status 404 if MR does not exists' do
- merge_request.destroy!
-
- get :show, params: request_params, session: { format: :json }
+ get :show, params: request_params.merge(noteable_id: non_existing_record_id), session: { format: :json }
expect(response).to have_gitlab_http_status(:not_found)
end
end
context 'when user is authorized but note is LegacyDiffNote' do
- before do
+ before_all do
project.add_developer(user)
- note.update!(type: 'LegacyDiffNote')
end
it 'returns status 200' do
+ note.update!(type: 'LegacyDiffNote')
+
get :show, params: request_params, session: { format: :json }
expect(response).to have_gitlab_http_status(:ok)
@@ -79,7 +79,7 @@ RSpec.describe Projects::DiscussionsController do
end
context "when the user is authorized to resolve the discussion" do
- before do
+ before_all do
project.add_developer(user)
end
@@ -134,7 +134,6 @@ RSpec.describe Projects::DiscussionsController do
context 'diff discussion' do
let(:note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project) }
- let(:discussion) { note.discussion }
it "returns truncated diff lines" do
post :resolve, params: request_params
@@ -143,6 +142,40 @@ RSpec.describe Projects::DiscussionsController do
end
end
end
+
+ context 'on an Issue' do
+ let_it_be(:note, reload: true) { create(:discussion_note_on_issue, noteable: issue, project: project) }
+
+ let(:request_params) do
+ {
+ namespace_id: project.namespace,
+ project_id: project,
+ noteable_type: 'issues',
+ noteable_id: issue,
+ id: note.discussion_id
+ }
+ end
+
+ it 'resolves the discussion and returns status 200' do
+ post :resolve, params: request_params
+
+ expect(note.reload.resolved_at).not_to be_nil
+ expect(response).to have_gitlab_http_status(:ok)
+ end
+
+ context 'when resolvable_issue_threads is disabled' do
+ before do
+ stub_feature_flags(resolvable_issue_threads: false)
+ end
+
+ it 'does not resolve the discussion and returns status 404' do
+ post :resolve, params: request_params
+
+ expect(note.reload.resolved_at).to be_nil
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
end
end
@@ -162,7 +195,7 @@ RSpec.describe Projects::DiscussionsController do
end
context "when the user is authorized to resolve the discussion" do
- before do
+ before_all do
project.add_developer(user)
end
@@ -199,18 +232,46 @@ RSpec.describe Projects::DiscussionsController do
expect(response).to have_gitlab_http_status(:ok)
end
- context "when vue_mr_discussions cookie is present" do
- before do
- cookies[:vue_mr_discussions] = 'true'
+ it "renders discussion with serializer" do
+ expect_next_instance_of(DiscussionSerializer) do |instance|
+ expect(instance).to receive(:represent)
+ .with(instance_of(Discussion), { context: instance_of(described_class), render_truncated_diff_lines: true })
end
- it "renders discussion with serializer" do
- expect_next_instance_of(DiscussionSerializer) do |instance|
- expect(instance).to receive(:represent)
- .with(instance_of(Discussion), { context: instance_of(described_class), render_truncated_diff_lines: true })
- end
+ delete :unresolve, params: request_params
+ end
+ end
+
+ context 'on an Issue' do
+ let_it_be(:note, reload: true) { create(:discussion_note_on_issue, noteable: issue, project: project) }
+
+ let(:request_params) do
+ {
+ namespace_id: project.namespace,
+ project_id: project,
+ noteable_type: 'issues',
+ noteable_id: issue,
+ id: note.discussion_id
+ }
+ end
+
+ it 'unresolves the discussion and returns status 200' do
+ delete :unresolve, params: request_params
+
+ expect(note.reload.resolved_at).to be_nil
+ expect(response).to have_gitlab_http_status(:ok)
+ end
+ context 'when resolvable_issue_threads is disabled' do
+ before do
+ stub_feature_flags(resolvable_issue_threads: false)
+ end
+
+ it 'does not unresolve the discussion and returns status 404' do
delete :unresolve, params: request_params
+
+ expect(note.reload.resolved_at).not_to be_nil
+ expect(response).to have_gitlab_http_status(:not_found)
end
end
end