Commit 24824cbb authored by Felipe Artur's avatar Felipe Artur

Fix Specs

parent 85f0b3a9
--- ---
title: Preloads head pipeline for each merge request title: Preloads head pipeline for merge request collection
merge_request: merge_request:
author: author:
...@@ -544,6 +544,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps ...@@ -544,6 +544,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
project = merge_request.source_project project = merge_request.source_project
project.enable_ci project.enable_ci
pipeline = create :ci_pipeline, project: project, sha: merge_request.diff_head_sha, ref: merge_request.source_branch pipeline = create :ci_pipeline, project: project, sha: merge_request.diff_head_sha, ref: merge_request.source_branch
merge_request.update(head_pipeline: pipeline)
create :ci_build, pipeline: pipeline create :ci_build, pipeline: pipeline
end end
......
...@@ -354,7 +354,8 @@ describe Projects::MergeRequestsController do ...@@ -354,7 +354,8 @@ describe Projects::MergeRequestsController do
end end
before do before do
create(:ci_empty_pipeline, project: project, sha: merge_request.diff_head_sha, ref: merge_request.source_branch) pipeline = create(:ci_empty_pipeline, project: project, sha: merge_request.diff_head_sha, ref: merge_request.source_branch)
merge_request.update(head_pipeline: pipeline)
end end
it 'returns :merge_when_pipeline_succeeds' do it 'returns :merge_when_pipeline_succeeds' do
......
...@@ -9,10 +9,13 @@ feature 'Cycle Analytics', feature: true, js: true do ...@@ -9,10 +9,13 @@ feature 'Cycle Analytics', feature: true, js: true do
let(:mr) { create_merge_request_closing_issue(issue, commit_message: "References #{issue.to_reference}") } let(:mr) { create_merge_request_closing_issue(issue, commit_message: "References #{issue.to_reference}") }
let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: project, ref: mr.source_branch, sha: mr.source_branch_sha) } let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: project, ref: mr.source_branch, sha: mr.source_branch_sha) }
before { mr.update(head_pipeline: pipeline) }
context 'as an allowed user' do context 'as an allowed user' do
context 'when project is new' do context 'when project is new' do
before do before do
project.team << [user, :master] project.add_master(user)
mr.update(head_pipeline_id: pipeline.id)
login_as(user) login_as(user)
visit namespace_project_cycle_analytics_path(project.namespace, project) visit namespace_project_cycle_analytics_path(project.namespace, project)
wait_for_ajax wait_for_ajax
......
...@@ -52,6 +52,9 @@ describe 'issuable list', feature: true do ...@@ -52,6 +52,9 @@ describe 'issuable list', feature: true do
create(:issue, project: project, author: user) create(:issue, project: project, author: user)
else else
create(:merge_request, source_project: project, source_branch: generate(:branch)) create(:merge_request, source_project: project, source_branch: generate(:branch))
source_branch = FFaker::Name.name
pipeline = create(:ci_empty_pipeline, project: project, ref: source_branch, status: %w(running failed success).sample, sha: 'any')
create(:merge_request, title: FFaker::Lorem.sentence, source_project: project, source_branch: source_branch, head_pipeline: pipeline)
end end
2.times do 2.times do
......
...@@ -4,16 +4,18 @@ feature 'Merge immediately', :feature, :js do ...@@ -4,16 +4,18 @@ feature 'Merge immediately', :feature, :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
let(:merge_request) do let!(:merge_request) do
create(:merge_request_with_diffs, source_project: project, create(:merge_request_with_diffs, source_project: project,
author: user, author: user,
title: 'Bug NS-04') title: 'Bug NS-04',
head_pipeline: pipeline,
source_branch: pipeline.ref)
end end
let(:pipeline) do let(:pipeline) do
create(:ci_pipeline, project: project, create(:ci_pipeline, project: project,
sha: merge_request.diff_head_sha, ref: 'master',
ref: merge_request.source_branch) sha: project.repository.commit('master').id)
end end
before { project.team << [user, :master] } before { project.team << [user, :master] }
......
...@@ -16,7 +16,10 @@ feature 'Merge When Pipeline Succeeds', :feature, :js do ...@@ -16,7 +16,10 @@ feature 'Merge When Pipeline Succeeds', :feature, :js do
ref: merge_request.source_branch) ref: merge_request.source_branch)
end end
before { project.team << [user, :master] } before do
project.add_master(user)
merge_request.update(head_pipeline_id: pipeline.id)
end
context 'when there is active pipeline for merge request' do context 'when there is active pipeline for merge request' do
background do background do
......
...@@ -3,7 +3,7 @@ require 'rails_helper' ...@@ -3,7 +3,7 @@ require 'rails_helper'
feature 'Mini Pipeline Graph', :js, :feature do feature 'Mini Pipeline Graph', :js, :feature do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
let(:merge_request) { create(:merge_request, source_project: project) } let(:merge_request) { create(:merge_request, source_project: project, head_pipeline: pipeline) }
let(:pipeline) { create(:ci_empty_pipeline, project: project, ref: 'master', status: 'running', sha: project.commit.id) } let(:pipeline) { create(:ci_empty_pipeline, project: project, ref: 'master', status: 'running', sha: project.commit.id) }
let(:build) { create(:ci_build, pipeline: pipeline, stage: 'test', commands: 'test') } let(:build) { create(:ci_build, pipeline: pipeline, stage: 'test', commands: 'test') }
......
...@@ -27,6 +27,8 @@ feature 'Only allow merge requests to be merged if the pipeline succeeds', featu ...@@ -27,6 +27,8 @@ feature 'Only allow merge requests to be merged if the pipeline succeeds', featu
status: status) status: status)
end end
before { merge_request.update(head_pipeline: pipeline) }
context 'when merge requests can only be merged if the pipeline succeeds' do context 'when merge requests can only be merged if the pipeline succeeds' do
before do before do
project.update_attribute(:only_allow_merge_if_pipeline_succeeds, true) project.update_attribute(:only_allow_merge_if_pipeline_succeeds, true)
......
...@@ -89,6 +89,8 @@ describe 'Merge request', :feature, :js do ...@@ -89,6 +89,8 @@ describe 'Merge request', :feature, :js do
statuses: [commit_status]) statuses: [commit_status])
create(:ci_build, :pending, pipeline: pipeline) create(:ci_build, :pending, pipeline: pipeline)
merge_request.update(head_pipeline_id: pipeline.id)
visit namespace_project_merge_request_path(project.namespace, project, merge_request) visit namespace_project_merge_request_path(project.namespace, project, merge_request)
end end
...@@ -101,10 +103,15 @@ describe 'Merge request', :feature, :js do ...@@ -101,10 +103,15 @@ describe 'Merge request', :feature, :js do
context 'when merge request is in the blocked pipeline state' do context 'when merge request is in the blocked pipeline state' do
before do before do
create(:ci_pipeline, project: project, pipeline = create(
:ci_pipeline,
project: project,
sha: merge_request.diff_head_sha, sha: merge_request.diff_head_sha,
ref: merge_request.source_branch, ref: merge_request.source_branch,
status: :manual) status: :manual
)
merge_request.update(head_pipeline_id: pipeline.id)
visit namespace_project_merge_request_path(project.namespace, visit namespace_project_merge_request_path(project.namespace,
project, project,
...@@ -129,6 +136,8 @@ describe 'Merge request', :feature, :js do ...@@ -129,6 +136,8 @@ describe 'Merge request', :feature, :js do
statuses: [commit_status]) statuses: [commit_status])
create(:ci_build, :pending, pipeline: pipeline) create(:ci_build, :pending, pipeline: pipeline)
merge_request.update(head_pipeline_id: pipeline.id)
visit namespace_project_merge_request_path(project.namespace, project, merge_request) visit namespace_project_merge_request_path(project.namespace, project, merge_request)
end end
......
...@@ -130,6 +130,8 @@ describe 'cycle analytics events' do ...@@ -130,6 +130,8 @@ describe 'cycle analytics events' do
end end
before do before do
merge_request.update(head_pipeline_id: pipeline.id)
create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user)
create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user)
...@@ -226,6 +228,8 @@ describe 'cycle analytics events' do ...@@ -226,6 +228,8 @@ describe 'cycle analytics events' do
end end
before do before do
merge_request.update(head_pipeline_id: pipeline.id)
create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user)
create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user)
......
...@@ -85,6 +85,7 @@ merge_requests: ...@@ -85,6 +85,7 @@ merge_requests:
- merge_requests_closing_issues - merge_requests_closing_issues
- metrics - metrics
- timelogs - timelogs
- head_pipeline
merge_request_diff: merge_request_diff:
- merge_request - merge_request
pipelines: pipelines:
......
...@@ -1044,8 +1044,8 @@ describe Ci::Pipeline, models: true do ...@@ -1044,8 +1044,8 @@ describe Ci::Pipeline, models: true do
let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: project, ref: 'master', sha: 'a288a022a53a5a944fae87bcec6efc87b7061808') } let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: project, ref: 'master', sha: 'a288a022a53a5a944fae87bcec6efc87b7061808') }
it "returns merge requests whose `diff_head_sha` matches the pipeline's SHA" do it "returns merge requests whose `diff_head_sha` matches the pipeline's SHA" do
merge_request = create(:merge_request, source_project: project, source_branch: pipeline.ref)
allow_any_instance_of(MergeRequest).to receive(:diff_head_sha) { 'a288a022a53a5a944fae87bcec6efc87b7061808' } allow_any_instance_of(MergeRequest).to receive(:diff_head_sha) { 'a288a022a53a5a944fae87bcec6efc87b7061808' }
merge_request = create(:merge_request, source_project: project, head_pipeline: pipeline, , source_branch: pipeline.ref)
expect(pipeline.merge_requests).to eq([merge_request]) expect(pipeline.merge_requests).to eq([merge_request])
end end
......
...@@ -14,6 +14,7 @@ describe 'CycleAnalytics#test', feature: true do ...@@ -14,6 +14,7 @@ describe 'CycleAnalytics#test', feature: true do
issue = context.create(:issue, project: context.project) issue = context.create(:issue, project: context.project)
merge_request = context.create_merge_request_closing_issue(issue) merge_request = context.create_merge_request_closing_issue(issue)
pipeline = context.create(:ci_pipeline, ref: merge_request.source_branch, sha: merge_request.diff_head_sha, project: context.project) pipeline = context.create(:ci_pipeline, ref: merge_request.source_branch, sha: merge_request.diff_head_sha, project: context.project)
merge_request.update(head_pipeline: pipeline)
{ pipeline: pipeline, issue: issue } { pipeline: pipeline, issue: issue }
end, end,
start_time_conditions: [["pipeline is started", -> (context, data) { data[:pipeline].run! }]], start_time_conditions: [["pipeline is started", -> (context, data) { data[:pipeline].run! }]],
......
...@@ -760,13 +760,9 @@ describe MergeRequest, models: true do ...@@ -760,13 +760,9 @@ describe MergeRequest, models: true do
describe '#head_pipeline' do describe '#head_pipeline' do
describe 'when the source project exists' do describe 'when the source project exists' do
it 'returns the latest pipeline' do it 'returns the latest pipeline' do
pipeline = double(:ci_pipeline, ref: 'master') sha = "123abc"
pipeline = create(:ci_empty_pipeline, project: subject.source_project, ref: 'master', status: 'running', sha: sha)
allow(subject).to receive(:diff_head_sha).and_return('123abc') subject.update(head_pipeline: pipeline)
expect(subject.source_project).to receive(:pipeline_for).
with('master', '123abc').
and_return(pipeline)
expect(subject.head_pipeline).to eq(pipeline) expect(subject.head_pipeline).to eq(pipeline)
end end
...@@ -1504,11 +1500,13 @@ describe MergeRequest, models: true do ...@@ -1504,11 +1500,13 @@ describe MergeRequest, models: true do
describe '#mergeable_with_slash_command?' do describe '#mergeable_with_slash_command?' do
def create_pipeline(status) def create_pipeline(status)
create(:ci_pipeline_with_one_job, pipeline = create(:ci_pipeline_with_one_job,
project: project, project: project,
ref: merge_request.source_branch, ref: merge_request.source_branch,
sha: merge_request.diff_head_sha, sha: merge_request.diff_head_sha,
status: status) status: status)
merge_request.update(head_pipeline: pipeline)
end end
let(:project) { create(:project, :public, :repository, only_allow_merge_if_pipeline_succeeds: true) } let(:project) { create(:project, :public, :repository, only_allow_merge_if_pipeline_succeeds: true) }
...@@ -1594,7 +1592,7 @@ describe MergeRequest, models: true do ...@@ -1594,7 +1592,7 @@ describe MergeRequest, models: true do
context 'with running pipeline' do context 'with running pipeline' do
before do before do
create_pipeline(:running) merge_request.update(head_pipeline: create_pipeline(:running))
end end
it 'is mergeable' do it 'is mergeable' do
......
...@@ -122,6 +122,7 @@ describe 'cycle analytics events', api: true do ...@@ -122,6 +122,7 @@ describe 'cycle analytics events', api: true do
mr = create_merge_request_closing_issue(issue, commit_message: "References #{issue.to_reference}") mr = create_merge_request_closing_issue(issue, commit_message: "References #{issue.to_reference}")
pipeline = create(:ci_empty_pipeline, status: 'created', project: project, ref: mr.source_branch, sha: mr.source_branch_sha) pipeline = create(:ci_empty_pipeline, status: 'created', project: project, ref: mr.source_branch, sha: mr.source_branch_sha)
mr.update(head_pipeline_id: pipeline.id)
pipeline.run pipeline.run
create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user)
......
...@@ -82,6 +82,10 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do ...@@ -82,6 +82,10 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do
sha: merge_request_head, status: 'success') sha: merge_request_head, status: 'success')
end end
before do
mr_merge_if_green_enabled.update(head_pipeline: triggering_pipeline)
end
it "merges all merge requests with merge when the pipeline succeeds enabled" do it "merges all merge requests with merge when the pipeline succeeds enabled" do
expect(MergeWorker).to receive(:perform_async) expect(MergeWorker).to receive(:perform_async)
service.trigger(triggering_pipeline) service.trigger(triggering_pipeline)
...@@ -124,6 +128,8 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do ...@@ -124,6 +128,8 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do
sha: mr_conflict.diff_head_sha, status: 'success') sha: mr_conflict.diff_head_sha, status: 'success')
end end
before { mr_conflict.update(head_pipeline_id: conflict_pipeline.id) }
it 'does not merge the merge request' do it 'does not merge the merge request' do
expect(MergeWorker).not_to receive(:perform_async) expect(MergeWorker).not_to receive(:perform_async)
......
...@@ -174,11 +174,13 @@ describe MergeRequests::UpdateService, services: true do ...@@ -174,11 +174,13 @@ describe MergeRequests::UpdateService, services: true do
context 'with active pipeline' do context 'with active pipeline' do
before do before do
service_mock = double service_mock = double
create(:ci_pipeline_with_one_job, pipeline = create(:ci_pipeline_with_one_job,
project: project, project: project,
ref: merge_request.source_branch, ref: merge_request.source_branch,
sha: merge_request.diff_head_sha) sha: merge_request.diff_head_sha)
merge_request.update(head_pipeline_id: pipeline.id)
expect(MergeRequests::MergeWhenPipelineSucceedsService).to receive(:new).with(project, user). expect(MergeRequests::MergeWhenPipelineSucceedsService).to receive(:new).with(project, user).
and_return(service_mock) and_return(service_mock)
expect(service_mock).to receive(:execute).with(merge_request) expect(service_mock).to receive(:execute).with(merge_request)
......
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