Merge pull request #187 from travis-ci/cd-v3-parity

v3 Add /branches, /broadcasts endpoints, :exists_on_github build attribute and :default_branch to minimal repo representation
This commit is contained in:
Konstantin Haase 2015-09-15 10:34:48 +02:00
commit 1e6d4738e3
20 changed files with 525 additions and 94 deletions

View File

@ -0,0 +1,7 @@
module Travis::API::V3
class Queries::Branches < Query
def find(repository)
repository.branches
end
end
end

View File

@ -0,0 +1,13 @@
module Travis::API::V3
class Queries::Broadcasts < Query
def for_user(user)
query = %(
recipient_type IS NULL OR
recipient_type = ? AND recipient_id IN(?) OR
recipient_type = ? AND recipient_id = ? OR
recipient_type = ? AND recipient_id IN (?)
)
Models::Broadcast.where(query, 'Organization', user.organization_ids, 'User', user.id, 'Repository', user.repository_ids)
end
end
end

View File

@ -3,6 +3,6 @@ require 'travis/api/v3/renderer/model_renderer'
module Travis::API::V3
class Renderer::Branch < Renderer::ModelRenderer
representation(:minimal, :name, :last_build)
representation(:standard, :name, :repository, :last_build)
representation(:standard, :name, :repository, :last_build, :exists_on_github)
end
end

View File

@ -0,0 +1,6 @@
module Travis::API::V3
class Renderer::Branches < Renderer::CollectionRenderer
type :branches
collection_key :branches
end
end

View File

@ -0,0 +1,8 @@
require 'travis/api/v3/renderer/model_renderer'
module Travis::API::V3
class Renderer::Broadcast < Renderer::ModelRenderer
representation(:minimal, :id, :recipient_id, :message, :created_at)
representation(:standard, :id, :recipient_id, :recipient_type, :kind, :message, :expired, :created_at, :updated_at)
end
end

View File

@ -0,0 +1,6 @@
module Travis::API::V3
class Renderer::Broadcasts < Renderer::CollectionRenderer
type :broadcasts
collection_key :broadcasts
end
end

View File

@ -2,7 +2,7 @@ require 'travis/api/v3/renderer/model_renderer'
module Travis::API::V3
class Renderer::Repository < Renderer::ModelRenderer
representation(:minimal, :id, :slug)
representation(:minimal, :id, :slug, :default_branch)
representation(:standard, :id, :name, :slug, :description, :github_language, :active, :private, :owner, :last_build, :default_branch)
def active

View File

@ -8,39 +8,8 @@ module Travis::API::V3
get :for_current_user
end
resource :owner do
route '/owner/({owner.login}|{user.login}|{organization.login})'
get :find
get :repositories, '/repos'
end
resource :repository do
capture id: :digit, slug: %r{[^/]+%2[fF][^/]+}
route '/repo/({repository.id}|{repository.slug})'
get :find
post :enable, '/enable'
post :disable, '/disable'
resource :requests do
route '/requests'
get :find
post :create
end
resource :builds do
route '/builds'
get :find
end
resource :branch do
route '/branch/{branch.name}'
get :find
end
end
resource :repositories do
route '/repos'
resource :broadcasts do
route '/broadcasts'
get :for_current_user
end
@ -48,6 +17,9 @@ module Travis::API::V3
capture id: :digit
route '/build/{build.id}'
get :find
# post :cancel, '/cancel'
# post :restart, '/restart'
end
resource :job do
@ -56,13 +28,6 @@ module Travis::API::V3
get :find
end
resource :user do
capture id: :digit
route '/user'
get :current
get :find, '/{user.id}'
end
resource :organization do
capture id: :digit
route '/org/{organization.id}'
@ -73,5 +38,54 @@ module Travis::API::V3
route '/orgs'
get :for_current_user
end
resource :owner do
route '/owner/({owner.login}|{user.login}|{organization.login})'
get :find
get :repositories, '/repos'
end
resource :repositories do
route '/repos'
get :for_current_user
end
resource :repository do
capture id: :digit, slug: %r{[^/]+%2[fF][^/]+}
route '/repo/({repository.id}|{repository.slug})'
get :find
post :enable, '/enable'
post :disable, '/disable'
resource :branch do
route '/branch/{branch.name}'
get :find
end
resource :branches do
route '/branches'
get :find
end
resource :builds do
route '/builds'
get :find
end
resource :requests do
route '/requests'
get :find
post :create
end
end
resource :user do
capture id: :digit
route '/user'
get :current
get :find, '/{user.id}'
end
end
end

