travis-api/spec/core/model/request/approval_spec.rb
2016-06-14 15:10:40 +02:00

271 lines
10 KiB
Ruby

require 'spec_helper_core'
describe Request::Approval do
include Travis::Testing::Stubs
let(:approval) { Request::Approval.new(request) }
before do
approval.stubs(:build_pull_requests?).returns(true)
approval.stubs(:build_pushes?).returns(true)
request.stubs(:creates_jobs?).returns(true)
end
describe 'config_accepted?' do
it 'approves the build when .travis.yml is missing, but builds with .travis.yml are allowed' do
request.config['.result'] = 'not_found'
approval.config_accepted?.should be_true
end
it 'does not approve the build if .travis.yml is missing and builds without it are not allowed' do
request.repository.stubs(:builds_only_with_travis_yml?).returns(true)
request.config['.result'] = 'not_found'
approval.config_accepted?.should be_false
approval.message.should == '.travis.yml is missing and builds without .travis.yml are disabled'
end
it 'approves the build when .travis.yml is present' do
request.config['.result'] = 'configured'
approval.config_accepted?.should be_true
end
end
describe 'branch_accepted?' do
it 'does not accept a request that belongs to the github_pages branch' do
request.commit.stubs(:branch).returns('gh_pages')
approval.branch_accepted?.should be_false
end
it 'accepts a request that belongs to the gh-pages branch if it\'s specified in branches:only' do
request.commit.stubs(:branch).returns('gh_pages')
request.config['branches'] = { 'only' => ['gh-pages'] }
approval.branch_accepted?.should be_true
end
it "doesn't fail when the branch configuration is an array" do
request.config['branches'] = [{ 'only' => ['gh-pages'] }]
approval.branch_accepted?.should be_true
end
end
describe 'accepted?' do
it 'accepts a request that has a commit, belongs to a public repository, is not skipped and does not belong to the github_pages branch and it is not a rails fork' do
approval.should be_accepted
end
it 'does not accept a request that does not have a commit' do
approval.stubs(:commit).returns(nil)
approval.should_not be_accepted
end
it 'does not accept a request that belongs to a private repository' do
request.repository.stubs(:private?).returns(true)
approval.should_not be_accepted
end
it 'does not accept a request that belongs to an excluded repository' do
request.repository.stubs(:slug).returns('svenfuchs/rails')
approval.should_not be_accepted
end
it 'does not accept a request that is skipped (using the commit message)' do
request.commit.stubs(:message).returns('update README [ci:skip]')
approval.should_not be_accepted
end
it 'accepts a request that belongs to the github_pages branch and is explicitly set to build that branch (String)' do
request.commit.stubs(:branch).returns('gh_pages')
request.stubs(:config).returns('branches' => { 'only' => 'gh_pages' })
approval.should be_accepted
end
it 'accepts a request that belongs to the github_pages branch and is explicitly set to build that branch (Array)' do
request.commit.stubs(:branch).returns('gh_pages')
request.stubs(:config).returns('branches' => { 'only' => ['gh_pages'] })
approval.should be_accepted
end
it 'does not accept a request when it is disabled in settings' do
approval.stubs(:enabled_in_settings?).returns(false)
approval.should_not be_accepted
end
it 'does not accept a request when compare URL is too long' do
request.commit.stubs(:compare_url).returns('a'*256)
approval.should_not be_accepted
end
end
describe 'approved?' do
xit 'should be specified'
end
describe 'message' do
it 'returns "pull requests disabled" if pull requests are disabled' do
approval.stubs(:enabled_in_settings?).returns(false)
request.stubs(:pull_request?).returns(true)
approval.message.should == 'pull requests disabled'
end
it 'returns "pushes disabled" if pushes are disabled' do
approval.stubs(:enabled_in_settings?).returns(false)
request.stubs(:pull_request?).returns(false)
approval.message.should == 'pushes disabled'
end
it 'returns "missing commit" if the commit is missing' do
approval.stubs(:commit).returns(nil)
approval.message.should == 'missing commit'
end
it 'returns "private repository" if the repository is private' do
request.repository.stubs(:private?).returns(true)
request.stubs(:config).returns({key: 'value'})
approval.message.should == 'private repository'
end
it 'returns "excluded repository" if the repository is an excluded repository' do
request.repository.stubs(:slug).returns('svenfuchs/rails')
approval.message.should == 'excluded repository'
end
it 'returns "excluded repository" if the repository is an excluded repository and exclude rule is a string' do
Travis.config.repository_filter.stubs(:exclude).returns(["\\/rails$"])
request.repository.stubs(:slug).returns('svenfuchs/rails')
approval.message.should == 'excluded repository'
end
it 'returns "github pages branch" if the branch is a github pages branch' do
request.commit.stubs(:branch).returns('gh-pages')
approval.message.should == 'github pages branch'
end
it 'returns "config is missing or contains YAML syntax error" if the config is not present' do
request.stubs(:config).returns(nil)
approval.message.should == 'config is missing or contains YAML syntax error'
end
it 'returns "branch not included or excluded" if the branch was not approved' do
request.commit.stubs(:branch).returns('feature')
request.stubs(:config).returns('branches' => { 'only' => 'master' })
approval.message.should == 'branch not included or excluded'
end
it 'returns "compare URL too long; branch/tag names may be too long" if the compare URL is too long' do
request.stubs(:config).returns({key: 'value'})
request.commit.stubs(:compare_url).returns('a'*256)
approval.message.should == 'compare URL too long; branch/tag names may be too long'
end
end
describe 'skipped?' do
it 'returns true when the commit message contains [ci skip]' do
request.commit.stubs(:message).returns 'lets party like its 1999 [ci skip]'
approval.send(:skipped?).should be_true
end
end
describe 'github_pages?' do
it 'returns true for a branch named gh-pages' do
request.commit.stubs(:branch).returns 'gh-pages'
approval.send(:github_pages?).should be_true
end
it 'returns true for a branch named gh_pages' do
request.commit.stubs(:branch).returns 'gh_pages'
approval.send(:github_pages?).should be_true
end
it 'returns true when a PR is for gh_pages' do
request.commit.stubs(:ref).returns 'refs/pulls/1/merge'
request.commit.stubs(:branch).returns 'gh_pages'
approval.send(:github_pages?).should be_true
end
it 'returns false for a branch named master' do
commit.stubs(:branch).returns 'master'
approval.send(:github_pages?).should be_false
end
end
describe 'included_repository?' do
it 'returns true if the repository is an included repository' do
request.repository.stubs(:slug).returns 'rails/rails'
approval.send(:included_repository?).should be_true
end
it 'returns true if the repository is an included repository with rule as a string' do
Travis.config.repository_filter.stubs(:include).returns(["rails\\/rails"])
request.repository.stubs(:slug).returns 'rails/rails'
approval.send(:included_repository?).should be_true
end
it 'returns false if the repository is not included' do
request.repository.stubs(:slug).returns 'josh/completeness-fu'
approval.send(:included_repository?).should be_false
end
it 'returns false if the repository is not included with rule as a string' do
Travis.config.repository_filter.stubs(:include).returns(["rails\\/rails"])
request.repository.stubs(:slug).returns 'josh/completeness-fu'
approval.send(:included_repository?).should be_false
end
end
describe 'excluded_repository?' do
it 'returns true if the repository is an excluded repository' do
request.repository.stubs(:slug).returns 'josh/rails'
approval.send(:excluded_repository?).should be_true
end
it 'returns false if the repository is not excluded' do
request.repository.stubs(:slug).returns 'josh/completeness-fu'
approval.send(:excluded_repository?).should be_false
end
it 'returns true if the repository is an excluded repository with rule as a string' do
Travis.config.repository_filter.stubs(:exclude).returns(["\\/rails$"])
request.repository.stubs(:slug).returns 'josh/rails'
approval.send(:excluded_repository?).should be_true
end
it 'returns false if the repository is not excluded with rule as a string' do
Travis.config.repository_filter.stubs(:exclude).returns(["\\/rails$"])
request.repository.stubs(:slug).returns 'josh/completeness-fu'
approval.send(:excluded_repository?).should be_false
end
end
describe 'enabled_in_settings?' do
it 'returns true if a request is an api request' do
request.stubs(:api_request?).returns(true)
approval.enabled_in_settings?.should be_true
end
it 'returns true if pull requests are enabled and a request is a pull request' do
request.stubs(:pull_request?).returns(true)
approval.stubs(:build_pull_requests?).returns(true)
approval.enabled_in_settings?.should be_true
end
it 'returns true if pushes are enabled and a request is a push' do
request.stubs(:pull_request?).returns(false)
approval.stubs(:build_pushes?).returns(true)
approval.enabled_in_settings?.should be_true
end
it 'returns false if pull requests are disabled and a request is a pull request' do
request.stubs(:pull_request?).returns(true)
approval.stubs(:build_pull_requests?).returns(false)
approval.enabled_in_settings?.should be_false
end
it 'returns false if pushes are disabled and a request is a push' do
request.stubs(:pull_request?).returns(false)
approval.stubs(:build_pushes?).returns(false)
approval.enabled_in_settings?.should be_false
end
end
end