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:
carlad 2015-09-02 16:50:44 +02:00
commit f57f62ba75
25 changed files with 633 additions and 75 deletions

View File

@ -55,6 +55,10 @@ module Travis::API::V3
visible? branch.repository
end
def job_visible?(job)
visible? job.repository
end
def organization_visible?(organization)
full_access? or public_api?
end

View File

@ -5,7 +5,11 @@ module Travis::API::V3
belongs_to :request
belongs_to :repository, autosave: 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,
foreign_key: [:repository_id, :name],

View File

@ -1,5 +1,8 @@
module Travis::API::V3
class Models::Job < Model
self.inheritance_column = :_type_disabled
has_one :log, dependent: :destroy
belongs_to :repository
belongs_to :commit

View 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

View File

@ -48,6 +48,7 @@ module Travis::API::V3
when Time then value.strftime('%Y-%m-%dT%H:%M:%SZ')
when Model then render_model(value, **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]
end
end

View File

@ -2,7 +2,7 @@ require 'travis/api/v3/renderer/model_renderer'
module Travis::API::V3
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 )
end
end

View 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

View File

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

View File

@ -50,6 +50,12 @@ module Travis::API::V3
get :find
end
resource :job do
capture id: :digit
route '/job/{job.id}'
get :find
end
resource :user do
capture id: :digit
route '/user'

View File

@ -6,6 +6,7 @@ module Travis::API::V3
Branch = Module.new { extend Services }
Build = Module.new { extend Services }
Builds = Module.new { extend Services }
Job = Module.new { extend Services }
Organization = Module.new { extend Services }
Organizations = Module.new { extend Services }
Owner = Module.new { extend Services }

View File

@ -0,0 +1,7 @@
module Travis::API::V3
class Services::Job::Find < Service
def run!
find
end
end
end

View File

@ -1,15 +1,15 @@
require 'spec_helper'
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(: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) }
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.memberships.create(user: repo.owner) }
after { org.delete }

View File

@ -2,6 +2,8 @@ require 'spec_helper'
describe Travis::API::V3::Services::Repository::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 }
before { repo.default_branch.save! }
describe "public repository, existing branch" do
@ -29,6 +31,24 @@ describe Travis::API::V3::Services::Repository::Find do
"event_type" => "push",
"previous_state" => "passed",
"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

View 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

View File

@ -3,6 +3,7 @@ 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(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
let(:parsed_body) { JSON.load(body) }
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",
"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}",
@ -80,14 +102,15 @@ describe Travis::API::V3::Services::Builds::Find do
"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"}}],
"committed_at" => "2010-11-12T12:55:00Z"},
}]
}}
end
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(: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 { get("/v3/repo/#{repo.id}/builds?limit=1", {}, headers) }
after { repo.update_attribute(:private, false) }
@ -127,6 +150,27 @@ describe Travis::API::V3::Services::Builds::Find do
"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}],
"repository" => {
"@type" => "repository",
"@href" => "/v3/repo/#{repo.id}",
@ -148,7 +192,8 @@ describe Travis::API::V3::Services::Builds::Find do
"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"}}]
"committed_at" => "2010-11-12T12:55:00Z"}
}]
}}
end

View 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

View File

@ -1,7 +1,7 @@
require 'spec_helper'
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! }
after { org.delete }

View File

@ -1,15 +1,15 @@
require 'spec_helper'
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(: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) }
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.memberships.create(user: repo.owner) }
after { org.delete }

View File

@ -2,7 +2,7 @@ require 'spec_helper'
describe Travis::API::V3::Services::Owner::Find 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! }
after { org.delete }
@ -23,7 +23,7 @@ describe Travis::API::V3::Services::Owner::Find do
end
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! }
after { repo.destroy }
@ -69,7 +69,7 @@ describe Travis::API::V3::Services::Owner::Find do
end
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! }
after { repo.destroy }
@ -131,7 +131,7 @@ describe Travis::API::V3::Services::Owner::Find do
end
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! }
after { other.delete }
@ -157,7 +157,7 @@ describe Travis::API::V3::Services::Owner::Find do
end
describe "user" do
let(:user) { User.new(login: 'example-user') }
let(:user) { Travis::API::V3::Models::User.new(login: 'example-user') }
before { user.save! }
after { user.delete }
@ -198,7 +198,7 @@ describe Travis::API::V3::Services::Owner::Find do
end
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! }
after { other.delete }