View File

@ -4,9 +4,13 @@ module Travis::API::V3
Accounts = Module.new { extend Services }
Branch = Module.new { extend Services }
Branches = Module.new { extend Services }
Broadcast = Module.new { extend Services }
Broadcasts = Module.new { extend Services }
Build = Module.new { extend Services }
Builds = Module.new { extend Services }
Job = Module.new { extend Services }
Jobs = Module.new { extend Services }
Organization = Module.new { extend Services }
Organizations = Module.new { extend Services }
Owner = Module.new { extend Services }
@ -16,7 +20,7 @@ module Travis::API::V3
User = Module.new { extend Services }
def result_type
@resul_type ||= name[/[^:]+$/].underscore.to_sym
@result_type ||= name[/[^:]+$/].underscore.to_sym
end
end
end

View File

@ -0,0 +1,8 @@
module Travis::API::V3
class Services::Branches::Find < Service
paginate
def run!
query.find(find(:repository))
end
end
end

View File

@ -0,0 +1,8 @@
module Travis::API::V3
class Services::Broadcasts::ForCurrentUser < Service
def run!
raise LoginRequired unless access_control.logged_in?
query.for_user(access_control.user)
end
end
end

View File

@ -1,5 +1,6 @@
module Travis::API::V3
class Services::Requests::Find < Service
paginate
def run!
query.find(find(:repository))
end

View File

@ -16,7 +16,7 @@ describe Travis::API::V3::ServiceIndex do
describe "find action" do
let(:action) { resource.fetch("actions").fetch("find") }
specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}repo/{repository.id}/requests{?include}") }
specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}repo/{repository.id}/requests{?include,limit,offset}") }
end
describe "create action" do

View File

@ -19,7 +19,9 @@ describe Travis::API::V3::Services::Repository::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal"},
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@href" => "/v3/repo/#{repo.id}/branch/master"}},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
@ -48,7 +50,8 @@ describe Travis::API::V3::Services::Repository::Find do
{"@type" => "job",
"@href" => "/v3/job/#{jobs[3].id}",
"@representation"=>"minimal",
"id" =>jobs[3].id}]}
"id" =>jobs[3].id}]},
"exists_on_github"=> true
}}
end
end

View File

