rosa-build/spec/models/pull_request_spec.rb

129 lines
4.8 KiB
Ruby
Raw Normal View History

2012-04-18 18:08:53 +01:00
# -*- encoding : utf-8 -*-
2012-04-16 19:40:50 +01:00
require 'spec_helper'
2012-04-19 20:08:33 +01:00
def set_data_for_pull
@ability = Ability.new(@user)
@project = FactoryGirl.create(:project_with_commit, :owner => @user)
2012-04-19 20:08:33 +01:00
@clone_path = File.join(APP_CONFIG['root_path'], 'repo_clone', @project.id.to_s)
FileUtils.mkdir_p(@clone_path)
@other_project = FactoryGirl.create(:project_with_commit, :owner => @user)
2012-04-19 20:08:33 +01:00
any_instance_of(Project, :versions => ['v1.0', 'v2.0'])
end
2012-04-16 19:40:50 +01:00
describe PullRequest do
2012-04-19 20:08:33 +01:00
context 'for owner user' do
before do
stub_symlink_methods
2012-04-19 20:08:33 +01:00
@user = FactoryGirl.create(:user)
set_data_for_pull
2012-04-28 18:28:57 +01:00
@pull = @project.pull_requests.new(:issue_attributes => {:title => 'test', :body => 'testing'})
2012-10-03 13:18:02 +01:00
@pull.issue.user, @pull.issue.project = @user, @pull.to_project
@pull.to_ref = 'master'
@pull.from_project, @pull.from_ref = @project, 'non_conflicts'
2012-04-19 20:08:33 +01:00
@pull.save
2012-04-28 18:28:57 +01:00
@other_pull = @project.pull_requests.new(:issue_attributes => {:title => 'test_other', :body => 'testing_other'})
2012-10-03 13:18:02 +01:00
@other_pull.issue.user, @other_pull.issue.project = @user, @other_pull.to_project
@other_pull.to_ref = 'master'
@other_pull.from_project, @other_pull.from_ref = @other_project, 'non_conflicts'
2012-04-28 18:28:57 +01:00
@other_pull.save
2012-04-19 20:08:33 +01:00
end
it 'master should merge with non_conflicts branch' do
2012-04-19 20:08:33 +01:00
@pull.check
2012-06-08 13:44:44 +01:00
@pull.status.should == 'ready'
2012-04-19 20:08:33 +01:00
end
it 'master should not merge with conflicts branch' do
2012-10-03 13:18:02 +01:00
@pull.from_ref = 'conflicts'
2012-04-19 20:08:33 +01:00
@pull.check
2012-06-08 13:44:44 +01:00
@pull.status.should == 'blocked'
2012-04-19 20:08:33 +01:00
end
it 'should already merged when already up-to-date branches' do
2012-10-03 13:18:02 +01:00
@pull.from_ref = 'master'
2012-04-19 20:08:33 +01:00
@pull.check
@pull.status.should == 'merged'
2012-04-19 20:08:33 +01:00
end
2012-04-28 18:28:57 +01:00
context 'for other head project' do
it 'master should merge with non_conflicts branch' do
2012-04-28 18:28:57 +01:00
@other_pull.check
2012-06-08 13:44:44 +01:00
@other_pull.status.should == 'ready'
2012-04-28 18:28:57 +01:00
end
it 'master should not merge with conflicts branch' do
2012-10-03 13:18:02 +01:00
@other_pull.from_ref = 'conflicts'
2012-05-02 16:36:39 +01:00
@other_pull.check
2012-06-08 13:44:44 +01:00
@other_pull.status.should == 'blocked'
2012-04-28 18:28:57 +01:00
end
it 'should already merged when already up-to-date branches' do
2012-10-03 13:18:02 +01:00
@other_pull.from_ref = 'master'
2012-05-02 16:36:39 +01:00
@other_pull.check
@other_pull.status.should == 'merged'
2012-04-28 18:28:57 +01:00
end
end
it "should not create same pull" do
@same_pull = @project.pull_requests.new(:issue_attributes => {:title => 'same', :body => 'testing'})
2012-10-03 13:18:02 +01:00
@same_pull.issue.user, @same_pull.issue.project = @user, @same_pull.to_project
@same_pull.to_ref = 'master'
@same_pull.from_project, @same_pull.from_ref = @project, 'non_conflicts'
@same_pull.save
2012-05-22 19:23:00 +01:00
@project.pull_requests.joins(:issue).where(:issues => {:title => @same_pull.title}).count.should == 0
end
it "should not create pull with wrong base ref" do
@wrong_pull = @project.pull_requests.new(:issue_attributes => {:title => 'wrong base', :body => 'testing'})
2012-10-03 13:18:02 +01:00
@wrong_pull.issue.user, @wrong_pull.issue.project = @user, @wrong_pull.to_project
@wrong_pull.to_ref = 'wrong'
@wrong_pull.from_project, @wrong_pull.from_ref = @project, 'non_conflicts'
@wrong_pull.save
@project.pull_requests.joins(:issue).where(:issues => {:title => @wrong_pull.title}).count.should == 0
end
it "should not create pull with wrong head ref" do
@wrong_pull = @project.pull_requests.new(:issue_attributes => {:title => 'wrong head', :body => 'testing'})
2012-10-03 13:18:02 +01:00
@wrong_pull.issue.user, @wrong_pull.issue.project = @user, @wrong_pull.to_project
@wrong_pull.to_ref = 'master'
@wrong_pull.from_project, @wrong_pull.from_ref = @project, 'wrong'
@wrong_pull.save
@project.pull_requests.joins(:issue).where(:issues => {:title => @wrong_pull.title}).count.should == 0
2012-05-22 19:23:00 +01:00
end
2013-01-28 16:42:00 +00:00
it "should create pull with tag" do
system("cd #{@project.path} && git tag 4.7.5.3 $(git rev-parse #{@pull.from_ref})") # TODO REDO through grit
@pull = @project.pull_requests.new(:issue_attributes => {:title => 'tag', :body => 'testing'})
@pull.issue.user, @pull.issue.project = @user, @pull.to_project
@pull.to_ref = 'master'
@pull.from_project, @pull.from_ref = @project, '4.7.5.3'
@pull.save
@project.pull_requests.joins(:issue).where(:issues => {:title => @pull.title}).count.should == 1
end
it "should close pull when deleting from branch" do
system("cd #{@project.path} && git branch -D #{@pull.from_branch}")
@pull.check
@project.pull_requests.joins(:issue).where(:issues => {:title => @pull.title, :status => 'closed'}).count.should == 1
end
2012-04-19 20:08:33 +01:00
end
2012-04-18 18:08:53 +01:00
before do
2012-04-18 18:08:53 +01:00
FileUtils.rm_rf(APP_CONFIG['root_path'])
end
it { should belong_to(:issue).validate(true) }
2012-10-03 13:18:02 +01:00
it { should belong_to(:to_project) }
it { should belong_to(:from_project) }
2012-04-18 18:08:53 +01:00
after do
2012-04-18 18:08:53 +01:00
FileUtils.rm_rf(APP_CONFIG['root_path'])
FileUtils.rm_rf File.join(Rails.root, "tmp", Rails.env, "pull_requests")
2012-04-18 18:08:53 +01:00
end
2012-04-16 19:40:50 +01:00
end