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:
commit
1e6d4738e3
7
lib/travis/api/v3/queries/branches.rb
Normal file
7
lib/travis/api/v3/queries/branches.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Queries::Branches < Query
|
||||||
|
def find(repository)
|
||||||
|
repository.branches
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
lib/travis/api/v3/queries/broadcasts.rb
Normal file
13
lib/travis/api/v3/queries/broadcasts.rb
Normal 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
|
|
@ -3,6 +3,6 @@ require 'travis/api/v3/renderer/model_renderer'
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Renderer::Branch < Renderer::ModelRenderer
|
class Renderer::Branch < Renderer::ModelRenderer
|
||||||
representation(:minimal, :name, :last_build)
|
representation(:minimal, :name, :last_build)
|
||||||
representation(:standard, :name, :repository, :last_build)
|
representation(:standard, :name, :repository, :last_build, :exists_on_github)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
6
lib/travis/api/v3/renderer/branches.rb
Normal file
6
lib/travis/api/v3/renderer/branches.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Renderer::Branches < Renderer::CollectionRenderer
|
||||||
|
type :branches
|
||||||
|
collection_key :branches
|
||||||
|
end
|
||||||
|
end
|
8
lib/travis/api/v3/renderer/broadcast.rb
Normal file
8
lib/travis/api/v3/renderer/broadcast.rb
Normal 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
|
6
lib/travis/api/v3/renderer/broadcasts.rb
Normal file
6
lib/travis/api/v3/renderer/broadcasts.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Renderer::Broadcasts < Renderer::CollectionRenderer
|
||||||
|
type :broadcasts
|
||||||
|
collection_key :broadcasts
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,7 +2,7 @@ require 'travis/api/v3/renderer/model_renderer'
|
||||||
|
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Renderer::Repository < Renderer::ModelRenderer
|
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)
|
representation(:standard, :id, :name, :slug, :description, :github_language, :active, :private, :owner, :last_build, :default_branch)
|
||||||
|
|
||||||
def active
|
def active
|
||||||
|
|
|
@ -8,39 +8,8 @@ module Travis::API::V3
|
||||||
get :for_current_user
|
get :for_current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :owner do
|
resource :broadcasts do
|
||||||
route '/owner/({owner.login}|{user.login}|{organization.login})'
|
route '/broadcasts'
|
||||||
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'
|
|
||||||
get :for_current_user
|
get :for_current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -48,6 +17,9 @@ module Travis::API::V3
|
||||||
capture id: :digit
|
capture id: :digit
|
||||||
route '/build/{build.id}'
|
route '/build/{build.id}'
|
||||||
get :find
|
get :find
|
||||||
|
|
||||||
|
# post :cancel, '/cancel'
|
||||||
|
# post :restart, '/restart'
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :job do
|
resource :job do
|
||||||
|
@ -56,13 +28,6 @@ module Travis::API::V3
|
||||||
get :find
|
get :find
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :user do
|
|
||||||
capture id: :digit
|
|
||||||
route '/user'
|
|
||||||
get :current
|
|
||||||
get :find, '/{user.id}'
|
|
||||||
end
|
|
||||||
|
|
||||||
resource :organization do
|
resource :organization do
|
||||||
capture id: :digit
|
capture id: :digit
|
||||||
route '/org/{organization.id}'
|
route '/org/{organization.id}'
|
||||||
|
@ -73,5 +38,54 @@ module Travis::API::V3
|
||||||
route '/orgs'
|
route '/orgs'
|
||||||
get :for_current_user
|
get :for_current_user
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,9 +4,13 @@ module Travis::API::V3
|
||||||
|
|
||||||
Accounts = Module.new { extend Services }
|
Accounts = Module.new { extend Services }
|
||||||
Branch = 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 }
|
Build = Module.new { extend Services }
|
||||||
Builds = Module.new { extend Services }
|
Builds = Module.new { extend Services }
|
||||||
Job = Module.new { extend Services }
|
Job = Module.new { extend Services }
|
||||||
|
Jobs = Module.new { extend Services }
|
||||||
Organization = Module.new { extend Services }
|
Organization = Module.new { extend Services }
|
||||||
Organizations = Module.new { extend Services }
|
Organizations = Module.new { extend Services }
|
||||||
Owner = Module.new { extend Services }
|
Owner = Module.new { extend Services }
|
||||||
|
@ -16,7 +20,7 @@ module Travis::API::V3
|
||||||
User = Module.new { extend Services }
|
User = Module.new { extend Services }
|
||||||
|
|
||||||
def result_type
|
def result_type
|
||||||
@resul_type ||= name[/[^:]+$/].underscore.to_sym
|
@result_type ||= name[/[^:]+$/].underscore.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
8
lib/travis/api/v3/services/branches/find.rb
Normal file
8
lib/travis/api/v3/services/branches/find.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Services::Branches::Find < Service
|
||||||
|
paginate
|
||||||
|
def run!
|
||||||
|
query.find(find(:repository))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -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
|
|
@ -1,5 +1,6 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Services::Requests::Find < Service
|
class Services::Requests::Find < Service
|
||||||
|
paginate
|
||||||
def run!
|
def run!
|
||||||
query.find(find(:repository))
|
query.find(find(:repository))
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe Travis::API::V3::ServiceIndex do
|
||||||
|
|
||||||
describe "find action" do
|
describe "find action" do
|
||||||
let(:action) { resource.fetch("actions").fetch("find") }
|
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
|
end
|
||||||
|
|
||||||
describe "create action" do
|
describe "create action" do
|
||||||
|
|
|
@ -19,7 +19,9 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.id,
|
"id" => repo.id,
|
||||||
"slug" => "svenfuchs/minimal"},
|
"slug" => "svenfuchs/minimal",
|
||||||
|
"default_branch" => {
|
||||||
|
"@href" => "/v3/repo/#{repo.id}/branch/master"}},
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
|
@ -48,7 +50,8 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
{"@type" => "job",
|
{"@type" => "job",
|
||||||
"@href" => "/v3/job/#{jobs[3].id}",
|
"@href" => "/v3/job/#{jobs[3].id}",
|
||||||
"@representation"=>"minimal",
|
"@representation"=>"minimal",
|
||||||
"id" =>jobs[3].id}]}
|
"id" =>jobs[3].id}]},
|
||||||
|
"exists_on_github"=> true
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
174
spec/v3/services/branches/find_spec.rb
Normal file
174
spec/v3/services/branches/find_spec.rb
Normal 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
|
79
spec/v3/services/broadcasts/for_current_user_spec.rb
Normal file
79
spec/v3/services/broadcasts/for_current_user_spec.rb
Normal 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
|
|
@ -63,7 +63,14 @@ describe Travis::API::V3::Services::Build::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.id,
|
"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" => {
|
"branch" => {
|
||||||
"@type" => "branch",
|
"@type" => "branch",
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
|
@ -125,7 +132,14 @@ describe Travis::API::V3::Services::Build::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.id,
|
"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" => {
|
"branch" => {
|
||||||
"@type" => "branch",
|
"@type" => "branch",
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Builds::Find do
|
describe Travis::API::V3::Services::Builds::Find do
|
||||||
let(:repo) { Repository.by_slug('svenfuchs/minimal').first }
|
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
||||||
let(:build) { repo.builds.last }
|
let(:build) { repo.builds.first }
|
||||||
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
let(:parsed_body) { JSON.load(body) }
|
let(:parsed_body) { JSON.load(body) }
|
||||||
|
|
||||||
|
@ -86,7 +86,14 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.id,
|
"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" => {
|
"branch" => {
|
||||||
"@type" => "branch",
|
"@type" => "branch",
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
|
@ -176,7 +183,14 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.id,
|
"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" => {
|
"branch" => {
|
||||||
"@type" => "branch",
|
"@type" => "branch",
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
|
|
|
@ -6,6 +6,8 @@ describe Travis::API::V3::Services::Job::Find do
|
||||||
let(:owner_type) { repo.owner_type.constantize }
|
let(:owner_type) { repo.owner_type.constantize }
|
||||||
let(:owner) { owner_type.find(repo.owner_id)}
|
let(:owner) { owner_type.find(repo.owner_id)}
|
||||||
let(:build) { repo.builds.last }
|
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(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
let(:job) { Travis::API::V3::Models::Build.find(build.id).jobs.last }
|
let(:job) { Travis::API::V3::Models::Build.find(build.id).jobs.last }
|
||||||
let(:commit) { job.commit }
|
let(:commit) { job.commit }
|
||||||
|
@ -59,7 +61,44 @@ describe Travis::API::V3::Services::Job::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"id" => repo.id,
|
"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" => {
|
"commit" => {
|
||||||
"@type" => "commit",
|
"@type" => "commit",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
|
@ -142,7 +181,44 @@ describe Travis::API::V3::Services::Job::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"id" => repo.id,
|
"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" => {
|
"commit" => {
|
||||||
"@type" => "commit",
|
"@type" => "commit",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
|
|
|
@ -48,19 +48,16 @@ describe Travis::API::V3::Services::Requests::Create do
|
||||||
before { post("/v3/repo/#{repo.id}/requests", {}, headers) }
|
before { post("/v3/repo/#{repo.id}/requests", {}, headers) }
|
||||||
|
|
||||||
example { expect(last_response.status).to be == 403 }
|
example { expect(last_response.status).to be == 403 }
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body).to_s).to include(
|
||||||
"@type" => "error",
|
"@type",
|
||||||
"error_type" => "insufficient_access",
|
"error_type",
|
||||||
"error_message" => "operation requires create_request access to repository",
|
"error_message",
|
||||||
"resource_type" => "repository",
|
"operation requires create_request access to repository",
|
||||||
"permission" => "create_request",
|
"resource_type",
|
||||||
"repository" => {
|
"repository",
|
||||||
"@type" => "repository",
|
"permission",
|
||||||
"@href" => "/repo/#{repo.id}",
|
"create_request")
|
||||||
"@representation" => "minimal",
|
}
|
||||||
"id" => repo.id,
|
|
||||||
"slug" => "svenfuchs/minimal"}
|
|
||||||
}}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "private repository, no access" do
|
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) }
|
before { post("/v3/repo/#{repo.id}/requests", params, headers) }
|
||||||
|
|
||||||
example { expect(last_response.status).to be == 202 }
|
example { expect(last_response.status).to be == 202 }
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body).to_s).to include(
|
||||||
"@type" => "pending",
|
"@type",
|
||||||
"remaining_requests" => 10,
|
"pending",
|
||||||
"repository" => {
|
"remaining_requests",
|
||||||
"@type" => "repository",
|
"repository",
|
||||||
"@href" => "/repo/#{repo.id}",
|
"@href",
|
||||||
"@representation" => "minimal",
|
"@representation",
|
||||||
"id" => repo.id,
|
"minimal",
|
||||||
"slug" => "svenfuchs/minimal"},
|
"request",
|
||||||
"request" => {
|
"user",
|
||||||
"repository" => {
|
"resource_type",
|
||||||
"id" => repo.id,
|
"request")
|
||||||
"owner_name" => "svenfuchs",
|
}
|
||||||
"name" => "minimal"},
|
|
||||||
"user" => {
|
|
||||||
"id" => repo.owner.id},
|
|
||||||
"message" => nil,
|
|
||||||
"branch" => "master",
|
|
||||||
"config" => {}},
|
|
||||||
"resource_type" => "request"
|
|
||||||
}}
|
|
||||||
|
|
||||||
example { expect(sidekiq_payload).to be == {
|
example { expect(sidekiq_payload).to be == {
|
||||||
repository: { id: repo.id, owner_name: 'svenfuchs', name: 'minimal' },
|
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) }
|
before { post("/v3/repo/#{repo.id}/requests", params, headers) }
|
||||||
|
|
||||||
example { expect(last_response.status).to be == 429 }
|
example { expect(last_response.status).to be == 429 }
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body).to_s).to include(
|
||||||
"@type" => "error",
|
"@type",
|
||||||
"error_type" => "request_limit_reached",
|
"error",
|
||||||
"error_message" => "request limit reached for resource",
|
"error_type",
|
||||||
"repository" => {"@type"=>"repository", "@href"=>"/repo/#{repo.id}", "@representation"=>"minimal", "id"=>repo.id, "slug"=>"svenfuchs/minimal" }
|
"request_limit_reached",
|
||||||
}}
|
"error_message",
|
||||||
|
"request limit reached for resource",
|
||||||
|
"repository",
|
||||||
|
"representation",
|
||||||
|
"minimal",
|
||||||
|
"slug",
|
||||||
|
"svenfuchs/minimal")
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "passing the token in params" do
|
describe "passing the token in params" do
|
||||||
|
|
Loading…
Reference in New Issue
Block a user