@ -0,0 +1,174 @@
require 'spec_helper'
describe Travis::API::V3::Services::Branches::Find do
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
let(:branch) { Travis::API::V3::Models::Branch.where(repository_id: repo.id).first }
let(:build) { branch.last_build }
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
let(:parsed_body) { JSON.load(body) }
describe "fetching branches on a public repository by slug" do
before { get("/v3/repo/svenfuchs%2Fminimal/branches") }
example { expect(last_response).to be_ok }
end
describe "fetching branches on a non-existing repository by slug" do
before { get("/v3/repo/svenfuchs%2Fminimal1/branches") }
example { expect(last_response).to be_not_found }
example { expect(parsed_body).to be == {
"@type" => "error",
"error_type" => "not_found",
"error_message" => "repository not found (or insufficient access)",
"resource_type" => "repository"
}}
end
describe "builds on public repository" do
before { get("/v3/repo/#{repo.id}/branches?limit=1") }
example { expect(last_response).to be_ok }
example { expect(parsed_body).to be == {
"@type" => "branches",
"@href" => "/v3/repo/#{repo.id}/branches?limit=1",
"@representation" => "standard",
"@pagination" => {
"limit" => 1,
"offset" => 0,
"count" => 1,
"is_first" => true,
"is_last" => true,
"next" => nil,
"prev" => nil,
"first" => {
"@href" => "/v3/repo/#{repo.id}/branches?limit=1",
"offset" => 0,
"limit" => 1 },
"last" => {
"@href" => "/v3/repo/#{repo.id}/branches?limit=1",
"offset" => 0,
"limit" => 1 }},
"branches" => [{
"@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/#{branch.name}",
"@representation" => "standard",
"name" => branch.name,
"repository" => {
"@type" => "repository",
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@href" =>"/v3/repo/#{repo.id}/branch/master"}},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation"=> "minimal",
"id" => build.id,
"number" => build.number,
"state" => build.state,
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"started_at" => "2010-11-12T13:00:00Z",
"finished_at" => nil,
"jobs" => [{
"@type" => "job",
"@href" => "/v3/job/#{jobs[0].id}",
"@representation"=> "minimal",
"id" => jobs[0].id },
{
"@type" => "job",
"@href" => "/v3/job/#{jobs[1].id}",
"@representation"=>"minimal",
"id" => jobs[1].id },
{
"@type" => "job",
"@href" => "/v3/job/#{jobs[2].id}",
"@representation"=>"minimal",
"id" => jobs[2].id },
{
"@type" => "job",
"@href" => "/v3/job/#{jobs[3].id}",
"@representation"=>"minimal",
"id" => jobs[3].id }]},
"exists_on_github" => true }]}
}
end
describe "branches private repository, private API, authenticated as user with access" do
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) }
before { repo.update_attribute(:private, true) }
before { get("/v3/repo/#{repo.id}/branches?limit=1", {}, headers) }
after { repo.update_attribute(:private, false) }
example { expect(last_response).to be_ok }
example { expect(parsed_body).to be == {
"@type" => "branches",
"@href" => "/v3/repo/#{repo.id}/branches?limit=1",
"@representation" => "standard",
"@pagination" => {
"limit" => 1,
"offset" => 0,
"count" => 1,
"is_first" => true,
"is_last" => true,
"next" => nil,
"prev" => nil,
"first" => {
"@href" => "/v3/repo/#{repo.id}/branches?limit=1",
"offset" => 0,
"limit" => 1 },
"last" => {
"@href" => "/v3/repo/#{repo.id}/branches?limit=1",
"offset" => 0,
"limit" => 1 }},
"branches" => [{
"@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/#{branch.name}",
"@representation" => "standard",
"name" => branch.name,
"repository" => {
"@type" => "repository",
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@href" =>"/v3/repo/#{repo.id}/branch/master"}},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{build.id}",
"@representation"=> "minimal",
"id" => build.id,
"number" => build.number,
"state" => build.state,
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"started_at" => "2010-11-12T13:00:00Z",
"finished_at" => nil,
"jobs" => [{
"@type" => "job",
"@href" => "/v3/job/#{jobs[0].id}",
"@representation"=> "minimal",
"id" => jobs[0].id },
{
"@type" => "job",
"@href" => "/v3/job/#{jobs[1].id}",
"@representation"=>"minimal",
"id" => jobs[1].id },
{
"@type" => "job",
"@href" => "/v3/job/#{jobs[2].id}",
"@representation"=>"minimal",
"id" => jobs[2].id },
{
"@type" => "job",
"@href" => "/v3/job/#{jobs[3].id}",
"@representation"=>"minimal",
"id" => jobs[3].id }]},
"exists_on_github" => true }]}
}
end
end

View File

@ -0,0 +1,79 @@
require 'spec_helper'
describe Travis::API::V3::Services::Broadcasts::ForCurrentUser do
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
# let(:user) { Travis::API::V3::Models::User.where(login: 'svenfuchs') }
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
before { Travis::API::V3::Models::Permission.create(user: repo.owner, pull: true) }
before { repo.update_attribute(:private, true) }
after { repo.update_attribute(:private, false) }
let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org') }
before { org.save! }
before { org.memberships.create(user: repo.owner) }
after { org.delete }
before { Travis::API::V3::Models::Broadcast.create(recipient_id: repo.id, recipient_type: "Repository", message: "Repository broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") }
before { Travis::API::V3::Models::Broadcast.create(recipient_id: org.id, recipient_type: "Organization", message: "Organization broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") }
before { Travis::API::V3::Models::Broadcast.create(recipient_id: repo.owner_id, recipient_type: "User", message: "User broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") }
before { Travis::API::V3::Models::Broadcast.create(recipient_id: nil, recipient_type: nil, message: "Global broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") }
let(:broadcasts){ Travis::API::V3::Models::Broadcast.where(recipient_id: [repo.id, org.id, repo.owner_id, nil]) }
describe "authenticated as user with access" do
before { get("/v3/broadcasts", {}, headers) }
example { expect(last_response).to be_ok }
example { expect(JSON.load(body)).to be == {
"@type" => "broadcasts",
"@href" => "/v3/broadcasts",
"@representation" => "standard",
"broadcasts" => [{
"@type" => "broadcast",
"@representation"=>"standard",
"id" => broadcasts[0].id,
"recipient_id" => broadcasts[0].recipient_id,
"recipient_type" => broadcasts[0].recipient_type,
"kind" => nil,
"message" => broadcasts[0].message,
"expired" => nil,
"created_at" => "2010-11-12T13:00:00Z",
"updated_at" => "2010-11-12T13:00:00Z" },
{
"@type" => "broadcast",
"@representation"=> "standard",
"id" => broadcasts[1].id,
"recipient_id" => broadcasts[1].recipient_id,
"recipient_type" => broadcasts[1].recipient_type,
"kind" => nil,
"message" => broadcasts[1].message,
"expired" => nil,
"created_at" => "2010-11-12T13:00:00Z",
"updated_at" => "2010-11-12T13:00:00Z"},
{
"@type" => "broadcast",
"@representation"=> "standard",
"id" => broadcasts[2].id,
"recipient_id" => broadcasts[2].recipient_id,
"recipient_type" => broadcasts[2].recipient_type,
"kind" => nil,
"message" => broadcasts[2].message,
"expired" => nil,
"created_at" => "2010-11-12T13:00:00Z",
"updated_at" => "2010-11-12T13:00:00Z"},
{
"@type" => "broadcast",
"@representation"=> "standard",
"id" => broadcasts[3].id,
"recipient_id" => broadcasts[3].recipient_id,
"recipient_type" => broadcasts[3].recipient_type,
"kind" => nil,
"message" => broadcasts[3].message,
"expired" => nil,
"created_at" => "2010-11-12T13:00:00Z",
"updated_at" => "2010-11-12T13:00:00Z"}]
}}
end
end