View File

@ -1,11 +1,13 @@
require 'spec_helper'
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(: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) }
after { repo.update_attribute(:private, false) }
@ -34,12 +36,12 @@ describe Travis::API::V3::Services::Owner::Repositories do
"private" => true,
"owner" => {
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}",
"id" => repo.owner_id,
"login" => "svenfuchs" },
"login" => "svenfuchs",
"@href" => "/v3/user/#{repo.owner_id}" },
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
"@href" => "/v3/build/#{repo.last_build.id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
@ -53,16 +55,38 @@ describe Travis::API::V3::Services::Owner::Repositories do
"name" => "master",
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"id" => repo.last_build.id,
"id" => repo.default_branch.last_build.id,
"number" => "3",
"state" => "configured",
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"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

View File

@ -1,11 +1,13 @@
require 'spec_helper'
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(: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) }
after { repo.update_attribute(:private, false) }
@ -53,16 +55,37 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
"name" => "master",
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"id" => repo.last_build.id,
"id" => repo.default_branch.last_build.id,
"number" => "3",
"state" => "configured",
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"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

View File

@ -1,7 +1,9 @@
require 'spec_helper'
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) }
describe "fetching a public repository by slug" do
@ -41,10 +43,10 @@ describe Travis::API::V3::Services::Repository::Find do
"active" => true,
"private" => false,
"owner" => {
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}",
"id" => repo.owner_id,
"login" => "svenfuchs" },
"login" => "svenfuchs",
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
@ -61,16 +63,37 @@ describe Travis::API::V3::Services::Repository::Find do
"name" => "master",
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"id" => repo.last_build.id,
"id" => repo.default_branch.last_build.id,
"number" => "3",
"state" => "configured",
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"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
@ -114,7 +137,7 @@ describe Travis::API::V3::Services::Repository::Find 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(: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 { get("/v3/repo/#{repo.id}", {}, headers) }
after { repo.update_attribute(:private, false) }
@ -136,10 +159,10 @@ describe Travis::API::V3::Services::Repository::Find do
"active" => true,
"private" => true,
"owner" => {
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}",
"id" => repo.owner_id,
"login" => "svenfuchs" },
"login" => "svenfuchs",
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
@ -156,16 +179,37 @@ describe Travis::API::V3::Services::Repository::Find do
"name" => "master",
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"id" => repo.last_build.id,
"id" => repo.default_branch.last_build.id,
"number" => "3",
"state" => "configured",
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"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
@ -216,10 +260,10 @@ describe Travis::API::V3::Services::Repository::Find do
"active" => true,
"private" => true,
"owner" => {
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}",
"id" => repo.owner_id,
"login" => "svenfuchs" },
"login" => "svenfuchs",
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
@ -236,16 +280,37 @@ describe Travis::API::V3::Services::Repository::Find do
"name" => "master",
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"id" => repo.last_build.id,
"id" => repo.default_branch.last_build.id,
"number" => "3",
"state" => "configured",
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"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
@ -302,10 +367,10 @@ describe Travis::API::V3::Services::Repository::Find do
"active" => true,
"private" => true,
"owner" => {
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}",
"id" => repo.owner_id,
"login" => "svenfuchs" },
"login" => "svenfuchs",
"@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
@ -322,16 +387,37 @@ describe Travis::API::V3::Services::Repository::Find do
"name" => "master",
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"id" => repo.last_build.id,
"id" => repo.default_branch.last_build.id,
"number" => "3",
"state" => "configured",
"duration" => nil,
"event_type" => "push",
"previous_state" => "passed",
"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

View File

@ -1,7 +1,7 @@
require 'spec_helper'
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(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}

View File

@ -1,7 +1,7 @@
require 'spec_helper'
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(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}