135 lines
4.7 KiB
Ruby
135 lines
4.7 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe MergeRequests::RefreshService do
|
|
let(:project) { create(:project) }
|
|
let(:user) { create(:user) }
|
|
let(:service) { MergeRequests::RefreshService }
|
|
|
|
describe :execute do
|
|
before do
|
|
@user = create(:user)
|
|
group = create(:group)
|
|
group.add_owner(@user)
|
|
|
|
@project = create(:project, namespace: group)
|
|
@fork_project = Projects::ForkService.new(@project, @user).execute
|
|
@merge_request = create(:merge_request,
|
|
source_project: @project,
|
|
source_branch: 'master',
|
|
target_branch: 'feature',
|
|
target_project: @project)
|
|
|
|
@fork_merge_request = create(:merge_request,
|
|
source_project: @fork_project,
|
|
source_branch: 'master',
|
|
target_branch: 'feature',
|
|
target_project: @project)
|
|
|
|
@commits = @merge_request.commits
|
|
|
|
@oldrev = @commits.last.id
|
|
@newrev = @commits.first.id
|
|
end
|
|
|
|
context 'push to origin repo source branch' do
|
|
let(:refresh_service) { service.new(@project, @user) }
|
|
before do
|
|
allow(refresh_service).to receive(:execute_hooks)
|
|
refresh_service.execute(@oldrev, @newrev, 'refs/heads/master')
|
|
reload_mrs
|
|
end
|
|
|
|
it 'should execute hooks with update action' do
|
|
expect(refresh_service).to have_received(:execute_hooks).
|
|
with(@merge_request, 'update')
|
|
end
|
|
|
|
it { expect(@merge_request.notes).not_to be_empty }
|
|
it { expect(@merge_request).to be_open }
|
|
it { expect(@fork_merge_request).to be_open }
|
|
it { expect(@fork_merge_request.notes).to be_empty }
|
|
end
|
|
|
|
context 'push to origin repo target branch' do
|
|
before do
|
|
service.new(@project, @user).execute(@oldrev, @newrev, 'refs/heads/feature')
|
|
reload_mrs
|
|
end
|
|
|
|
it { expect(@merge_request.notes.last.note).to include('changed to merged') }
|
|
it { expect(@merge_request).to be_merged }
|
|
it { expect(@fork_merge_request).to be_merged }
|
|
it { expect(@fork_merge_request.notes.last.note).to include('changed to merged') }
|
|
end
|
|
|
|
context 'push to fork repo source branch' do
|
|
let(:refresh_service) { service.new(@fork_project, @user) }
|
|
before do
|
|
allow(refresh_service).to receive(:execute_hooks)
|
|
refresh_service.execute(@oldrev, @newrev, 'refs/heads/master')
|
|
reload_mrs
|
|
end
|
|
|
|
it 'should execute hooks with update action' do
|
|
expect(refresh_service).to have_received(:execute_hooks).
|
|
with(@fork_merge_request, 'update')
|
|
end
|
|
|
|
it { expect(@merge_request.notes).to be_empty }
|
|
it { expect(@merge_request).to be_open }
|
|
it { expect(@fork_merge_request.notes.last.note).to include('Added 4 commits') }
|
|
it { expect(@fork_merge_request).to be_open }
|
|
end
|
|
|
|
context 'push to fork repo target branch' do
|
|
before do
|
|
service.new(@fork_project, @user).execute(@oldrev, @newrev, 'refs/heads/feature')
|
|
reload_mrs
|
|
end
|
|
|
|
it { expect(@merge_request.notes).to be_empty }
|
|
it { expect(@merge_request).to be_open }
|
|
it { expect(@fork_merge_request.notes).to be_empty }
|
|
it { expect(@fork_merge_request).to be_open }
|
|
end
|
|
|
|
context 'push to origin repo target branch after fork project was removed' do
|
|
before do
|
|
@fork_project.destroy
|
|
service.new(@project, @user).execute(@oldrev, @newrev, 'refs/heads/feature')
|
|
reload_mrs
|
|
end
|
|
|
|
it { expect(@merge_request.notes.last.note).to include('changed to merged') }
|
|
it { expect(@merge_request).to be_merged }
|
|
it { expect(@fork_merge_request).to be_open }
|
|
it { expect(@fork_merge_request.notes).to be_empty }
|
|
end
|
|
|
|
context 'push new branch that exists in a merge request' do
|
|
let(:refresh_service) { service.new(@fork_project, @user) }
|
|
|
|
it 'refreshes the merge request' do
|
|
expect(refresh_service).to receive(:execute_hooks).
|
|
with(@fork_merge_request, 'update')
|
|
allow_any_instance_of(Repository).to receive(:merge_base).and_return(@oldrev)
|
|
|
|
refresh_service.execute(Gitlab::Git::BLANK_SHA, @newrev, 'refs/heads/master')
|
|
reload_mrs
|
|
|
|
expect(@merge_request.notes).to be_empty
|
|
expect(@merge_request).to be_open
|
|
|
|
notes = @fork_merge_request.notes.reorder(:created_at).map(&:note)
|
|
expect(notes[0]).to include('Restored source branch `master`')
|
|
expect(notes[1]).to include('Added 4 commits')
|
|
expect(@fork_merge_request).to be_open
|
|
end
|
|
end
|
|
|
|
def reload_mrs
|
|
@merge_request.reload
|
|
@fork_merge_request.reload
|
|
end
|
|
end
|
|
end
|