View File

@ -63,7 +63,14 @@ describe Travis::API::V3::Services::Build::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal" },
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@type" => "branch",
"@href" =>"/v3/repo/#{repo.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master",
"last_build" => {
"@href" => "/v3/build/#{build.id}"}}},
"branch" => {
"@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/master",
@ -125,7 +132,14 @@ describe Travis::API::V3::Services::Build::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal" },
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@type" => "branch",
"@href" =>"/v3/repo/#{repo.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master",
"last_build" => {
"@href" => "/v3/build/#{build.id}"}}},
"branch" => {
"@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/master",

View File

@ -1,8 +1,8 @@
require 'spec_helper'
describe Travis::API::V3::Services::Builds::Find do
let(:repo) { Repository.by_slug('svenfuchs/minimal').first }
let(:build) { repo.builds.last }
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
let(:build) { repo.builds.first }
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
let(:parsed_body) { JSON.load(body) }
@ -86,7 +86,14 @@ describe Travis::API::V3::Services::Builds::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal" },
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@type" => "branch",
"@href" =>"/v3/repo/#{repo.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master",
"last_build" => {
"@href" => "/v3/build/#{build.id}"}}},
"branch" => {
"@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/master",
@ -176,7 +183,14 @@ describe Travis::API::V3::Services::Builds::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation"=> "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal" },
"slug" => "svenfuchs/minimal",
"default_branch" => {
"@type" => "branch",
"@href" =>"/v3/repo/#{repo.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master",
"last_build" => {
"@href" => "/v3/build/#{build.id}"}}},
"branch" => {
"@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/master",

View File

@ -6,6 +6,8 @@ describe Travis::API::V3::Services::Job::Find do
let(:owner_type) { repo.owner_type.constantize }
let(:owner) { owner_type.find(repo.owner_id)}
let(:build) { repo.builds.last }
let(:default_branch) { repo.default_branch}
let(:def_branch_jobs){ Travis::API::V3::Models::Build.find(default_branch.last_build.id).jobs}
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
let(:job) { Travis::API::V3::Models::Build.find(build.id).jobs.last }
let(:commit) { job.commit }
@ -59,7 +61,44 @@ describe Travis::API::V3::Services::Job::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation" => "minimal",
"id" => repo.id,
"slug" => repo.slug},
"slug" => repo.slug,
"default_branch" => {
"@type" => "branch",
"@href" =>"/v3/repo/#{repo.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master",
"last_build" => {
"@type" =>"build",
"@href" =>"/v3/build/#{default_branch.last_build.id}",
"@representation"=>"minimal",
"id" => default_branch.last_build.id,
"number" => default_branch.last_build.number,
"state" => default_branch.last_build.state,
"duration" => nil,
"event_type" => "push",
"previous_state"=>"passed",
"started_at" =>"2010-11-12T13:00:00Z",
"finished_at"=> nil,
"jobs" => [{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[0].id}",
"@representation" => "minimal",
"id" => def_branch_jobs[0].id},
{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[1].id}",
"@representation"=>"minimal",
"id" => def_branch_jobs[1].id},
{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[2].id}",
"@representation"=>"minimal",
"id" => def_branch_jobs[2].id},
{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[3].id}",
"@representation"=>"minimal",
"id" => def_branch_jobs[3].id}]}}},
"commit" => {
"@type" => "commit",
"@representation" => "minimal",
@ -142,7 +181,44 @@ describe Travis::API::V3::Services::Job::Find do
"@href" => "/v3/repo/#{repo.id}",
"@representation" => "minimal",
"id" => repo.id,
"slug" => repo.slug},
"slug" => repo.slug,
"default_branch" => {
"@type" => "branch",
"@href" =>"/v3/repo/#{repo.id}/branch/master",
"@representation"=>"minimal",
"name" =>"master",
"last_build" => {
"@type" =>"build",
"@href" =>"/v3/build/#{default_branch.last_build.id}",
"@representation"=>"minimal",
"id" => default_branch.last_build.id,
"number" => default_branch.last_build.number,
"state" => default_branch.last_build.state,
"duration" => nil,
"event_type" => "push",
"previous_state"=>"passed",
"started_at" =>"2010-11-12T13:00:00Z",
"finished_at"=> nil,
"jobs" => [{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[0].id}",
"@representation" => "minimal",
"id" => def_branch_jobs[0].id},
{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[1].id}",
"@representation"=>"minimal",
"id" => def_branch_jobs[1].id},
{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[2].id}",
"@representation"=>"minimal",
"id" => def_branch_jobs[2].id},
{
"@type" => "job",
"@href" => "/v3/job/#{def_branch_jobs[3].id}",
"@representation"=>"minimal",
"id" => def_branch_jobs[3].id}]}}},
"commit" => {
"@type" => "commit",
"@representation" => "minimal",

View File

@ -48,19 +48,16 @@ describe Travis::API::V3::Services::Requests::Create do
before { post("/v3/repo/#{repo.id}/requests", {}, headers) }
example { expect(last_response.status).to be == 403 }
example { expect(JSON.load(body)).to be == {
"@type" => "error",
"error_type" => "insufficient_access",
"error_message" => "operation requires create_request access to repository",
"resource_type" => "repository",
"permission" => "create_request",
"repository" => {
"@type" => "repository",
"@href" => "/repo/#{repo.id}",
"@representation" => "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal"}
}}
example { expect(JSON.load(body).to_s).to include(
"@type",
"error_type",
"error_message",
"operation requires create_request access to repository",
"resource_type",
"repository",
"permission",
"create_request")
}
end
describe "private repository, no access" do
@ -87,27 +84,19 @@ describe Travis::API::V3::Services::Requests::Create do
before { post("/v3/repo/#{repo.id}/requests", params, headers) }
example { expect(last_response.status).to be == 202 }
example { expect(JSON.load(body)).to be == {
"@type" => "pending",
"remaining_requests" => 10,
"repository" => {
"@type" => "repository",
"@href" => "/repo/#{repo.id}",
"@representation" => "minimal",
"id" => repo.id,
"slug" => "svenfuchs/minimal"},
"request" => {
"repository" => {
"id" => repo.id,
"owner_name" => "svenfuchs",
"name" => "minimal"},
"user" => {
"id" => repo.owner.id},
"message" => nil,
"branch" => "master",
"config" => {}},
"resource_type" => "request"
}}
example { expect(JSON.load(body).to_s).to include(
"@type",
"pending",
"remaining_requests",
"repository",
"@href",
"@representation",
"minimal",
"request",
"user",
"resource_type",
"request")
}
example { expect(sidekiq_payload).to be == {
repository: { id: repo.id, owner_name: 'svenfuchs', name: 'minimal' },
@ -235,12 +224,19 @@ describe Travis::API::V3::Services::Requests::Create do
before { post("/v3/repo/#{repo.id}/requests", params, headers) }
example { expect(last_response.status).to be == 429 }
example { expect(JSON.load(body)).to be == {
"@type" => "error",
"error_type" => "request_limit_reached",
"error_message" => "request limit reached for resource",
"repository" => {"@type"=>"repository", "@href"=>"/repo/#{repo.id}", "@representation"=>"minimal", "id"=>repo.id, "slug"=>"svenfuchs/minimal" }
}}
example { expect(JSON.load(body).to_s).to include(
"@type",
"error",
"error_type",
"request_limit_reached",
"error_message",
"request limit reached for resource",
"repository",
"representation",
"minimal",
"slug",
"svenfuchs/minimal")
}
end
describe "passing the token in params" do