Commit ba6049c6 authored by Felipe Artur's avatar Felipe Artur

EE-port Move issue related_branches to service

parent 98fee756
...@@ -131,7 +131,7 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -131,7 +131,7 @@ class Projects::IssuesController < Projects::ApplicationController
end end
def related_branches def related_branches
@related_branches = @issue.related_branches(current_user) @related_branches = Issues::RelatedBranchesService.new(project, current_user).execute(issue)
respond_to do |format| respond_to do |format|
format.json do format.json do
......
...@@ -177,24 +177,6 @@ class Issue < ActiveRecord::Base ...@@ -177,24 +177,6 @@ class Issue < ActiveRecord::Base
"#{project.to_reference(from, full: full)}#{reference}" "#{project.to_reference(from, full: full)}#{reference}"
end end
# All branches containing the current issue's ID, except for
# those with a merge request open referencing the current issue.
# rubocop: disable CodeReuse/ServiceClass
def related_branches(current_user)
branches_with_iid = project.repository.branch_names.select do |branch|
branch =~ /\A#{iid}-(?!\d+-stable)/i
end
branches_with_merge_request =
Issues::ReferencedMergeRequestsService
.new(project, current_user)
.referenced_merge_requests(self)
.map(&:source_branch)
branches_with_iid - branches_with_merge_request
end
# rubocop: enable CodeReuse/ServiceClass
def related_issues(current_user, preload: nil) def related_issues(current_user, preload: nil)
related_issues = Issue related_issues = Issue
.select(['issues.*', 'issue_links.id AS issue_link_id']) .select(['issues.*', 'issue_links.id AS issue_link_id'])
......
# frozen_string_literal: true
# This service fetches all branches containing the current issue's ID, except for
# those with a merge request open referencing the current issue.
module Issues
class RelatedBranchesService < Issues::BaseService
def execute(issue)
branches_with_iid_of(issue) - branches_with_merge_request_for(issue)
end
private
def branches_with_merge_request_for(issue)
Issues::ReferencedMergeRequestsService
.new(project, current_user)
.referenced_merge_requests(issue)
.map(&:source_branch)
end
def branches_with_iid_of(issue)
project.repository.branch_names.select do |branch|
branch =~ /\A#{issue.iid}-(?!\d+-stable)/i
end
end
end
end
...@@ -268,45 +268,6 @@ describe Issue do ...@@ -268,45 +268,6 @@ describe Issue do
end end
end end
describe '#related_branches' do
let(:user) { create(:admin) }
before do
allow(subject.project.repository).to receive(:branch_names)
.and_return(["mpempe", "#{subject.iid}mepmep", subject.to_branch_name, "#{subject.iid}-branch"])
# Without this stub, the `create(:merge_request)` above fails because it can't find
# the source branch. This seems like a reasonable compromise, in comparison with
# setting up a full repo here.
allow_any_instance_of(MergeRequest).to receive(:create_merge_request_diff)
end
it "selects the right branches when there are no referenced merge requests" do
expect(subject.related_branches(user)).to eq([subject.to_branch_name, "#{subject.iid}-branch"])
end
it "selects the right branches when there is a referenced merge request" do
merge_request = create(:merge_request, { description: "Closes ##{subject.iid}",
source_project: subject.project,
source_branch: "#{subject.iid}-branch" })
merge_request.create_cross_references!(user)
referenced_merge_requests = Issues::ReferencedMergeRequestsService
.new(subject.project, user)
.referenced_merge_requests(subject)
expect(referenced_merge_requests).not_to be_empty
expect(subject.related_branches(user)).to eq([subject.to_branch_name])
end
it 'excludes stable branches from the related branches' do
allow(subject.project.repository).to receive(:branch_names)
.and_return(["#{subject.iid}-0-stable"])
expect(subject.related_branches(user)).to eq []
end
end
describe '#related_issues' do describe '#related_issues' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:authorized_project) { create(:project) } let(:authorized_project) { create(:project) }
......
require 'spec_helper'
describe Issues::RelatedBranchesService do
let(:user) { create(:admin) }
let(:issue) { create(:issue) }
subject { described_class.new(issue.project, user) }
describe '#execute' do
before do
allow(issue.project.repository).to receive(:branch_names).and_return(["mpempe", "#{issue.iid}mepmep", issue.to_branch_name, "#{issue.iid}-branch"])
end
it "selects the right branches when there are no referenced merge requests" do
expect(subject.execute(issue)).to eq([issue.to_branch_name, "#{issue.iid}-branch"])
end
it "selects the right branches when there is a referenced merge request" do
merge_request = create(:merge_request, { description: "Closes ##{issue.iid}",
source_project: issue.project,
source_branch: "#{issue.iid}-branch" })
merge_request.create_cross_references!(user)
referenced_merge_requests = Issues::ReferencedMergeRequestsService
.new(issue.project, user)
.referenced_merge_requests(issue)
expect(referenced_merge_requests).not_to be_empty
expect(subject.execute(issue)).to eq([issue.to_branch_name])
end
it 'excludes stable branches from the related branches' do
allow(issue.project.repository).to receive(:branch_names)
.and_return(["#{issue.iid}-0-stable"])
expect(subject.execute(issue)).to eq []
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment