travis-api/spec/integration/v2/builds_spec.rb
2013-11-28 18:08:39 +01:00

93 lines
3.2 KiB
Ruby

require 'spec_helper'
describe 'Builds' do
let(:repo) { Repository.by_slug('svenfuchs/minimal').first }
let(:build) { repo.builds.first }
let(:headers) { { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json' } }
it 'GET /builds?repository_id=1' do
response = get '/builds', { repository_id: repo.id }, headers
response.should deliver_json_for(repo.builds.order('id DESC'), version: 'v2')
end
it 'GET /builds/1' do
response = get "/builds/#{build.id}", {}, headers
response.should deliver_json_for(build, version: 'v2')
end
it 'GET /builds/1?repository_id=1' do
response = get "/builds/#{build.id}", { repository_id: repo.id }, headers
response.should deliver_json_for(build, version: 'v2')
end
it 'GET /repos/svenfuchs/minimal/builds' do
response = get '/repos/svenfuchs/minimal/builds', {}, headers
response.should deliver_json_for(repo.builds.order('id DESC'), version: 'v2', type: :builds)
end
it 'GET /repos/svenfuchs/minimal/builds?ids=1,2' do
ids = repo.builds.map(&:id).sort.join(',')
response = get "/repos/svenfuchs/minimal/builds?ids=#{ids}", {}, headers
response.should deliver_json_for(repo.builds.order('id ASC'), version: 'v2')
end
it 'GET /builds?ids=1,2' do
ids = repo.builds.map(&:id).sort.join(',')
response = get "/builds?ids=#{ids}", {}, headers
response.should deliver_json_for(repo.builds.order('id ASC'), version: 'v2')
end
it 'GET /repos/svenfuchs/minimal/builds/1' do
response = get "/repos/svenfuchs/minimal/builds/#{build.id}", {}, headers
response.should deliver_json_for(build, version: 'v2')
end
it 'GET /builds/1?repository_id=1&branches=true' do
response = get "/builds?repository_id=#{repo.id}&branches=true", {}, headers
response.should deliver_json_for(repo.last_finished_builds_by_branches, version: 'v2')
end
describe 'POST /builds/:id/cancel' do
let(:user) { User.where(login: 'svenfuchs').first }
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: -1) }
before {
headers.merge! 'HTTP_AUTHORIZATION' => "token #{token}"
user.permissions.create!(repository_id: build.repository.id, :pull => true, :push => true)
}
context 'when user does not have rights to cancel the build' do
before { user.permissions.destroy_all }
it 'responds with 403' do
response = post "/builds/#{build.id}/cancel", {}, headers
response.status.should == 403
end
end
context 'when build is not cancelable' do
before { build.matrix.each { |j| j.update_attribute(:state, 'passed') } }
it 'responds with 422' do
response = post "/builds/#{build.id}/cancel", {}, headers
response.status.should == 422
end
end
context 'when build can be canceled' do
it 'cancels the build and responds with 204' do
build.matrix.each { |j| j.update_attribute(:state, 'created') }
build.update_attribute(:state, 'created')
response = nil
expect {
response = post "/builds/#{build.id}/cancel", {}, headers
}.to change { build.reload.state }
response.status.should == 204
build.state.should == 'canceled'
end
end
end
end