Commit 1cd43c38 authored by Tiago Botelho's avatar Tiago Botelho Committed by Gabriel Mazetto

refactors git push service spec code

parent 02b25598
require 'spec_helper' require 'spec_helper'
describe GitPushService do describe GitPushService, services: true do
include RepoHelpers include RepoHelpers
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let(:blankrev) { Gitlab::Git::BLANK_SHA }
let(:oldrev) { sample_commit.parent_id }
let(:newrev) { sample_commit.id }
let(:ref) { 'refs/heads/master' }
before do before do
project.team << [user, :master] project.team << [user, :master]
@blankrev = Gitlab::Git::BLANK_SHA
@oldrev = sample_commit.parent_id
@newrev = sample_commit.id
@ref = 'refs/heads/master'
end end
describe 'Push branches' do describe 'Push branches' do
let(:oldrev) { @oldrev }
let(:newrev) { @newrev }
subject do subject do
execute_service(project, user, oldrev, newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
end end
context 'new branch' do context 'new branch' do
let(:oldrev) { @blankrev } let(:oldrev) { blankrev }
it { is_expected.to be_truthy } it { is_expected.to be_truthy }
...@@ -51,7 +48,7 @@ describe GitPushService do ...@@ -51,7 +48,7 @@ describe GitPushService do
end end
context 'rm branch' do context 'rm branch' do
let(:newrev) { @blankrev } let(:newrev) { blankrev }
it { is_expected.to be_truthy } it { is_expected.to be_truthy }
...@@ -70,24 +67,20 @@ describe GitPushService do ...@@ -70,24 +67,20 @@ describe GitPushService do
end end
describe "Git Push Data" do describe "Git Push Data" do
before do let(:commit) { project.commit(newrev) }
service = execute_service(project, user, @oldrev, @newrev, @ref )
@push_data = service.push_data
@commit = project.commit(@newrev)
end
subject { @push_data } subject { push_data_from_service(project, user, oldrev, newrev, ref) }
it { is_expected.to include(object_kind: 'push') } it { is_expected.to include(object_kind: 'push') }
it { is_expected.to include(before: @oldrev) } it { is_expected.to include(before: oldrev) }
it { is_expected.to include(after: @newrev) } it { is_expected.to include(after: newrev) }
it { is_expected.to include(ref: @ref) } it { is_expected.to include(ref: ref) }
it { is_expected.to include(user_id: user.id) } it { is_expected.to include(user_id: user.id) }
it { is_expected.to include(user_name: user.name) } it { is_expected.to include(user_name: user.name) }
it { is_expected.to include(project_id: project.id) } it { is_expected.to include(project_id: project.id) }
context "with repository data" do context "with repository data" do
subject { @push_data[:repository] } subject { push_data_from_service(project, user, oldrev, newrev, ref)[:repository] }
it { is_expected.to include(name: project.name) } it { is_expected.to include(name: project.name) }
it { is_expected.to include(url: project.url_to_repo) } it { is_expected.to include(url: project.url_to_repo) }
...@@ -96,7 +89,7 @@ describe GitPushService do ...@@ -96,7 +89,7 @@ describe GitPushService do
end end
context "with commits" do context "with commits" do
subject { @push_data[:commits] } subject { push_data_from_service(project, user, oldrev, newrev, ref)[:commits] }
it { is_expected.to be_an(Array) } it { is_expected.to be_an(Array) }
it 'has 1 element' do it 'has 1 element' do
...@@ -104,11 +97,11 @@ describe GitPushService do ...@@ -104,11 +97,11 @@ describe GitPushService do
end end
context "the commit" do context "the commit" do
subject { @push_data[:commits].first } subject { push_data_from_service(project, user, oldrev, newrev, ref)[:commits].first }
it { is_expected.to include(id: @commit.id) } it { is_expected.to include(id: commit.id) }
it { is_expected.to include(message: @commit.safe_message) } it { is_expected.to include(message: commit.safe_message) }
it { expect(subject[:timestamp].in_time_zone).to eq(@commit.date.in_time_zone) } it { expect(subject[:timestamp].in_time_zone).to eq(commit.date.in_time_zone) }
it do it do
is_expected.to include( is_expected.to include(
url: [ url: [
...@@ -116,23 +109,23 @@ describe GitPushService do ...@@ -116,23 +109,23 @@ describe GitPushService do
project.namespace.to_param, project.namespace.to_param,
project.to_param, project.to_param,
'commit', 'commit',
@commit.id commit.id
].join('/') ].join('/')
) )
end end
context "with a author" do context "with a author" do
subject { @push_data[:commits].first[:author] } subject { push_data_from_service(project, user, oldrev, newrev, ref)[:commits].first[:author] }
it { is_expected.to include(name: @commit.author_name) } it { is_expected.to include(name: commit.author_name) }
it { is_expected.to include(email: @commit.author_email) } it { is_expected.to include(email: commit.author_email) }
end end
end end
end end
end end
describe "Pipelines" do describe "Pipelines" do
subject { execute_service(project, user, @oldrev, @newrev, @ref) } subject { execute_service(project, user, oldrev, newrev, ref) }
before do before do
stub_ci_pipeline_to_return_yaml_file stub_ci_pipeline_to_return_yaml_file
...@@ -145,29 +138,26 @@ describe GitPushService do ...@@ -145,29 +138,26 @@ describe GitPushService do
end end
describe "Push Event" do describe "Push Event" do
before do let!(:push_data) { push_data_from_service(project, user, oldrev, newrev, ref) }
service = execute_service(project, user, @oldrev, @newrev, @ref ) let(:event) { Event.find_by_action(Event::PUSHED) }
@event = Event.find_by_action(Event::PUSHED)
@push_data = service.push_data
end
it { expect(@event).not_to be_nil } it { expect(event).not_to be_nil }
it { expect(@event.project).to eq(project) } it { expect(event.project).to eq(project) }
it { expect(@event.action).to eq(Event::PUSHED) } it { expect(event.action).to eq(Event::PUSHED) }
it { expect(@event.data).to eq(@push_data) } it { expect(event.data).to eq(push_data) }
context "Updates merge requests" do context "Updates merge requests" do
it "when pushing a new branch for the first time" do it "when pushing a new branch for the first time" do
expect(UpdateMergeRequestsWorker).to receive(:perform_async) expect(UpdateMergeRequestsWorker).to receive(:perform_async)
.with(project.id, user.id, @blankrev, 'newrev', 'refs/heads/master') .with(project.id, user.id, blankrev, 'newrev', ref)
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' ) execute_service(project, user, blankrev, 'newrev', ref )
end end
end end
context "Sends System Push data" do context "Sends System Push data" do
it "when pushing on a branch" do it "when pushing on a branch" do
expect(SystemHookPushWorker).to receive(:perform_async).with(@push_data, :push_hooks) expect(SystemHookPushWorker).to receive(:perform_async).with(push_data, :push_hooks)
execute_service(project, user, @oldrev, @newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
end end
end end
end end
...@@ -177,13 +167,13 @@ describe GitPushService do ...@@ -177,13 +167,13 @@ describe GitPushService do
it "calls the copy attributes method for the first push to the default branch" do it "calls the copy attributes method for the first push to the default branch" do
expect(project.repository).to receive(:copy_gitattributes).with('master') expect(project.repository).to receive(:copy_gitattributes).with('master')
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master') execute_service(project, user, blankrev, 'newrev', ref)
end end
it "calls the copy attributes method for changes to the default branch" do it "calls the copy attributes method for changes to the default branch" do
expect(project.repository).to receive(:copy_gitattributes).with('refs/heads/master') expect(project.repository).to receive(:copy_gitattributes).with(ref)
execute_service(project, user, 'oldrev', 'newrev', 'refs/heads/master') execute_service(project, user, 'oldrev', 'newrev', ref)
end end
end end
...@@ -196,7 +186,7 @@ describe GitPushService do ...@@ -196,7 +186,7 @@ describe GitPushService do
it "does not call copy attributes method" do it "does not call copy attributes method" do
expect(project.repository).not_to receive(:copy_gitattributes) expect(project.repository).not_to receive(:copy_gitattributes)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
end end
end end
end end
...@@ -206,7 +196,7 @@ describe GitPushService do ...@@ -206,7 +196,7 @@ describe GitPushService do
it "when pushing a branch for the first time" do it "when pushing a branch for the first time" do
expect(project).to receive(:execute_hooks) expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master") expect(project.default_branch).to eq("master")
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' ) execute_service(project, user, blankrev, 'newrev', ref)
expect(project.protected_branches).not_to be_empty expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.first.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER]) expect(project.protected_branches.first.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER])
expect(project.protected_branches.first.merge_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER]) expect(project.protected_branches.first.merge_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER])
...@@ -217,7 +207,7 @@ describe GitPushService do ...@@ -217,7 +207,7 @@ describe GitPushService do
expect(project).to receive(:execute_hooks) expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master") expect(project.default_branch).to eq("master")
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' ) execute_service(project, user, blankrev, 'newrev', ref)
expect(project.protected_branches).to be_empty expect(project.protected_branches).to be_empty
end end
...@@ -227,7 +217,7 @@ describe GitPushService do ...@@ -227,7 +217,7 @@ describe GitPushService do
expect(project).to receive(:execute_hooks) expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master") expect(project.default_branch).to eq("master")
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' ) execute_service(project, user, blankrev, 'newrev', ref)
expect(project.protected_branches).not_to be_empty expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::DEVELOPER]) expect(project.protected_branches.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::DEVELOPER])
...@@ -242,7 +232,7 @@ describe GitPushService do ...@@ -242,7 +232,7 @@ describe GitPushService do
expect(project.default_branch).to eq("master") expect(project.default_branch).to eq("master")
expect_any_instance_of(ProtectedBranches::CreateService).not_to receive(:execute) expect_any_instance_of(ProtectedBranches::CreateService).not_to receive(:execute)
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' ) execute_service(project, user, blankrev, 'newrev', ref)
expect(project.protected_branches).not_to be_empty expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::NO_ACCESS]) expect(project.protected_branches.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::NO_ACCESS])
...@@ -254,7 +244,7 @@ describe GitPushService do ...@@ -254,7 +244,7 @@ describe GitPushService do
expect(project).to receive(:execute_hooks) expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master") expect(project.default_branch).to eq("master")
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' ) execute_service(project, user, blankrev, 'newrev', ref)
expect(project.protected_branches).not_to be_empty expect(project.protected_branches).not_to be_empty
expect(project.protected_branches.first.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER]) expect(project.protected_branches.first.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER])
expect(project.protected_branches.first.merge_access_levels.map(&:access_level)).to eq([Gitlab::Access::DEVELOPER]) expect(project.protected_branches.first.merge_access_levels.map(&:access_level)).to eq([Gitlab::Access::DEVELOPER])
...@@ -262,7 +252,7 @@ describe GitPushService do ...@@ -262,7 +252,7 @@ describe GitPushService do
it "when pushing new commits to existing branch" do it "when pushing new commits to existing branch" do
expect(project).to receive(:execute_hooks) expect(project).to receive(:execute_hooks)
execute_service(project, user, 'oldrev', 'newrev', 'refs/heads/master' ) execute_service(project, user, 'oldrev', 'newrev', ref)
end end
end end
end end
...@@ -292,7 +282,7 @@ describe GitPushService do ...@@ -292,7 +282,7 @@ describe GitPushService do
it "creates a note if a pushed commit mentions an issue" do it "creates a note if a pushed commit mentions an issue" do
expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, commit_author) expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, commit_author)
execute_service(project, user, @oldrev, @newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
end end
it "only creates a cross-reference note if one doesn't already exist" do it "only creates a cross-reference note if one doesn't already exist" do
...@@ -300,7 +290,7 @@ describe GitPushService do ...@@ -300,7 +290,7 @@ describe GitPushService do
expect(SystemNoteService).not_to receive(:cross_reference).with(issue, commit, commit_author) expect(SystemNoteService).not_to receive(:cross_reference).with(issue, commit, commit_author)
execute_service(project, user, @oldrev, @newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
end end
it "defaults to the pushing user if the commit's author is not known" do it "defaults to the pushing user if the commit's author is not known" do
...@@ -310,16 +300,16 @@ describe GitPushService do ...@@ -310,16 +300,16 @@ describe GitPushService do
) )
expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, user) expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, user)
execute_service(project, user, @oldrev, @newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
end end
it "finds references in the first push to a non-default branch" do it "finds references in the first push to a non-default branch" do
allow(project.repository).to receive(:commits_between).with(@blankrev, @newrev).and_return([]) allow(project.repository).to receive(:commits_between).with(blankrev, newrev).and_return([])
allow(project.repository).to receive(:commits_between).with("master", @newrev).and_return([commit]) allow(project.repository).to receive(:commits_between).with("master", newrev).and_return([commit])
expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, commit_author) expect(SystemNoteService).to receive(:cross_reference).with(issue, commit, commit_author)
execute_service(project, user, @blankrev, @newrev, 'refs/heads/other' ) execute_service(project, user, blankrev, newrev, 'refs/heads/other')
end end
end end
...@@ -349,14 +339,14 @@ describe GitPushService do ...@@ -349,14 +339,14 @@ describe GitPushService do
context "while saving the 'first_mentioned_in_commit_at' metric for an issue" do context "while saving the 'first_mentioned_in_commit_at' metric for an issue" do
it 'sets the metric for referenced issues' do it 'sets the metric for referenced issues' do
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
expect(issue.reload.metrics.first_mentioned_in_commit_at).to be_like_time(commit_time) expect(issue.reload.metrics.first_mentioned_in_commit_at).to be_like_time(commit_time)
end end
it 'does not set the metric for non-referenced issues' do it 'does not set the metric for non-referenced issues' do
non_referenced_issue = create(:issue, project: project) non_referenced_issue = create(:issue, project: project)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
expect(non_referenced_issue.reload.metrics.first_mentioned_in_commit_at).to be_nil expect(non_referenced_issue.reload.metrics.first_mentioned_in_commit_at).to be_nil
end end
...@@ -388,18 +378,18 @@ describe GitPushService do ...@@ -388,18 +378,18 @@ describe GitPushService do
context "to default branches" do context "to default branches" do
it "closes issues" do it "closes issues" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(Issue.find(issue.id)).to be_closed expect(Issue.find(issue.id)).to be_closed
end end
it "adds a note indicating that the issue is now closed" do it "adds a note indicating that the issue is now closed" do
expect(SystemNoteService).to receive(:change_status).with(issue, project, commit_author, "closed", closing_commit) expect(SystemNoteService).to receive(:change_status).with(issue, project, commit_author, "closed", closing_commit)
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
end end
it "doesn't create additional cross-reference notes" do it "doesn't create additional cross-reference notes" do
expect(SystemNoteService).not_to receive(:cross_reference) expect(SystemNoteService).not_to receive(:cross_reference)
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
end end
end end
...@@ -411,11 +401,11 @@ describe GitPushService do ...@@ -411,11 +401,11 @@ describe GitPushService do
it "creates cross-reference notes" do it "creates cross-reference notes" do
expect(SystemNoteService).to receive(:cross_reference).with(issue, closing_commit, commit_author) expect(SystemNoteService).to receive(:cross_reference).with(issue, closing_commit, commit_author)
execute_service(project, user, @oldrev, @newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
end end
it "doesn't close issues" do it "doesn't close issues" do
execute_service(project, user, @oldrev, @newrev, @ref ) execute_service(project, user, oldrev, newrev, ref)
expect(Issue.find(issue.id)).to be_opened expect(Issue.find(issue.id)).to be_opened
end end
end end
...@@ -432,11 +422,12 @@ describe GitPushService do ...@@ -432,11 +422,12 @@ describe GitPushService do
stub_jira_urls("JIRA-1") stub_jira_urls("JIRA-1")
allow(closing_commit).to receive_messages({ allow(closing_commit).to receive_messages({
issue_closing_regex: Regexp.new(Gitlab.config.gitlab.issue_closing_pattern), issue_closing_regex: Regexp.new(Gitlab.config.gitlab.issue_closing_pattern),
safe_message: message, safe_message: message,
author_name: commit_author.name, author_name: commit_author.name,
author_email: commit_author.email author_email: commit_author.email
}) })
allow(JIRA::Resource::Remotelink).to receive(:all).and_return([]) allow(JIRA::Resource::Remotelink).to receive(:all).and_return([])
allow(project.repository).to receive_messages(commits_between: [closing_commit]) allow(project.repository).to receive_messages(commits_between: [closing_commit])
...@@ -450,7 +441,7 @@ describe GitPushService do ...@@ -450,7 +441,7 @@ describe GitPushService do
let(:message) { "this is some work.\n\nrelated to JIRA-1" } let(:message) { "this is some work.\n\nrelated to JIRA-1" }
it "initiates one api call to jira server to mention the issue" do it "initiates one api call to jira server to mention the issue" do
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with( expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: /mentioned this issue in/ body: /mentioned this issue in/
...@@ -460,7 +451,11 @@ describe GitPushService do ...@@ -460,7 +451,11 @@ describe GitPushService do
context "closing an issue" do context "closing an issue" do
let(:message) { "this is some work.\n\ncloses JIRA-1" } let(:message) { "this is some work.\n\ncloses JIRA-1" }
let(:comment_body) { { body: "Issue solved with [#{closing_commit.id}|http://#{Gitlab.config.gitlab.host}/#{project.path_with_namespace}/commit/#{closing_commit.id}]." }.to_json } let(:comment_body) do
{
body: "Issue solved with [#{closing_commit.id}|http://#{Gitlab.config.gitlab.host}/#{project.path_with_namespace}/commit/#{closing_commit.id}]."
}.to_json
end
before do before do
open_issue = JIRA::Resource::Issue.new(jira_tracker.client, attrs: { "id" => "JIRA-1" }) open_issue = JIRA::Resource::Issue.new(jira_tracker.client, attrs: { "id" => "JIRA-1" })
...@@ -474,13 +469,13 @@ describe GitPushService do ...@@ -474,13 +469,13 @@ describe GitPushService do
context "using right markdown" do context "using right markdown" do
it "initiates one api call to jira server to close the issue" do it "initiates one api call to jira server to close the issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(WebMock).to have_requested(:post, jira_api_transition_url('JIRA-1')).once expect(WebMock).to have_requested(:post, jira_api_transition_url('JIRA-1')).once
end end
it "initiates one api call to jira server to comment on the issue" do it "initiates one api call to jira server to comment on the issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with( expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: comment_body body: comment_body
...@@ -497,13 +492,13 @@ describe GitPushService do ...@@ -497,13 +492,13 @@ describe GitPushService do
let(:message) { "this is some work.\n\ncloses #1" } let(:message) { "this is some work.\n\ncloses #1" }
it "does not initiates one api call to jira server to close the issue" do it "does not initiates one api call to jira server to close the issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(WebMock).not_to have_requested(:post, jira_api_transition_url('JIRA-1')) expect(WebMock).not_to have_requested(:post, jira_api_transition_url('JIRA-1'))
end end
it "does not initiates one api call to jira server to comment on the issue" do it "does not initiates one api call to jira server to comment on the issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(WebMock).not_to have_requested(:post, jira_api_comment_url('JIRA-1')).with( expect(WebMock).not_to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: comment_body body: comment_body
...@@ -516,13 +511,13 @@ describe GitPushService do ...@@ -516,13 +511,13 @@ describe GitPushService do
let(:message) { "this is some work.\n\ncloses JIRA-1 \n\n closes #{issue.to_reference}" } let(:message) { "this is some work.\n\ncloses JIRA-1 \n\n closes #{issue.to_reference}" }
it "initiates one api call to jira server to close the jira issue" do it "initiates one api call to jira server to close the jira issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(WebMock).to have_requested(:post, jira_api_transition_url('JIRA-1')).once expect(WebMock).to have_requested(:post, jira_api_transition_url('JIRA-1')).once
end end
it "initiates one api call to jira server to comment on the jira issue" do it "initiates one api call to jira server to comment on the jira issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with( expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
body: comment_body body: comment_body
...@@ -530,14 +525,14 @@ describe GitPushService do ...@@ -530,14 +525,14 @@ describe GitPushService do
end end
it "closes the internal issue" do it "closes the internal issue" do
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
expect(issue.reload).to be_closed expect(issue.reload).to be_closed
end end
it "adds a note indicating that the issue is now closed" do it "adds a note indicating that the issue is now closed" do
expect(SystemNoteService).to receive(:change_status) expect(SystemNoteService).to receive(:change_status)
.with(issue, project, commit_author, "closed", closing_commit) .with(issue, project, commit_author, "closed", closing_commit)
execute_service(project, commit_author, @oldrev, @newrev, @ref ) execute_service(project, commit_author, oldrev, newrev, ref)
end end
end end
end end
...@@ -547,7 +542,7 @@ describe GitPushService do ...@@ -547,7 +542,7 @@ describe GitPushService do
describe "empty project" do describe "empty project" do
let(:project) { create(:project_empty_repo) } let(:project) { create(:project_empty_repo) }
let(:new_ref) { 'refs/heads/feature'} let(:new_ref) { 'refs/heads/feature' }
before do before do
allow(project).to receive(:default_branch).and_return('feature') allow(project).to receive(:default_branch).and_return('feature')
...@@ -555,7 +550,7 @@ describe GitPushService do ...@@ -555,7 +550,7 @@ describe GitPushService do
end end
it 'push to first branch updates HEAD' do it 'push to first branch updates HEAD' do
execute_service(project, user, @blankrev, @newrev, new_ref ) execute_service(project, user, blankrev, newrev, new_ref)
end end
end end
...@@ -580,7 +575,7 @@ describe GitPushService do ...@@ -580,7 +575,7 @@ describe GitPushService do
it 'does not perform housekeeping when not needed' do it 'does not perform housekeeping when not needed' do
expect(housekeeping).not_to receive(:execute) expect(housekeeping).not_to receive(:execute)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
end end
context 'when housekeeping is needed' do context 'when housekeeping is needed' do
...@@ -591,20 +586,20 @@ describe GitPushService do ...@@ -591,20 +586,20 @@ describe GitPushService do
it 'performs housekeeping' do it 'performs housekeeping' do
expect(housekeeping).to receive(:execute) expect(housekeeping).to receive(:execute)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
end end
it 'does not raise an exception' do it 'does not raise an exception' do
allow(housekeeping).to receive(:try_obtain_lease).and_return(false) allow(housekeeping).to receive(:try_obtain_lease).and_return(false)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
end end
end end
it 'increments the push counter' do it 'increments the push counter' do
expect(housekeeping).to receive(:increment!) expect(housekeeping).to receive(:increment!)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
end end
end end
...@@ -612,9 +607,9 @@ describe GitPushService do ...@@ -612,9 +607,9 @@ describe GitPushService do
let(:service) do let(:service) do
described_class.new(project, described_class.new(project,
user, user,
oldrev: sample_commit.parent_id, oldrev: oldrev,
newrev: sample_commit.id, newrev: newrev,
ref: 'refs/heads/master') ref: ref)
end end
context 'on the default branch' do context 'on the default branch' do
...@@ -657,9 +652,9 @@ describe GitPushService do ...@@ -657,9 +652,9 @@ describe GitPushService do
let(:service) do let(:service) do
described_class.new(project, described_class.new(project,
user, user,
oldrev: sample_commit.parent_id, oldrev: oldrev,
newrev: sample_commit.id, newrev: newrev,
ref: 'refs/heads/master') ref: ref)
end end
it 'only schedules a limited number of commits' do it 'only schedules a limited number of commits' do
...@@ -686,8 +681,8 @@ describe GitPushService do ...@@ -686,8 +681,8 @@ describe GitPushService do
described_class.new( described_class.new(
project, project,
user, user,
oldrev: sample_commit.parent_id, oldrev: oldrev,
newrev: sample_commit.id, newrev: newrev,
ref: 'refs/heads/master' ref: 'refs/heads/master'
) )
end end
...@@ -695,13 +690,17 @@ describe GitPushService do ...@@ -695,13 +690,17 @@ describe GitPushService do
it 'calls CreateGpgSignatureWorker.perform_async for each commit' do it 'calls CreateGpgSignatureWorker.perform_async for each commit' do
expect(CreateGpgSignatureWorker).to receive(:perform_async).with(sample_commit.id, project.id) expect(CreateGpgSignatureWorker).to receive(:perform_async).with(sample_commit.id, project.id)
execute_service(project, user, @oldrev, @newrev, @ref) execute_service(project, user, oldrev, newrev, ref)
end end
end end
def execute_service(project, user, oldrev, newrev, ref) def execute_service(project, user, oldrev, newrev, ref)
service = described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref ) service = described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
service.execute service.execute
service service
end end
def push_data_from_service(project, user, oldrev, newrev, ref)
execute_service(project, user, oldrev, newrev, ref).push_data
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