Merge pull request #186 from travis-ci/cd-v3-parity
v3 improvements incl. :job attribute on build payload and /job/:id endpoint and specs using v3 models
This commit is contained in:
commit
f57f62ba75
|
@ -55,6 +55,10 @@ module Travis::API::V3
|
||||||
visible? branch.repository
|
visible? branch.repository
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def job_visible?(job)
|
||||||
|
visible? job.repository
|
||||||
|
end
|
||||||
|
|
||||||
def organization_visible?(organization)
|
def organization_visible?(organization)
|
||||||
full_access? or public_api?
|
full_access? or public_api?
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,11 @@ module Travis::API::V3
|
||||||
belongs_to :request
|
belongs_to :request
|
||||||
belongs_to :repository, autosave: true
|
belongs_to :repository, autosave: true
|
||||||
belongs_to :owner, polymorphic: true
|
belongs_to :owner, polymorphic: true
|
||||||
has_many :jobs, as: :source, order: :id, dependent: :destroy
|
|
||||||
|
has_many :jobs,
|
||||||
|
as: :source,
|
||||||
|
order: :id,
|
||||||
|
dependent: :destroy
|
||||||
|
|
||||||
has_one :branch,
|
has_one :branch,
|
||||||
foreign_key: [:repository_id, :name],
|
foreign_key: [:repository_id, :name],
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Models::Job < Model
|
class Models::Job < Model
|
||||||
|
|
||||||
|
self.inheritance_column = :_type_disabled
|
||||||
|
|
||||||
has_one :log, dependent: :destroy
|
has_one :log, dependent: :destroy
|
||||||
belongs_to :repository
|
belongs_to :repository
|
||||||
belongs_to :commit
|
belongs_to :commit
|
||||||
|
|
10
lib/travis/api/v3/queries/job.rb
Normal file
10
lib/travis/api/v3/queries/job.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Queries::Job < Query
|
||||||
|
params :id
|
||||||
|
|
||||||
|
def find
|
||||||
|
return Models::Job.find_by_id(id) if id
|
||||||
|
raise WrongParams, 'missing build.id'.freeze
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -48,6 +48,7 @@ module Travis::API::V3
|
||||||
when Time then value.strftime('%Y-%m-%dT%H:%M:%SZ')
|
when Time then value.strftime('%Y-%m-%dT%H:%M:%SZ')
|
||||||
when Model then render_model(value, **options)
|
when Model then render_model(value, **options)
|
||||||
when ActiveRecord::Relation then render_value(value.to_a, **options)
|
when ActiveRecord::Relation then render_value(value.to_a, **options)
|
||||||
|
when ActiveRecord::Associations::CollectionProxy then render_value(value.to_a, **options)
|
||||||
else raise ArgumentError, 'cannot render %p (%p)' % [value.class, value]
|
else raise ArgumentError, 'cannot render %p (%p)' % [value.class, value]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'travis/api/v3/renderer/model_renderer'
|
||||||
|
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Renderer::Build < Renderer::ModelRenderer
|
class Renderer::Build < Renderer::ModelRenderer
|
||||||
representation(:minimal, :id, :number, :state, :duration, :event_type, :previous_state, :started_at, :finished_at)
|
representation(:minimal, :id, :number, :state, :duration, :event_type, :previous_state, :started_at, :finished_at, :jobs)
|
||||||
representation(:standard, *representations[:minimal], :repository, :branch, :commit)
|
representation(:standard, *representations[:minimal], :repository, :branch, :commit )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
8
lib/travis/api/v3/renderer/job.rb
Normal file
8
lib/travis/api/v3/renderer/job.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
require 'travis/api/v3/renderer/model_renderer'
|
||||||
|
|
||||||
|
module Travis::API::V3
|
||||||
|
class Renderer::Job < Renderer::ModelRenderer
|
||||||
|
representation(:minimal, :id)
|
||||||
|
representation(:standard, *representations[:minimal], :number, :state, :started_at, :finished_at, :build, :queue, :repository, :commit, :owner )
|
||||||
|
end
|
||||||
|
end
|
6
lib/travis/api/v3/renderer/jobs.rb
Normal file
6
lib/travis/api/v3/renderer/jobs.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Renderer::Jobs < Renderer::CollectionRenderer
|
||||||
|
type :jobs
|
||||||
|
collection_key :jobs
|
||||||
|
end
|
||||||
|
end
|
|
@ -50,6 +50,12 @@ module Travis::API::V3
|
||||||
get :find
|
get :find
|
||||||
end
|
end
|
||||||
|
|
||||||
|
resource :job do
|
||||||
|
capture id: :digit
|
||||||
|
route '/job/{job.id}'
|
||||||
|
get :find
|
||||||
|
end
|
||||||
|
|
||||||
resource :user do
|
resource :user do
|
||||||
capture id: :digit
|
capture id: :digit
|
||||||
route '/user'
|
route '/user'
|
||||||
|
|
|
@ -6,6 +6,7 @@ module Travis::API::V3
|
||||||
Branch = Module.new { extend Services }
|
Branch = 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 }
|
||||||
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 }
|
||||||
|
|
7
lib/travis/api/v3/services/job/find.rb
Normal file
7
lib/travis/api/v3/services/job/find.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
module Travis::API::V3
|
||||||
|
class Services::Job::Find < Service
|
||||||
|
def run!
|
||||||
|
find
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -15,4 +15,4 @@ describe Travis::API::V3::Extensions::BelongsTo do
|
||||||
example { expect(::Repository.find(repo.id).owner).to be_a(::User) }
|
example { expect(::Repository.find(repo.id).owner).to be_a(::User) }
|
||||||
example { expect(user.repositories).to include(repo) }
|
example { expect(user.repositories).to include(repo) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Accounts::ForCurrentUser do
|
describe Travis::API::V3::Services::Accounts::ForCurrentUser do
|
||||||
let(:repo) { Repository.by_slug('svenfuchs/minimal').first }
|
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||||
before { repo.update_attribute(:private, true) }
|
before { repo.update_attribute(:private, true) }
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
|
|
||||||
let(:org) { Organization.new(login: 'example-org', github_id: 42) }
|
let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org', github_id: 42) }
|
||||||
before { org.save! }
|
before { org.save! }
|
||||||
before { org.memberships.create(user: repo.owner) }
|
before { org.memberships.create(user: repo.owner) }
|
||||||
after { org.delete }
|
after { org.delete }
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Repository::Find do
|
describe Travis::API::V3::Services::Repository::Find do
|
||||||
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
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 }
|
||||||
before { repo.default_branch.save! }
|
before { repo.default_branch.save! }
|
||||||
|
|
||||||
describe "public repository, existing branch" do
|
describe "public repository, existing branch" do
|
||||||
before { get("/v3/repo/#{repo.id}/branch/master") }
|
before { get("/v3/repo/#{repo.id}/branch/master") }
|
||||||
example { expect(last_response).to be_ok }
|
example { expect(last_response).to be_ok }
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body)).to be == {
|
||||||
"@type" => "branch",
|
"@type" => "branch",
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
|
@ -29,6 +31,24 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}}
|
"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}]}
|
||||||
|
}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
147
spec/v3/services/build/find_spec.rb
Normal file
147
spec/v3/services/build/find_spec.rb
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Travis::API::V3::Services::Build::Find do
|
||||||
|
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) }
|
||||||
|
|
||||||
|
describe "fetching build on a public repository " do
|
||||||
|
before { get("/v3/build/#{build.id}") }
|
||||||
|
example { expect(last_response).to be_ok }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "fetching a non-existing build" do
|
||||||
|
before { get("/v3/build/1231987129387218") }
|
||||||
|
example { expect(last_response).to be_not_found }
|
||||||
|
example { expect(parsed_body).to be == {
|
||||||
|
"@type" => "error",
|
||||||
|
"error_type" => "not_found",
|
||||||
|
"error_message" => "build not found (or insufficient access)",
|
||||||
|
"resource_type" => "build"
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "build on public repository" do
|
||||||
|
before { get("/v3/build/#{build.id}") }
|
||||||
|
example { expect(last_response).to be_ok }
|
||||||
|
example { expect(parsed_body).to be == {
|
||||||
|
"@type" => "build",
|
||||||
|
"@href" => "/v3/build/#{build.id}",
|
||||||
|
"@representation" => "standard",
|
||||||
|
"id" => build.id,
|
||||||
|
"number" => build.number,
|
||||||
|
"state" => build.state,
|
||||||
|
"duration" => nil,
|
||||||
|
"event_type" => "push",
|
||||||
|
"previous_state" => build.previous_state,
|
||||||
|
"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}],
|
||||||
|
"repository" => {
|
||||||
|
"@type" => "repository",
|
||||||
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
"@representation"=> "minimal",
|
||||||
|
"id" => repo.id,
|
||||||
|
"slug" => "svenfuchs/minimal" },
|
||||||
|
"branch" => {
|
||||||
|
"@type" => "branch",
|
||||||
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
|
"@representation"=> "minimal",
|
||||||
|
"name" => "master",
|
||||||
|
"last_build" => {
|
||||||
|
"@href" => "/v3/build/#{build.id}" }},
|
||||||
|
"commit" => {
|
||||||
|
"@type" => "commit",
|
||||||
|
"@representation"=> "minimal",
|
||||||
|
"id" => 5,
|
||||||
|
"sha" => "add057e66c3e1d59ef1f",
|
||||||
|
"ref" => "refs/heads/master",
|
||||||
|
"message" => "unignore Gemfile.lock",
|
||||||
|
"compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop",
|
||||||
|
"committed_at" => "2010-11-12T12:55:00Z"}
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "build 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/build/#{build.id}", {}, headers) }
|
||||||
|
after { repo.update_attribute(:private, false) }
|
||||||
|
example { expect(last_response).to be_ok }
|
||||||
|
example { expect(parsed_body).to be == {
|
||||||
|
"@type" => "build",
|
||||||
|
"@href" => "/v3/build/#{build.id}",
|
||||||
|
"@representation" => "standard",
|
||||||
|
"id" => build.id,
|
||||||
|
"number" => build.number,
|
||||||
|
"state" => build.state,
|
||||||
|
"duration" => nil,
|
||||||
|
"event_type" => "push",
|
||||||
|
"previous_state" => build.previous_state,
|
||||||
|
"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}],
|
||||||
|
"repository" => {
|
||||||
|
"@type" => "repository",
|
||||||
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
"@representation"=> "minimal",
|
||||||
|
"id" => repo.id,
|
||||||
|
"slug" => "svenfuchs/minimal" },
|
||||||
|
"branch" => {
|
||||||
|
"@type" => "branch",
|
||||||
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
|
"@representation"=> "minimal",
|
||||||
|
"name" => "master",
|
||||||
|
"last_build" => {
|
||||||
|
"@href" => "/v3/build/#{build.id}" }},
|
||||||
|
"commit" => {
|
||||||
|
"@type" => "commit",
|
||||||
|
"@representation"=> "minimal",
|
||||||
|
"id" => 5,
|
||||||
|
"sha" => "add057e66c3e1d59ef1f",
|
||||||
|
"ref" => "refs/heads/master",
|
||||||
|
"message" => "unignore Gemfile.lock",
|
||||||
|
"compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop",
|
||||||
|
"committed_at" => "2010-11-12T12:55:00Z"}
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,6 +3,7 @@ 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) { Repository.by_slug('svenfuchs/minimal').first }
|
||||||
let(:build) { repo.builds.last }
|
let(:build) { repo.builds.last }
|
||||||
|
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
let(:parsed_body) { JSON.load(body) }
|
let(:parsed_body) { JSON.load(body) }
|
||||||
|
|
||||||
describe "fetching builds on a public repository by slug" do
|
describe "fetching builds on a public repository by slug" do
|
||||||
|
@ -59,6 +60,27 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil,
|
"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}],
|
||||||
"repository" => {
|
"repository" => {
|
||||||
"@type" => "repository",
|
"@type" => "repository",
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
@ -80,19 +102,20 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"ref" => "refs/heads/master",
|
"ref" => "refs/heads/master",
|
||||||
"message" => "unignore Gemfile.lock",
|
"message" => "unignore Gemfile.lock",
|
||||||
"compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop",
|
"compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop",
|
||||||
"committed_at" => "2010-11-12T12:55:00Z"}}],
|
"committed_at" => "2010-11-12T12:55:00Z"},
|
||||||
}}
|
}]
|
||||||
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "builds private repository, private API, authenticated as user with access" do
|
describe "builds private repository, private API, authenticated as user with access" do
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||||
before { repo.update_attribute(:private, true) }
|
before { repo.update_attribute(:private, true) }
|
||||||
before { get("/v3/repo/#{repo.id}/builds?limit=1", {}, headers) }
|
before { get("/v3/repo/#{repo.id}/builds?limit=1", {}, headers) }
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
example { expect(last_response).to be_ok }
|
example { expect(last_response).to be_ok }
|
||||||
example { expect(parsed_body).to be == {
|
example { expect(parsed_body).to be == {
|
||||||
"@type" => "builds",
|
"@type" => "builds",
|
||||||
"@href" => "/v3/repo/#{repo.id}/builds?limit=1",
|
"@href" => "/v3/repo/#{repo.id}/builds?limit=1",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
|
@ -105,7 +128,7 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"next" => {
|
"next" => {
|
||||||
"@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=1",
|
"@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=1",
|
||||||
"offset" => 1,
|
"offset" => 1,
|
||||||
"limit" => 1 },
|
"limit" => 1},
|
||||||
"prev" => nil,
|
"prev" => nil,
|
||||||
"first" => {
|
"first" => {
|
||||||
"@href" => "/v3/repo/#{repo.id}/builds?limit=1",
|
"@href" => "/v3/repo/#{repo.id}/builds?limit=1",
|
||||||
|
@ -127,19 +150,40 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil,
|
"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}],
|
||||||
"repository" => {
|
"repository" => {
|
||||||
"@type" => "repository",
|
"@type" => "repository",
|
||||||
"@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" },
|
||||||
"branch" => {
|
"branch" => {
|
||||||
"@type" => "branch",
|
"@type" => "branch",
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@href" => "/v3/build/#{build.id}"}},
|
"@href" => "/v3/build/#{build.id}" }},
|
||||||
"commit" => {
|
"commit" => {
|
||||||
"@type" => "commit",
|
"@type" => "commit",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
|
@ -148,7 +192,8 @@ describe Travis::API::V3::Services::Builds::Find do
|
||||||
"ref" => "refs/heads/master",
|
"ref" => "refs/heads/master",
|
||||||
"message" => "unignore Gemfile.lock",
|
"message" => "unignore Gemfile.lock",
|
||||||
"compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop",
|
"compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop",
|
||||||
"committed_at" => "2010-11-12T12:55:00Z"}}]
|
"committed_at" => "2010-11-12T12:55:00Z"}
|
||||||
|
}]
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
163
spec/v3/services/job/find_spec.rb
Normal file
163
spec/v3/services/job/find_spec.rb
Normal file
|
@ -0,0 +1,163 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Travis::API::V3::Services::Job::Find do
|
||||||
|
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
||||||
|
let(:owner_href) { repo.owner_type.downcase }
|
||||||
|
let(:owner_type) { repo.owner_type.constantize }
|
||||||
|
let(:owner) { owner_type.find(repo.owner_id)}
|
||||||
|
let(:build) { repo.builds.last }
|
||||||
|
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 }
|
||||||
|
let(:parsed_body) { JSON.load(body) }
|
||||||
|
|
||||||
|
describe "fetching job on a public repository" do
|
||||||
|
before { get("/v3/job/#{job.id}") }
|
||||||
|
example { expect(last_response).to be_ok }
|
||||||
|
example { expect(parsed_body).to be == {
|
||||||
|
"@type" => "job",
|
||||||
|
"@href" => "/v3/job/#{job.id}",
|
||||||
|
"@representation" => "standard",
|
||||||
|
"id" => job.id,
|
||||||
|
"number" => job.number,
|
||||||
|
"state" => job.state,
|
||||||
|
"started_at" => "2010-11-12T12:00:00Z",
|
||||||
|
"finished_at" => "2010-11-12T12:00:10Z",
|
||||||
|
"build" => {
|
||||||
|
"@type" => "build",
|
||||||
|
"@href" => "/v3/build/#{build.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => build.id,
|
||||||
|
"number" => build.number,
|
||||||
|
"state" => build.state,
|
||||||
|
"duration" => build.duration,
|
||||||
|
"event_type" => build.event_type,
|
||||||
|
"previous_state" => build.previous_state,
|
||||||
|
"started_at" => "2010-11-12T12:00:00Z",
|
||||||
|
"finished_at" => "2010-11-12T12:00:10Z",
|
||||||
|
"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},
|
||||||
|
{
|
||||||
|
"@href" => "/v3/job/#{jobs[3].id}"}]},
|
||||||
|
"queue" => job.queue,
|
||||||
|
"repository" => {
|
||||||
|
"@type" => "repository",
|
||||||
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => repo.id,
|
||||||
|
"slug" => repo.slug},
|
||||||
|
"commit" => {
|
||||||
|
"@type" => "commit",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => commit.id,
|
||||||
|
"sha" => commit.commit,
|
||||||
|
"ref" => commit.ref,
|
||||||
|
"message" => commit.message,
|
||||||
|
"compare_url" => commit.compare_url,
|
||||||
|
"committed_at" => "2010-11-12T11:50:00Z"},
|
||||||
|
"owner" => {
|
||||||
|
"@type" => owner_type.to_s.downcase,
|
||||||
|
"@href" => "/v3/#{owner_href}/#{owner.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => owner.id,
|
||||||
|
"login" => owner.login}
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "fetching a non-existing job" do
|
||||||
|
before { get("/v3/job/1233456789") }
|
||||||
|
example { expect(last_response).to be_not_found }
|
||||||
|
example { expect(parsed_body).to be == {
|
||||||
|
"@type" => "error",
|
||||||
|
"error_type" => "not_found",
|
||||||
|
"error_message" => "job not found (or insufficient access)",
|
||||||
|
"resource_type" => "job"
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "fetching job on 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/job/#{job.id}", {}, headers) }
|
||||||
|
after { repo.update_attribute(:private, false) }
|
||||||
|
example { expect(last_response).to be_ok }
|
||||||
|
example { expect(parsed_body).to be == {
|
||||||
|
"@type" => "job",
|
||||||
|
"@href" => "/v3/job/#{job.id}",
|
||||||
|
"@representation" => "standard",
|
||||||
|
"id" => job.id,
|
||||||
|
"number" => job.number,
|
||||||
|
"state" => job.state,
|
||||||
|
"started_at" => "2010-11-12T12:00:00Z",
|
||||||
|
"finished_at" => "2010-11-12T12:00:10Z",
|
||||||
|
"build" => {
|
||||||
|
"@type" => "build",
|
||||||
|
"@href" => "/v3/build/#{build.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => build.id,
|
||||||
|
"number" => build.number,
|
||||||
|
"state" => build.state,
|
||||||
|
"duration" => build.duration,
|
||||||
|
"event_type" => build.event_type,
|
||||||
|
"previous_state" => build.previous_state,
|
||||||
|
"started_at" => "2010-11-12T12:00:00Z",
|
||||||
|
"finished_at" => "2010-11-12T12:00:10Z",
|
||||||
|
"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},
|
||||||
|
{
|
||||||
|
"@href" => "/v3/job/#{jobs[3].id}"}]},
|
||||||
|
"queue" => job.queue,
|
||||||
|
"repository" => {
|
||||||
|
"@type" => "repository",
|
||||||
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => repo.id,
|
||||||
|
"slug" => repo.slug},
|
||||||
|
"commit" => {
|
||||||
|
"@type" => "commit",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => commit.id,
|
||||||
|
"sha" => commit.commit,
|
||||||
|
"ref" => commit.ref,
|
||||||
|
"message" => commit.message,
|
||||||
|
"compare_url" => commit.compare_url,
|
||||||
|
"committed_at" => "2010-11-12T11:50:00Z"},
|
||||||
|
"owner" => {
|
||||||
|
"@type" => owner_type.to_s.downcase,
|
||||||
|
"@href" => "/v3/#{owner_href}/#{owner.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => owner.id,
|
||||||
|
"login" => owner.login}
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Organization::Find do
|
describe Travis::API::V3::Services::Organization::Find do
|
||||||
let(:org) { Organization.new(login: 'example-org') }
|
let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org') }
|
||||||
before { org.save! }
|
before { org.save! }
|
||||||
after { org.delete }
|
after { org.delete }
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Organizations::ForCurrentUser do
|
describe Travis::API::V3::Services::Organizations::ForCurrentUser do
|
||||||
let(:repo) { Repository.by_slug('svenfuchs/minimal').first }
|
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||||
before { repo.update_attribute(:private, true) }
|
before { repo.update_attribute(:private, true) }
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
|
|
||||||
let(:org) { Organization.new(login: 'example-org') }
|
let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org') }
|
||||||
before { org.save! }
|
before { org.save! }
|
||||||
before { org.memberships.create(user: repo.owner) }
|
before { org.memberships.create(user: repo.owner) }
|
||||||
after { org.delete }
|
after { org.delete }
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Owner::Find do
|
describe Travis::API::V3::Services::Owner::Find do
|
||||||
describe "organization" do
|
describe "organization" do
|
||||||
let(:org) { Organization.new(login: 'example-org') }
|
let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org') }
|
||||||
before { org.save! }
|
before { org.save! }
|
||||||
after { org.delete }
|
after { org.delete }
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'eager loading repositories via organization.repositories' do
|
describe 'eager loading repositories via organization.repositories' do
|
||||||
let(:repo) { Repository.new(name: 'example-repo', owner_name: 'example-org', owner_id: org.id, owner_type: 'Organization')}
|
let(:repo) { Travis::API::V3::Models::Repository.new(name: 'example-repo', owner_name: 'example-org', owner_id: org.id, owner_type: 'Organization')}
|
||||||
|
|
||||||
before { repo.save! }
|
before { repo.save! }
|
||||||
after { repo.destroy }
|
after { repo.destroy }
|
||||||
|
@ -69,7 +69,7 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'eager loading repositories via owner.repositories' do
|
describe 'eager loading repositories via owner.repositories' do
|
||||||
let(:repo) { Repository.new(name: 'example-repo', owner_name: 'example-org', owner_id: org.id, owner_type: 'Organization')}
|
let(:repo) { Travis::API::V3::Models::Repository.new(name: 'example-repo', owner_name: 'example-org', owner_id: org.id, owner_type: 'Organization')}
|
||||||
|
|
||||||
before { repo.save! }
|
before { repo.save! }
|
||||||
after { repo.destroy }
|
after { repo.destroy }
|
||||||
|
@ -131,7 +131,7 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "does not allow overriding org id" do
|
describe "does not allow overriding org id" do
|
||||||
let(:other) { Organization.new(login: 'other-org') }
|
let(:other) { Travis::API::V3::Models::Organization.new(login: 'other-org') }
|
||||||
before { other.save! }
|
before { other.save! }
|
||||||
after { other.delete }
|
after { other.delete }
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "user" do
|
describe "user" do
|
||||||
let(:user) { User.new(login: 'example-user') }
|
let(:user) { Travis::API::V3::Models::User.new(login: 'example-user') }
|
||||||
before { user.save! }
|
before { user.save! }
|
||||||
after { user.delete }
|
after { user.delete }
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "does not allow overriding user id" do
|
describe "does not allow overriding user id" do
|
||||||
let(:other) { User.new(login: 'other-user') }
|
let(:other) { Travis::API::V3::Models::User.new(login: 'other-user') }
|
||||||
before { other.save! }
|
before { other.save! }
|
||||||
after { other.delete }
|
after { other.delete }
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,23 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Owner::Repositories do
|
describe Travis::API::V3::Services::Owner::Repositories 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.first }
|
||||||
|
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||||
before { repo.update_attribute(:private, true) }
|
before { repo.update_attribute(:private, true) }
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
|
|
||||||
describe "private repository, private API, authenticated as user with access" do
|
describe "private repository, private API, authenticated as user with access" do
|
||||||
before { get("/v3/owner/svenfuchs/repos", {}, headers) }
|
before { get("/v3/owner/svenfuchs/repos", {}, headers) }
|
||||||
example { expect(last_response).to be_ok }
|
example { expect(last_response).to be_ok }
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body)).to be == {
|
||||||
"@type" => "repositories",
|
"@type" => "repositories",
|
||||||
"@href" => "/v3/owner/svenfuchs/repos",
|
"@href" => "/v3/owner/svenfuchs/repos",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
"repositories" => [{
|
"repositories" => [{
|
||||||
"@type" => "repository",
|
"@type" => "repository",
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
@ -25,21 +27,21 @@ describe Travis::API::V3::Services::Owner::Repositories do
|
||||||
"enable" => false,
|
"enable" => false,
|
||||||
"disable" => false,
|
"disable" => false,
|
||||||
"create_request" => false},
|
"create_request" => false},
|
||||||
"id" => repo.id,
|
"id" => repo.id,
|
||||||
"name" => "minimal",
|
"name" => "minimal",
|
||||||
"slug" => "svenfuchs/minimal",
|
"slug" => "svenfuchs/minimal",
|
||||||
"description" => nil,
|
"description" => nil,
|
||||||
"github_language" => nil,
|
"github_language" => nil,
|
||||||
"active" => true,
|
"active" => true,
|
||||||
"private" => true,
|
"private" => true,
|
||||||
"owner" => {
|
"owner" => {
|
||||||
"@type" => "user",
|
"@type" => "user",
|
||||||
"@href" => "/v3/user/#{repo.owner_id}",
|
|
||||||
"id" => repo.owner_id,
|
"id" => repo.owner_id,
|
||||||
"login" => "svenfuchs" },
|
"login" => "svenfuchs",
|
||||||
|
"@href" => "/v3/user/#{repo.owner_id}" },
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build_id}",
|
"@href" => "/v3/build/#{repo.last_build.id}",
|
||||||
"id" => repo.last_build_id,
|
"id" => repo.last_build_id,
|
||||||
"number" => "2",
|
"number" => "2",
|
||||||
"state" => "passed",
|
"state" => "passed",
|
||||||
|
@ -53,16 +55,38 @@ describe Travis::API::V3::Services::Owner::Repositories do
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.last_build.id,
|
"id" => repo.default_branch.last_build.id,
|
||||||
"number" => "3",
|
"number" => "3",
|
||||||
"state" => "configured",
|
"state" => "configured",
|
||||||
"duration" => nil,
|
"duration" => nil,
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}}]
|
"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}]
|
||||||
|
|
||||||
|
}}}]
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Repositories::ForCurrentUser do
|
describe Travis::API::V3::Services::Repositories::ForCurrentUser 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.first }
|
||||||
|
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
before { Permission.create(repository: repo, user: repo.owner, pull: true, push: true) }
|
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true, push: true) }
|
||||||
before { repo.update_attribute(:private, true) }
|
before { repo.update_attribute(:private, true) }
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
|
|
||||||
|
@ -53,16 +55,37 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.last_build.id,
|
"id" => repo.default_branch.last_build.id,
|
||||||
"number" => "3",
|
"number" => "3",
|
||||||
"state" => "configured",
|
"state" => "configured",
|
||||||
"duration" => nil,
|
"duration" => nil,
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}}]
|
"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}]
|
||||||
|
}}}]
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::Repository::Find do
|
describe Travis::API::V3::Services::Repository::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.first }
|
||||||
|
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
let(:parsed_body) { JSON.load(body) }
|
let(:parsed_body) { JSON.load(body) }
|
||||||
|
|
||||||
describe "fetching a public repository by slug" do
|
describe "fetching a public repository by slug" do
|
||||||
|
@ -41,10 +43,10 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"active" => true,
|
"active" => true,
|
||||||
"private" => false,
|
"private" => false,
|
||||||
"owner" => {
|
"owner" => {
|
||||||
"@type" => "user",
|
|
||||||
"@href" => "/v3/user/#{repo.owner_id}",
|
|
||||||
"id" => repo.owner_id,
|
"id" => repo.owner_id,
|
||||||
"login" => "svenfuchs" },
|
"login" => "svenfuchs",
|
||||||
|
"@type" => "user",
|
||||||
|
"@href" => "/v3/user/#{repo.owner_id}"},
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build_id}",
|
"@href" => "/v3/build/#{repo.last_build_id}",
|
||||||
|
@ -61,16 +63,37 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.last_build.id,
|
"id" => repo.default_branch.last_build.id,
|
||||||
"number" => "3",
|
"number" => "3",
|
||||||
"state" => "configured",
|
"state" => "configured",
|
||||||
"duration" => nil,
|
"duration" => nil,
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}
|
"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}]
|
||||||
|
}}
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -114,7 +137,7 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
describe "private repository, private API, authenticated as user with access" do
|
describe "private repository, private API, authenticated as user with access" do
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
before { Permission.create(repository: repo, user: repo.owner, pull: true) }
|
before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) }
|
||||||
before { repo.update_attribute(:private, true) }
|
before { repo.update_attribute(:private, true) }
|
||||||
before { get("/v3/repo/#{repo.id}", {}, headers) }
|
before { get("/v3/repo/#{repo.id}", {}, headers) }
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
|
@ -136,10 +159,10 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"active" => true,
|
"active" => true,
|
||||||
"private" => true,
|
"private" => true,
|
||||||
"owner" => {
|
"owner" => {
|
||||||
"@type" => "user",
|
|
||||||
"@href" => "/v3/user/#{repo.owner_id}",
|
|
||||||
"id" => repo.owner_id,
|
"id" => repo.owner_id,
|
||||||
"login" => "svenfuchs" },
|
"login" => "svenfuchs",
|
||||||
|
"@type" => "user",
|
||||||
|
"@href" => "/v3/user/#{repo.owner_id}"},
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build_id}",
|
"@href" => "/v3/build/#{repo.last_build_id}",
|
||||||
|
@ -156,16 +179,37 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.last_build.id,
|
"id" => repo.default_branch.last_build.id,
|
||||||
"number" => "3",
|
"number" => "3",
|
||||||
"state" => "configured",
|
"state" => "configured",
|
||||||
"duration" => nil,
|
"duration" => nil,
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}
|
"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}]
|
||||||
|
}}
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -216,10 +260,10 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"active" => true,
|
"active" => true,
|
||||||
"private" => true,
|
"private" => true,
|
||||||
"owner" => {
|
"owner" => {
|
||||||
"@type" => "user",
|
|
||||||
"@href" => "/v3/user/#{repo.owner_id}",
|
|
||||||
"id" => repo.owner_id,
|
"id" => repo.owner_id,
|
||||||
"login" => "svenfuchs" },
|
"login" => "svenfuchs",
|
||||||
|
"@type" => "user",
|
||||||
|
"@href" => "/v3/user/#{repo.owner_id}"},
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build_id}",
|
"@href" => "/v3/build/#{repo.last_build_id}",
|
||||||
|
@ -236,16 +280,37 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.last_build.id,
|
"id" => repo.default_branch.last_build.id,
|
||||||
"number" => "3",
|
"number" => "3",
|
||||||
"state" => "configured",
|
"state" => "configured",
|
||||||
"duration" => nil,
|
"duration" => nil,
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}
|
"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}]
|
||||||
|
}}
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -302,10 +367,10 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"active" => true,
|
"active" => true,
|
||||||
"private" => true,
|
"private" => true,
|
||||||
"owner" => {
|
"owner" => {
|
||||||
"@type" => "user",
|
|
||||||
"@href" => "/v3/user/#{repo.owner_id}",
|
|
||||||
"id" => repo.owner_id,
|
"id" => repo.owner_id,
|
||||||
"login" => "svenfuchs" },
|
"login" => "svenfuchs",
|
||||||
|
"@type" => "user",
|
||||||
|
"@href" => "/v3/user/#{repo.owner_id}"},
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build_id}",
|
"@href" => "/v3/build/#{repo.last_build_id}",
|
||||||
|
@ -322,16 +387,37 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"name" => "master",
|
"name" => "master",
|
||||||
"last_build" => {
|
"last_build" => {
|
||||||
"@type" => "build",
|
"@type" => "build",
|
||||||
"@href" => "/v3/build/#{repo.last_build.id}",
|
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"id" => repo.last_build.id,
|
"id" => repo.default_branch.last_build.id,
|
||||||
"number" => "3",
|
"number" => "3",
|
||||||
"state" => "configured",
|
"state" => "configured",
|
||||||
"duration" => nil,
|
"duration" => nil,
|
||||||
"event_type" => "push",
|
"event_type" => "push",
|
||||||
"previous_state" => "passed",
|
"previous_state" => "passed",
|
||||||
"started_at" => "2010-11-12T13:00:00Z",
|
"started_at" => "2010-11-12T13:00:00Z",
|
||||||
"finished_at" => nil}}
|
"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}]
|
||||||
|
}}
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::User::Current do
|
describe Travis::API::V3::Services::User::Current do
|
||||||
let(:user) { User.find_by_login('svenfuchs') }
|
let(:user) { Travis::API::V3::Models::User.find_by_login('svenfuchs') }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Travis::API::V3::Services::User::Find do
|
describe Travis::API::V3::Services::User::Find do
|
||||||
let(:user) { User.find_by_login('svenfuchs') }
|
let(:user) { Travis::API::V3::Models::User.find_by_login('svenfuchs') }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user