Commit 4cb12d79 authored by Gabriel Mazetto's avatar Gabriel Mazetto

Added specs for merge request git hook validations

parent 82475163
......@@ -2,11 +2,18 @@
FactoryGirl.define do
factory :git_hook do
force_push_regex "MyString"
force_push_regex 'feature\/.*'
deny_delete_tag false
delete_branch_regex "MyString"
delete_branch_regex 'bug\/.*'
project
commit_message_regex "MyString"
trait :commit_message do
commit_message_regex "(f|F)ixes #\d+.*"
end
trait :author_email do
author_email_regex '.*@veryspecificedomain.com'
end
factory :git_hook_sample do
is_sample true
......
require 'spec_helper'
feature 'Merge With Git Hooks Validation', feature: true, js: true do
let(:user) { create(:user) }
let(:project) { create(:project, :public, git_hook: git_hook) }
let(:merge_request) { create(:merge_request_with_diffs, source_project: project, author: user, title: 'Bug NS-04') }
before do
project.team << [user, :master]
end
context 'commit message is invalid' do
let(:git_hook) { create(:git_hook, :commit_message) }
before do
login_as user
visit_merge_request(merge_request)
end
it 'displays error message after merge request is clicked' do
click_button 'Accept Merge Request'
expect(page).to have_content('Merge in progress')
expect(page).to have_content('This merge request failed to be merged automatically')
expect(page).to have_content("Commit message does not follow the pattern '#{git_hook.commit_message_regex}'")
end
end
context 'author email is invalid' do
let(:git_hook) { create(:git_hook, :author_email) }
before do
login_as user
visit_merge_request(merge_request)
end
it 'displays error message after merge request is clicked' do
click_button 'Accept Merge Request'
expect(page).to have_content('Merge in progress')
expect(page).to have_content('This merge request failed to be merged automatically')
expect(page).to have_content("Commit author's email '#{user.email}' does not follow the pattern '#{git_hook.author_email_regex}'")
end
end
def visit_merge_request(merge_request)
visit namespace_project_merge_request_path(merge_request.project.namespace, merge_request.project, merge_request)
end
end
......@@ -52,4 +52,34 @@ describe MergeRequests::MergeService, services: true do
end
end
end
describe :hooks_validation_pass? do
let(:service) { MergeRequests::MergeService.new(project, user, commit_message: 'Awesome message') }
it 'returns true when valid' do
expect(service.hooks_validation_pass?(merge_request)).to be_truthy
end
context 'commit message validation' do
before do
allow(project).to receive(:git_hook) { build(:git_hook, commit_message_regex: 'unmatched pattern .*') }
end
it 'returns false and save error when invalid' do
expect(service.hooks_validation_pass?(merge_request)).to be_falsey
expect(merge_request.merge_error).not_to be_empty
end
end
context 'authors email validation' do
before do
allow(project).to receive(:git_hook) { build(:git_hook, author_email_regex: '.*@unmatchedemaildomain.com') }
end
it 'returns false and save error when invalid' do
expect(service.hooks_validation_pass?(merge_request)).to be_falsey
expect(merge_request.merge_error).not_to be_empty
end
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