gitlab-org--gitlab-foss/spec/lib/gitlab/git/patches/commit_patches_spec.rb
Bob Van Landuyt 6fbdc5ed52 Apply patches when creating MR via email
This allows users to add patches as attachments to merge request
created via email.

When an email to create a merge request is sent, all the attachments
ending in `.patch` will be applied to the branch specified in the
subject of the email. If the branch did not exist, it will be created
from the HEAD of the repository.

When the patches could not be applied, the error message will be
replied to the user.

The patches can have a maximum combined size of 2MB for now.
2018-11-07 16:27:55 +01:00

49 lines
1.5 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
describe Gitlab::Git::Patches::CommitPatches do
describe '#commit' do
let(:patches) do
patches_folder = Rails.root.join('spec/fixtures/patchfiles')
content_1 = File.read(File.join(patches_folder, "0001-This-does-not-apply-to-the-feature-branch.patch"))
content_2 = File.read(File.join(patches_folder, "0001-A-commit-from-a-patch.patch"))
Gitlab::Git::Patches::Collection.new([content_1, content_2])
end
let(:user) { build(:user) }
let(:branch_name) { 'branch-with-patches' }
let(:repository) { create(:project, :repository).repository }
subject(:commit_patches) do
described_class.new(user, repository, branch_name, patches)
end
it 'applies the patches' do
new_rev = commit_patches.commit
expect(repository.commit(new_rev)).not_to be_nil
end
it 'updates the branch cache' do
expect(repository).to receive(:after_create_branch)
commit_patches.commit
end
context 'when the repository does not exist' do
let(:repository) { create(:project).repository }
it 'raises the correct error' do
expect { commit_patches.commit }.to raise_error(Gitlab::Git::Repository::NoRepository)
end
end
context 'when the patch does not apply' do
let(:branch_name) { 'feature' }
it 'raises the correct error' do
expect { commit_patches.commit }.to raise_error(Gitlab::Git::CommandError)
end
end
end
end