From 1123057ab792ac73b1611f4d3a9faf79369dd6da Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Wed, 26 Oct 2016 23:21:50 +0200 Subject: [PATCH] Feature: delegate all open discussions to Issue When a merge request can only be merged when all discussions are resolved. This feature allows to easily delegate those discussions to a new issue, while marking them as resolved in the merge request. The user is presented with a new issue, prepared with mentions of all unresolved discussions, including the first unresolved note of the discussion, time and link to the note. When the issue is created, the discussions in the merge request will get a system note directing the user to the newly created issue. --- .../projects/discussions_controller.rb | 4 +- app/controllers/projects/issues_controller.rb | 15 +- app/models/discussion.rb | 4 + app/models/merge_request.rb | 8 ++ app/models/note.rb | 2 +- app/services/discussions/base_service.rb | 4 + app/services/discussions/resolve_service.rb | 24 ++++ app/services/issuable_base_service.rb | 5 +- app/services/issues/base_service.rb | 8 ++ app/services/issues/build_service.rb | 50 +++++++ app/services/issues/create_service.rb | 14 +- app/services/system_note_service.rb | 8 ++ .../open/_unresolved_discussions.html.haml | 6 +- app/views/shared/issuable/_form.html.haml | 15 ++ .../unreleased/23589-open-issue-for-mr.yml | 5 + doc/api/issues.md | 3 +- .../img/preview_issue_for_discussions.png | Bin 0 -> 178361 bytes .../merge_request_discussion_resolution.md | 21 ++- lib/api/issues.rb | 32 +++-- .../projects/issues_controller_spec.rb | 60 ++++++++ ...e_for_discussions_in_merge_request_spec.rb | 76 ++++++++++ spec/models/discussion_spec.rb | 9 ++ spec/models/merge_request_spec.rb | 40 ++++++ spec/requests/api/issues_spec.rb | 26 ++++ .../discussions/resolve_service_spec.rb | 52 +++++++ spec/services/issues/build_service_spec.rb | 130 ++++++++++++++++++ spec/services/issues/create_service_spec.rb | 43 ++++++ spec/services/system_note_service_spec.rb | 28 ++++ 28 files changed, 670 insertions(+), 22 deletions(-) create mode 100644 app/services/discussions/base_service.rb create mode 100644 app/services/discussions/resolve_service.rb create mode 100644 app/services/issues/build_service.rb create mode 100644 changelogs/unreleased/23589-open-issue-for-mr.yml create mode 100644 doc/user/project/merge_requests/img/preview_issue_for_discussions.png create mode 100644 spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb create mode 100644 spec/services/discussions/resolve_service_spec.rb create mode 100644 spec/services/issues/build_service_spec.rb diff --git a/app/controllers/projects/discussions_controller.rb b/app/controllers/projects/discussions_controller.rb index d174e1145a7..148e39630e3 100644 --- a/app/controllers/projects/discussions_controller.rb +++ b/app/controllers/projects/discussions_controller.rb @@ -5,9 +5,7 @@ class Projects::DiscussionsController < Projects::ApplicationController before_action :authorize_resolve_discussion! def resolve - discussion.resolve!(current_user) - - MergeRequests::ResolvedDiscussionNotificationService.new(project, current_user).execute(merge_request) + Discussions::ResolveService.new(project, current_user, merge_request: merge_request).execute(discussion) render json: { resolved_by: discussion.resolved_by.try(:name), diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 4aea7bb62c4..4f66e01e0f7 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -46,8 +46,9 @@ class Projects::IssuesController < Projects::ApplicationController params[:issue] ||= ActionController::Parameters.new( assignee_id: "" ) + build_params = issue_params.merge(merge_request_for_resolving_discussions: merge_request_for_resolving_discussions) + @issue = @noteable = Issues::BuildService.new(project, current_user, build_params).execute - @issue = @noteable = @project.issues.new(issue_params) respond_with(@issue) end @@ -75,7 +76,9 @@ class Projects::IssuesController < Projects::ApplicationController end def create - @issue = Issues::CreateService.new(project, current_user, issue_params.merge(request: request)).execute + extra_params = { request: request, + merge_request_for_resolving_discussions: merge_request_for_resolving_discussions } + @issue = Issues::CreateService.new(project, current_user, issue_params.merge(extra_params)).execute respond_to do |format| format.html do @@ -169,6 +172,14 @@ class Projects::IssuesController < Projects::ApplicationController alias_method :awardable, :issue alias_method :spammable, :issue + def merge_request_for_resolving_discussions + return unless merge_request_iid = params[:merge_request_for_resolving_discussions] + + @merge_request_for_resolving_discussions ||= MergeRequestsFinder.new(current_user, project_id: project.id). + execute. + find_by(iid: merge_request_iid) + end + def authorize_read_issue! return render_404 unless can?(current_user, :read_issue, @issue) end diff --git a/app/models/discussion.rb b/app/models/discussion.rb index 75a85563235..bbe813db823 100644 --- a/app/models/discussion.rb +++ b/app/models/discussion.rb @@ -88,6 +88,10 @@ class Discussion @first_note ||= @notes.first end + def first_note_to_resolve + @first_note_to_resolve ||= notes.detect(&:to_be_resolved?) + end + def last_note @last_note ||= @notes.last end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index bfb016df46d..a6fc9bb120d 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -480,6 +480,14 @@ class MergeRequest < ActiveRecord::Base @diff_discussions ||= self.notes.diff_notes.discussions end + def resolvable_discussions + @resolvable_discussions ||= diff_discussions.select(&:to_be_resolved?) + end + + def discussions_can_be_resolved_by?(user) + resolvable_discussions.all? { |discussion| discussion.can_resolve?(user) } + end + def find_diff_discussion(discussion_id) notes = self.notes.diff_notes.where(discussion_id: discussion_id).fresh.to_a return if notes.empty? diff --git a/app/models/note.rb b/app/models/note.rb index 5b50ca285c3..08bd08743ef 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -99,7 +99,7 @@ class Note < ActiveRecord::Base end def discussions - Discussion.for_notes(all) + Discussion.for_notes(fresh) end def grouped_diff_discussions diff --git a/app/services/discussions/base_service.rb b/app/services/discussions/base_service.rb new file mode 100644 index 00000000000..e4dfe6e71bb --- /dev/null +++ b/app/services/discussions/base_service.rb @@ -0,0 +1,4 @@ +module Discussions + class BaseService < ::BaseService + end +end diff --git a/app/services/discussions/resolve_service.rb b/app/services/discussions/resolve_service.rb new file mode 100644 index 00000000000..0437195f588 --- /dev/null +++ b/app/services/discussions/resolve_service.rb @@ -0,0 +1,24 @@ +module Discussions + class ResolveService < Discussions::BaseService + def execute(one_or_more_discussions) + Array(one_or_more_discussions).each { |discussion| resolve_discussion(discussion) } + end + + def resolve_discussion(discussion) + return unless discussion.can_resolve?(current_user) + + discussion.resolve!(current_user) + + MergeRequests::ResolvedDiscussionNotificationService.new(project, current_user).execute(merge_request) + SystemNoteService.discussion_continued_in_issue(discussion, project, current_user, follow_up_issue) if follow_up_issue + end + + def merge_request + params[:merge_request] + end + + def follow_up_issue + params[:follow_up_issue] + end + end +end diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index ce68e433ab8..b5f63cc5a1a 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -120,9 +120,10 @@ class IssuableBaseService < BaseService def merge_slash_commands_into_params!(issuable) description, command_params = SlashCommands::InterpretService.new(project, current_user). - execute(params[:description], issuable) + execute(params[:description], issuable) - params[:description] = description + # Avoid a description already set on an issuable to be overwritten by a nil + params[:description] = description if params.has_key?(:description) params.merge!(command_params) end diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index 9ea3ce084ba..742e834df97 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -1,5 +1,13 @@ module Issues class BaseService < ::IssuableBaseService + attr_reader :merge_request_for_resolving_discussions + + def initialize(*args) + super + + @merge_request_for_resolving_discussions ||= params.delete(:merge_request_for_resolving_discussions) + end + def hook_data(issue, action) issue_data = issue.to_hook_data(current_user) issue_url = Gitlab::UrlBuilder.build(issue) diff --git a/app/services/issues/build_service.rb b/app/services/issues/build_service.rb new file mode 100644 index 00000000000..a63982f60c8 --- /dev/null +++ b/app/services/issues/build_service.rb @@ -0,0 +1,50 @@ +module Issues + class BuildService < Issues::BaseService + def execute + @issue = project.issues.new(issue_params) + end + + def issue_params_with_info_from_merge_request + return {} unless merge_request_for_resolving_discussions + + { title: title_from_merge_request, description: description_from_merge_request } + end + + def title_from_merge_request + "Follow-up from \"#{merge_request_for_resolving_discussions.title}\"" + end + + def description_from_merge_request + if merge_request_for_resolving_discussions.resolvable_discussions.empty? + return "There are no unresolved discussions. "\ + "Review the conversation in #{merge_request_for_resolving_discussions.to_reference}" + end + + description = "The following discussions from #{merge_request_for_resolving_discussions.to_reference} should be addressed:" + [description, *items_for_discussions].join("\n\n") + end + + def items_for_discussions + merge_request_for_resolving_discussions.resolvable_discussions.map { |discussion| item_for_discussion(discussion) } + end + + def item_for_discussion(discussion) + first_note = discussion.first_note_to_resolve + other_note_count = discussion.notes.size - 1 + creation_time = first_note.created_at.to_s(:medium) + note_url = Gitlab::UrlBuilder.build(first_note) + + discussion_info = "- [ ] #{first_note.author.to_reference} commented in a discussion on [#{creation_time}](#{note_url}): " + discussion_info << " (+#{other_note_count} #{'comment'.pluralize(other_note_count)})" if other_note_count > 0 + + note_without_block_quotes = Banzai::Filter::BlockquoteFenceFilter.new(first_note.note).call + quote = ">>>\n#{note_without_block_quotes}\n>>>" + + [discussion_info, quote].join("\n\n") + end + + def issue_params + @issue_params ||= issue_params_with_info_from_merge_request.merge(params.slice(:title, :description)) + end + end +end diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb index ea1690f3e38..d2eb46ac41b 100644 --- a/app/services/issues/create_service.rb +++ b/app/services/issues/create_service.rb @@ -4,7 +4,8 @@ module Issues @request = params.delete(:request) @api = params.delete(:api) - @issue = project.issues.new + issue_attributes = params.merge(merge_request_for_resolving_discussions: merge_request_for_resolving_discussions) + @issue = BuildService.new(project, current_user, issue_attributes).execute create(@issue) end @@ -18,6 +19,17 @@ module Issues notification_service.new_issue(issuable, current_user) todo_service.new_issue(issuable, current_user) user_agent_detail_service.create + + if merge_request_for_resolving_discussions.try(:discussions_can_be_resolved_by?, current_user) + resolve_discussions_in_merge_request(issuable) + end + end + + def resolve_discussions_in_merge_request(issue) + Discussions::ResolveService.new(project, current_user, + merge_request: merge_request_for_resolving_discussions, + follow_up_issue: issue). + execute(merge_request_for_resolving_discussions.resolvable_discussions) end private diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index 3cf6467804f..8b48d90f60b 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -163,6 +163,14 @@ module SystemNoteService create_note(noteable: merge_request, project: project, author: author, note: body) end + def discussion_continued_in_issue(discussion, project, author, issue) + body = "Added #{issue.to_reference} to continue this discussion" + note_attributes = discussion.reply_attributes.merge(project: project, author: author, note: body) + note_attributes[:type] = note_attributes.delete(:note_type) + + create_note(note_attributes) + end + # Called when the title of a Noteable is changed # # noteable - Noteable object that responds to `title` diff --git a/app/views/projects/merge_requests/widget/open/_unresolved_discussions.html.haml b/app/views/projects/merge_requests/widget/open/_unresolved_discussions.html.haml index 35d5677ee37..e094f97f3b6 100644 --- a/app/views/projects/merge_requests/widget/open/_unresolved_discussions.html.haml +++ b/app/views/projects/merge_requests/widget/open/_unresolved_discussions.html.haml @@ -3,4 +3,8 @@ This merge request has unresolved discussions %p - Please resolve these discussions to allow this merge request to be merged. \ No newline at end of file + Please resolve these discussions + - if @project.issues_enabled? && can?(current_user, :create_issue, @project) + or + = link_to "open an issue to resolve them later", new_namespace_project_issue_path(@project.namespace, @project, merge_request_for_resolving_discussions: @merge_request.iid) + to allow this merge request to be merged. diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 2f05093f435..bdb00bfa33c 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -42,6 +42,21 @@ = render 'shared/issuable/form/branch_chooser', issuable: issuable, form: form +- if @merge_request_for_resolving_discussions + .form-group + .col-sm-10.col-sm-offset-2 + - if @merge_request_for_resolving_discussions.discussions_can_be_resolved_by?(current_user) + = icon('exclamation-triangle') + Creating this issue will mark all discussions in + = link_to @merge_request_for_resolving_discussions.to_reference, merge_request_path(@merge_request_for_resolving_discussions) + as resolved. + = hidden_field_tag 'merge_request_for_resolving_discussions', @merge_request_for_resolving_discussions.iid + - else + = icon('exclamation-triangle') + You can't automatically mark all discussions in + = link_to @merge_request_for_resolving_discussions.to_reference, merge_request_path(@merge_request_for_resolving_discussions) + as resolved. Ask someone with sufficient rights to resolve the them. + - is_footer = !(issuable.is_a?(MergeRequest) && issuable.new_record?) .row-content-block{class: (is_footer ? "footer-block" : "middle-block")} - if issuable.new_record? diff --git a/changelogs/unreleased/23589-open-issue-for-mr.yml b/changelogs/unreleased/23589-open-issue-for-mr.yml new file mode 100644 index 00000000000..cea48b85254 --- /dev/null +++ b/changelogs/unreleased/23589-open-issue-for-mr.yml @@ -0,0 +1,5 @@ +--- +title: Resolve all discussions in a merge request by creating an issue collecting + them +merge_request: 7180 +author: Bob Van Landuyt diff --git a/doc/api/issues.md b/doc/api/issues.md index 16f8e32c82a..119125bcd3d 100644 --- a/doc/api/issues.md +++ b/doc/api/issues.md @@ -330,6 +330,7 @@ POST /projects/:id/issues | `labels` | string | no | Comma-separated label names for an issue | | `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) | | `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | +| `merge_request_for_resolving_discussions` | integer | no | The IID of a merge request in which to resolve all issues. This will fill the issue with a default description and mark all discussions as resolved. When passing a description or title, these values will take precedence over the default values. | ```bash curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues?title=Issues%20with%20auth&labels=bug @@ -506,7 +507,7 @@ Example response: ## Subscribe to an issue -Subscribes the authenticated user to an issue to receive notifications. +Subscribes the authenticated user to an issue to receive notifications. If the user is already subscribed to the issue, the status code `304` is returned. diff --git a/doc/user/project/merge_requests/img/preview_issue_for_discussions.png b/doc/user/project/merge_requests/img/preview_issue_for_discussions.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdd387676c095fdb3383378a74ec92ee0b337b8 GIT binary patch literal 178361 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,`C86ew}hcCAw{L<-R2rt5;eVW4e|Bz9_+G;-*L* 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 aH-r|Gy7;|7*zAly{?T(9aS7Tacr|Vw(T$D0%XJ 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%0D8OBiu&7u>XrD>wlP2krdrF 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 [Introduced][ce-7125] in GitLab 8.14. -You can prevent merge requests from being merged until all discussions are resolved. +You can prevent merge requests from being merged until all discussions are +resolved. Navigate to your project's settings page, select the **Only allow merge requests to be merged if all discussions are resolved** check @@ -50,8 +51,26 @@ are resolved. ![Only allow merge if all the discussions are resolved message](img/only_allow_merge_if_all_discussions_are_resolved_msg.png) +### Move all unresolved discussions in a merge request to an issue + +> [Introduced][ce-7180] (Currently on Backlog) + +To delegate unresolved discussions to a new issue you can click the link **open +an issue to resolve them later**. + +This will prepare an issue with content referring to the merge request and +discussions. + +![Issue mentioning discussions in a merge request](img/preview_issue_for_discussions.png) + +Hitting **Submit issue** will cause all discussions to be marked as resolved and +add a note referring to the newly created issue. + +You can now proceed to merge the merge request from the UI. + [ce-5022]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5022 [ce-7125]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7125 +[ce-7180]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7180 [resolve-discussion-button]: img/resolve_discussion_button.png [resolve-comment-button]: img/resolve_comment_button.png [discussion-view]: img/discussion_view.png diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 049b4fb214c..cfb7c45de8e 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -28,6 +28,14 @@ module API new_params end + + def merge_request_for_resolving_discussions + return unless merge_request_iid = params[:merge_request_for_resolving_discussions] + + @merge_request_for_resolving_discussions ||= MergeRequestsFinder.new(current_user, project_id: user_project.id). + execute. + find_by(iid: merge_request_iid) + end end resource :issues do @@ -151,24 +159,28 @@ module API # Create a new project issue # # Parameters: - # id (required) - The ID of a project - # title (required) - The title of an issue - # description (optional) - The description of an issue - # assignee_id (optional) - The ID of a user to assign issue - # milestone_id (optional) - The ID of a milestone to assign issue - # labels (optional) - The labels of an issue - # created_at (optional) - Date time string, ISO 8601 formatted - # due_date (optional) - Date time string in the format YEAR-MONTH-DAY - # confidential (optional) - Boolean parameter if the issue should be confidential + # id (required) - The ID of a project + # title (required) - The title of an issue + # description (optional) - The description of an issue + # assignee_id (optional) - The ID of a user to assign issue + # milestone_id (optional) - The ID of a milestone to assign issue + # labels (optional) - The labels of an issue + # created_at (optional) - Date time string, ISO 8601 formatted + # due_date (optional) - Date time string in the format YEAR-MONTH-DAY + # confidential (optional) - Boolean parameter if the issue should be confidential + # merge_request_for_resolving_discussions (optional) - The IID of a merge request for which to resolve discussions # Example Request: # POST /projects/:id/issues post ':id/issues' do required_attributes! [:title] - keys = [:title, :description, :assignee_id, :milestone_id, :due_date, :confidential, :labels] + keys = [:title, :description, :assignee_id, :milestone_id, :due_date, :confidential, :labels, :merge_request_for_resolving_discussions] keys << :created_at if current_user.admin? || user_project.owner == current_user attrs = attributes_for_keys(keys) + attrs[:labels] = params[:labels] if params[:labels] + attrs[:merge_request_for_resolving_discussions] = merge_request_for_resolving_discussions if params[:merge_request_for_resolving_discussions] + # Convert and filter out invalid confidential flags attrs['confidential'] = to_boolean(attrs['confidential']) attrs.delete('confidential') if attrs['confidential'].nil? diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb index 90419368f22..dbe5ddccbcf 100644 --- a/spec/controllers/projects/issues_controller_spec.rb +++ b/spec/controllers/projects/issues_controller_spec.rb @@ -55,6 +55,30 @@ describe Projects::IssuesController do end describe 'GET #new' do + context 'internal issue tracker' do + before do + sign_in(user) + project.team << [user, :developer] + end + + it 'builds a new issue' do + get :new, namespace_id: project.namespace.path, project_id: project + + expect(assigns(:issue)).to be_a_new(Issue) + end + + it 'fills in an issue for a merge request' do + project_with_repository = create(:project) + project_with_repository.team << [user, :developer] + mr = create(:merge_request_with_diff_notes, source_project: project_with_repository) + + get :new, namespace_id: project_with_repository.namespace.path, project_id: project_with_repository, merge_request_for_resolving_discussions: mr.iid + + expect(assigns(:issue).title).not_to be_empty + expect(assigns(:issue).description).not_to be_empty + end + end + context 'external issue tracker' do it 'redirects to the external issue tracker' do external = double(new_issue_path: 'https://example.com/issues/new') @@ -272,6 +296,42 @@ describe Projects::IssuesController do end describe 'POST #create' do + context 'resolving discussions in MergeRequest' do + let(:discussion) { Discussion.for_diff_notes([create(:diff_note_on_merge_request)]).first } + let(:merge_request) { discussion.noteable } + let(:project) { merge_request.source_project } + + before do + project.team << [user, :master] + sign_in user + end + + let(:merge_request_params) do + { merge_request_for_resolving_discussions: merge_request.iid } + end + + def post_issue(issue_params) + post :create, namespace_id: project.namespace.to_param, project_id: project.to_param, issue: issue_params, merge_request_for_resolving_discussions: merge_request.iid + end + + it 'creates an issue for the project' do + expect { post_issue({ title: 'Hello' }) }.to change { project.issues.reload.size }.by(1) + end + + it "doesn't overwrite given params" do + post_issue(description: 'Manually entered description') + + expect(assigns(:issue).description).to eq('Manually entered description') + end + + it 'resolves the discussion in the merge_request' do + post_issue(title: 'Hello') + discussion.first_note.reload + + expect(discussion.resolved?).to eq(true) + end + end + context 'Akismet is enabled' do before do allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true) diff --git a/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb b/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb new file mode 100644 index 00000000000..762cab0c0e1 --- /dev/null +++ b/spec/features/issues/create_issue_for_discussions_in_merge_request_spec.rb @@ -0,0 +1,76 @@ +require 'rails_helper' + +feature 'Resolving all open discussions in a merge request from an issue', feature: true do + let(:user) { create(:user) } + let(:project) { create(:project, only_allow_merge_if_all_discussions_are_resolved: true) } + let(:merge_request) { create(:merge_request, source_project: project) } + let!(:discussion) { Discussion.for_diff_notes([create(:diff_note_on_merge_request, noteable: merge_request, project: project)]).first } + + before do + project.team << [user, :master] + login_as user + end + + context 'with the internal tracker disabled' do + before do + project.project_feature.update_attribute(:issues_access_level, ProjectFeature::DISABLED) + visit namespace_project_merge_request_path(project.namespace, project, merge_request) + end + + it 'does not show a link to create a new issue' do + expect(page).not_to have_link 'open an issue to resolve them later' + end + end + + context 'merge request has discussions that need to be resolved' do + before do + visit namespace_project_merge_request_path(project.namespace, project, merge_request) + end + + it 'shows a warning that the merge request contains unresolved discussions' do + expect(page).to have_content 'This merge request has unresolved discussions' + end + + it 'has a link to resolve all discussions by creating an issue' do + page.within '.mr-widget-body' do + expect(page).to have_link 'open an issue to resolve them later', href: new_namespace_project_issue_path(project.namespace, project, merge_request_for_resolving_discussions: merge_request.iid) + end + end + + context 'creating an issue for discussions' do + before do + page.click_link 'open an issue to resolve them later', href: new_namespace_project_issue_path(project.namespace, project, merge_request_for_resolving_discussions: merge_request.iid) + end + + it 'shows an issue with the title filled in' do + title_field = page.find_field('issue[title]') + + expect(title_field.value).to include(merge_request.title) + end + + it 'has a mention of the discussion in the description' do + description_field = page.find_field('issue[description]') + + expect(description_field.value).to include(discussion.first_note.note) + end + + it 'has a hidden field for the merge request' do + merge_request_field = find('#merge_request_for_resolving_discussions', visible: false) + + expect(merge_request_field.value).to eq(merge_request.iid.to_s) + end + + it 'can create a new issue for the project' do + expect { click_button 'Submit issue' }.to change { project.issues.reload.size }.by(1) + end + + it 'resolves the discussion in the merge request' do + click_button 'Submit issue' + + discussion.first_note.reload + + expect(discussion.resolved?).to eq(true) + end + end + end +end diff --git a/spec/models/discussion_spec.rb b/spec/models/discussion_spec.rb index 2a67c60b978..bc32fadd391 100644 --- a/spec/models/discussion_spec.rb +++ b/spec/models/discussion_spec.rb @@ -521,6 +521,15 @@ describe Discussion, model: true do end end + describe "#first_note_to_resolve" do + it "returns the first not that still needs to be resolved" do + allow(first_note).to receive(:to_be_resolved?).and_return(false) + allow(second_note).to receive(:to_be_resolved?).and_return(true) + + expect(subject.first_note_to_resolve).to eq(second_note) + end + end + describe "#collapsed?" do context "when a diff discussion" do before do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 2cc818af6c7..925232169f1 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1124,6 +1124,46 @@ describe MergeRequest, models: true do allow(subject).to receive(:diff_discussions).and_return([first_discussion, second_discussion, third_discussion]) end + describe '#resolvable_discussions' do + before do + allow(first_discussion).to receive(:to_be_resolved?).and_return(true) + allow(second_discussion).to receive(:to_be_resolved?).and_return(false) + allow(third_discussion).to receive(:to_be_resolved?).and_return(false) + end + + it 'includes only discussions that need to be resolved' do + expect(subject.resolvable_discussions).to eq([first_discussion]) + end + end + + describe '#discussions_can_be_resolved_by? user' do + let(:user) { build(:user) } + + context 'all discussions can be resolved by the user' do + before do + allow(first_discussion).to receive(:can_resolve?).with(user).and_return(true) + allow(second_discussion).to receive(:can_resolve?).with(user).and_return(true) + allow(third_discussion).to receive(:can_resolve?).with(user).and_return(true) + end + + it 'allows a user to resolve the discussions' do + expect(subject.discussions_can_be_resolved_by?(user)).to be(true) + end + end + + context 'one discussion cannot be resolved by the user' do + before do + allow(first_discussion).to receive(:can_resolve?).with(user).and_return(true) + allow(second_discussion).to receive(:can_resolve?).with(user).and_return(true) + allow(third_discussion).to receive(:can_resolve?).with(user).and_return(false) + end + + it 'allows a user to resolve the discussions' do + expect(subject.discussions_can_be_resolved_by?(user)).to be(false) + end + end + end + describe "#discussions_resolvable?" do context "when all discussions are unresolvable" do before do diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 5700f800c2e..553983575c4 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -692,6 +692,32 @@ describe API::Issues, api: true do ]) end + context 'resolving issues in a merge request' do + let(:discussion) { Discussion.for_diff_notes([create(:diff_note_on_merge_request)]).first } + let(:merge_request) { discussion.noteable } + let(:project) { merge_request.source_project } + before do + project.team << [user, :master] + post api("/projects/#{project.id}/issues", user), + title: 'New Issue', + merge_request_for_resolving_discussions: merge_request.iid + end + + it 'creates a new project issue' do + expect(response).to have_http_status(:created) + end + + it 'resolves the discussions in a merge request' do + discussion.first_note.reload + + expect(discussion.resolved?).to be(true) + end + + it 'assigns a description to the issue mentioning the merge request' do + expect(json_response['description']).to include(merge_request.to_reference) + end + end + context 'with due date' do it 'creates a new project issue' do due_date = 2.weeks.from_now.strftime('%Y-%m-%d') diff --git a/spec/services/discussions/resolve_service_spec.rb b/spec/services/discussions/resolve_service_spec.rb new file mode 100644 index 00000000000..12c3cdf28c6 --- /dev/null +++ b/spec/services/discussions/resolve_service_spec.rb @@ -0,0 +1,52 @@ +require 'spec_helper' + +describe Discussions::ResolveService do + describe '#execute' do + let(:discussion) { Discussion.for_diff_notes([create(:diff_note_on_merge_request)]).first } + let(:project) { merge_request.project } + let(:merge_request) { discussion.noteable } + let(:user) { create(:user) } + let(:service) { described_class.new(discussion.noteable.project, user, merge_request: merge_request) } + + before do + project.team << [user, :master] + end + + it "doesn't resolve discussions the user can't resolve" do + expect(discussion).to receive(:can_resolve?).with(user).and_return(false) + + service.execute(discussion) + + expect(discussion.resolved?).to be(false) + end + + it 'resolves the discussion' do + service.execute(discussion) + + expect(discussion.resolved?).to be(true) + end + + it 'executes the notification service' do + expect_any_instance_of(MergeRequests::ResolvedDiscussionNotificationService).to receive(:execute).with(discussion.noteable) + + service.execute(discussion) + end + + it 'adds a system note to the discussion' do + issue = create(:issue, project: project) + + expect(SystemNoteService).to receive(:discussion_continued_in_issue).with(discussion, project, user, issue) + service = described_class.new(project, user, merge_request: merge_request, follow_up_issue: issue) + service.execute(discussion) + end + + it 'can resolve multiple discussions at once' do + other_discussion = Discussion.for_diff_notes([create(:diff_note_on_merge_request, noteable: discussion.noteable, project: discussion.noteable.source_project)]).first + + service.execute([discussion, other_discussion]) + + expect(discussion.resolved?).to be(true) + expect(other_discussion.resolved?).to be(true) + end + end +end diff --git a/spec/services/issues/build_service_spec.rb b/spec/services/issues/build_service_spec.rb new file mode 100644 index 00000000000..4cfba35c830 --- /dev/null +++ b/spec/services/issues/build_service_spec.rb @@ -0,0 +1,130 @@ +require 'spec_helper.rb' + +describe Issues::BuildService, services: true do + let(:project) { create(:project) } + let(:user) { create(:user) } + + before do + project.team << [user, :developer] + end + + context 'for discussions in a merge request' do + let(:merge_request) { create(:merge_request_with_diff_notes, source_project: project) } + let(:issue) { described_class.new(project, user, merge_request_for_resolving_discussions: merge_request).execute } + + def position_on_line(line_number) + Gitlab::Diff::Position.new( + old_path: "files/ruby/popen.rb", + new_path: "files/ruby/popen.rb", + old_line: nil, + new_line: line_number, + diff_refs: merge_request.diff_refs + ) + end + + describe '#items_for_discussions' do + it 'has an item for each discussion' do + create(:diff_note_on_merge_request, noteable: merge_request, project: merge_request.source_project, position: position_on_line(13)) + service = described_class.new(project, user, merge_request_for_resolving_discussions: merge_request) + + service.execute + + expect(service.items_for_discussions.size).to eq(2) + end + end + + describe '#item_for_discussion' do + let(:service) { described_class.new(project, user, merge_request_for_resolving_discussions: merge_request) } + + it 'mentions the author of the note' do + discussion = Discussion.new([create(:diff_note_on_merge_request, author: create(:user, username: 'author'))]) + expect(service.item_for_discussion(discussion)).to include('@author') + end + + it 'wraps the note in a blockquote' do + note_text = "This is a string\n"\ + ">>>\n"\ + "with a blockquote\n"\ + "> That has a quote\n"\ + ">>>\n" + note_result = "This is a string\n"\ + "> with a blockquote\n"\ + "> > That has a quote\n" + discussion = Discussion.new([create(:diff_note_on_merge_request, note: note_text)]) + expect(service.item_for_discussion(discussion)).to include(">>>\n#{note_result}\n>>>") + end + end + + describe '#execute' do + it 'has the merge request reference in the title' do + expect(issue.title).to include(merge_request.title) + end + + it 'has the reference of the merge request in the description' do + expect(issue.description).to include(merge_request.to_reference) + end + + it 'does not assign title when a title was given' do + issue = described_class.new(project, user, + merge_request_for_resolving_discussions: merge_request, + title: 'What an issue').execute + + expect(issue.title).to eq('What an issue') + end + + it 'does not assign description when a description was given' do + issue = described_class.new(project, user, + merge_request_for_resolving_discussions: merge_request, + description: 'Fix at your earliest conveignance').execute + + expect(issue.description).to eq('Fix at your earliest conveignance') + end + + describe 'with multiple discussions' do + before do + create(:diff_note_on_merge_request, noteable: merge_request, project: merge_request.target_project, position: position_on_line(15)) + end + + it 'mentions all the authors in the description' do + authors = merge_request.diff_discussions.map(&:author) + + expect(issue.description).to include(*authors.map(&:to_reference)) + end + + it 'has a link for each unresolved discussion in the description' do + notes = merge_request.diff_discussions.map(&:first_note) + links = notes.map { |note| Gitlab::UrlBuilder.build(note) } + + expect(issue.description).to include(*links) + end + + it 'mentions additional notes' do + create_list(:diff_note_on_merge_request, 2, noteable: merge_request, project: merge_request.target_project, position: position_on_line(15)) + + expect(issue.description).to include('(+2 comments)') + end + end + end + end + + context 'For a merge request without discussions' do + let(:merge_request) { create(:merge_request, source_project: project) } + + describe '#execute' do + it 'mentions the merge request in the description' do + issue = described_class.new(project, user, merge_request_for_resolving_discussions: merge_request).execute + + expect(issue.description).to include("Review the conversation in #{merge_request.to_reference}") + end + end + end + + describe '#execute' do + it 'builds a new issues with given params' do + issue = described_class.new(project, user, title: 'Issue #1', description: 'Issue description').execute + + expect(issue.title).to eq('Issue #1') + expect(issue.description).to eq('Issue description') + end + end +end diff --git a/spec/services/issues/create_service_spec.rb b/spec/services/issues/create_service_spec.rb index 5c0331ebe66..8bde61ee336 100644 --- a/spec/services/issues/create_service_spec.rb +++ b/spec/services/issues/create_service_spec.rb @@ -136,5 +136,48 @@ describe Issues::CreateService, services: true do end it_behaves_like 'new issuable record that supports slash commands' + + context 'for a merge request' do + let(:discussion) { Discussion.for_diff_notes([create(:diff_note_on_merge_request)]).first } + let(:merge_request) { discussion.noteable } + let(:project) { merge_request.source_project } + let(:opts) { { merge_request_for_resolving_discussions: merge_request } } + + before do + project.team << [user, :master] + end + + it 'resolves the discussion for the merge request' do + described_class.new(project, user, opts).execute + discussion.first_note.reload + + expect(discussion.resolved?).to be(true) + end + + it 'added a system note to the discussion' do + described_class.new(project, user, opts).execute + + reloaded_discussion = MergeRequest.find(merge_request.id).discussions.first + + expect(reloaded_discussion.last_note.system).to eq(true) + end + + it 'assigns the title and description for the issue' do + issue = described_class.new(project, user, opts).execute + + expect(issue.title).not_to be_nil + expect(issue.description).not_to be_nil + end + + it 'can set nil explicityly to the title and description' do + issue = described_class.new(project, user, + merge_request_for_resolving_discussions: merge_request, + description: nil, + title: nil).execute + + expect(issue.description).to be_nil + expect(issue.title).to be_nil + end + end end end diff --git a/spec/services/system_note_service_spec.rb b/spec/services/system_note_service_spec.rb index 435cfb07292..07a9d8e1997 100644 --- a/spec/services/system_note_service_spec.rb +++ b/spec/services/system_note_service_spec.rb @@ -712,4 +712,32 @@ describe SystemNoteService, services: true do end end end + + describe '.discussion_continued_in_issue' do + let(:discussion) { Discussion.for_diff_notes([create(:diff_note_on_merge_request)]).first } + let(:merge_request) { discussion.noteable } + let(:project) { merge_request.source_project } + let(:issue) { create(:issue, project: project) } + let(:user) { create(:user) } + + def reloaded_merge_request + MergeRequest.find(merge_request.id) + end + + before do + project.team << [user, :developer] + end + + it 'creates a new note in the discussion' do + # we need to completely rebuild the merge request object, or the `@discussions` on the merge request are not reloaded. + expect { SystemNoteService.discussion_continued_in_issue(discussion, project, user, issue) }. + to change { reloaded_merge_request.discussions.first.notes.size }.by(1) + end + + it 'mentions the created issue in the system note' do + note = SystemNoteService.discussion_continued_in_issue(discussion, project, user, issue) + + expect(note.note).to include(issue.to_reference) + end + end end