diff options
Diffstat (limited to 'spec/controllers/projects/discussions_controller_spec.rb')
-rw-r--r-- | spec/controllers/projects/discussions_controller_spec.rb | 109 |
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 |