Merge pull request #202 from travis-ci/rkh-active-broadcasts

better broadcasts, cleaner payloads
This commit is contained in:
Konstantin Haase 2015-10-14 14:13:13 +02:00
commit 03c982a45a
18 changed files with 149 additions and 603 deletions

View File

@ -4,5 +4,9 @@ module Travis::API::V3
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
has_many :builds, foreign_key: [:repository_id, :branch], primary_key: [:repository_id, :name], order: 'builds.id DESC'.freeze, conditions: { event_type: 'push' } has_many :builds, foreign_key: [:repository_id, :branch], primary_key: [:repository_id, :name], order: 'builds.id DESC'.freeze, conditions: { event_type: 'push' }
has_many :commits, foreign_key: [:repository_id, :branch], primary_key: [:repository_id, :name], order: 'commits.id DESC'.freeze has_many :commits, foreign_key: [:repository_id, :branch], primary_key: [:repository_id, :name], order: 'commits.id DESC'.freeze
def default_branch
name == repository.default_branch_name
end
end end
end end

View File

@ -1,5 +1,14 @@
module Travis::API::V3 module Travis::API::V3
class Models::Broadcast < Model class Models::Broadcast < Model
EXPIRY_TIME = 14.days
belongs_to :recipient, polymorphic: true belongs_to :recipient, polymorphic: true
scope :active, -> { where('created_at >= ? AND (expired IS NULL OR expired <> ?)', EXPIRY_TIME.ago, true) }
scope :inactive, -> { where('created_at < ? OR (expired = ?)', EXPIRY_TIME.ago, true) }
def active?
return false if expired?
created_at >= EXPIRY_TIME.ago
end
end end
end end

View File

@ -1,13 +1,35 @@
module Travis::API::V3 module Travis::API::V3
class Queries::Broadcasts < Query class Queries::Broadcasts < Query
params :active, prefix: :broadcast
def initialize(*)
super
self.active = "true".freeze if active.nil?
end
def for_user(user) def for_user(user)
query = %( all.where(<<-SQL, 'Organization'.freeze, user.organization_ids, 'User'.freeze, user.id, 'Repository'.freeze, user.repository_ids)
recipient_type IS NULL OR recipient_type IS NULL OR
recipient_type = ? AND recipient_id IN(?) OR recipient_type = ? AND recipient_id IN(?) OR
recipient_type = ? AND recipient_id = ? OR recipient_type = ? AND recipient_id = ? OR
recipient_type = ? AND recipient_id IN (?) recipient_type = ? AND recipient_id IN (?)
) SQL
Models::Broadcast.where(query, 'Organization', user.organization_ids, 'User', user.id, 'Repository', user.repository_ids) end
def all
@all ||= filter(Models::Broadcast)
end
def filter(list)
active = list(self.active).map { |e| bool(e) }
if active.include? true
list = list.active unless active.include? false
else
list = list.inactive
end
list
end end
end end
end end

View File

@ -2,7 +2,7 @@ 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)
representation(:standard, :name, :repository, :last_build, :exists_on_github) representation(:standard, :name, :repository, :default_branch, :exists_on_github, :last_build)
end end
end end

View File

@ -2,7 +2,11 @@ require 'travis/api/v3/renderer/model_renderer'
module Travis::API::V3 module Travis::API::V3
class Renderer::Broadcast < Renderer::ModelRenderer class Renderer::Broadcast < Renderer::ModelRenderer
representation(:minimal, :id, :recipient_id, :message, :created_at, :category) representation(:minimal, :id, :message, :created_at, :category, :active)
representation(:standard, :id, :recipient_id, :recipient_type, :category, :kind, :message, :expired, :created_at, :updated_at) representation(:standard, :id, *representations[:minimal], :recipient)
def active
model.active?
end
end end
end end

View File

@ -2,8 +2,8 @@ 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, :jobs) representation(:minimal, :id, :number, :state, :duration, :event_type, :previous_state, :started_at, :finished_at)
representation(:standard, *representations[:minimal], :repository, :branch, :commit) representation(:standard, *representations[:minimal], :repository, :branch, :commit, :jobs)
def jobs def jobs
return model.jobs if include_full_jobs? return model.jobs if include_full_jobs?

View File

@ -2,13 +2,29 @@ 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, :default_branch) representation(:minimal, :id, :name, :slug)
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, :default_branch)
def active def active
!!model.active !!model.active
end end
def default_branch
return model.default_branch if include_default_branch?
{
:@type => 'branch'.freeze,
:@href => Renderer.href(:branch, name: model.default_branch_name, repository_id: id, script_name: script_name),
:@representation => 'minimal'.freeze,
:name => model.default_branch_name
}
end
def include_default_branch?
return true if include? 'repository.default_branch'.freeze
return true if include.any? { |i| i.start_with? 'branch'.freeze }
return true if included.any? { |i| i.is_a? Models::Branch and i.respository_id == id and i.name == i.default_branch_name }
end
def owner def owner
return model.owner if include_owner? return model.owner if include_owner?
owner_href = Renderer.href(owner_type.to_sym, id: model.owner_id, script_name: script_name) owner_href = Renderer.href(owner_type.to_sym, id: model.owner_id, script_name: script_name)
@ -35,26 +51,5 @@ module Travis::API::V3
def owner_type def owner_type
@owner_type ||= model.owner_type.downcase if model.owner_type @owner_type ||= model.owner_type.downcase if model.owner_type
end end
def last_build
return nil unless model.last_build_id
return model.last_build if include_last_build?
{
:@type => 'build'.freeze,
:@href => Renderer.href(:build, script_name: script_name, id: model.last_build_id),
:id => model.last_build_id,
:number => model.last_build_number,
:state => model.last_build_state.to_s,
:duration => model.last_build_duration,
:started_at => model.last_build_started_at,
:finished_at => model.last_build_finished_at,
}
end
def include_last_build?
return true if include? 'repository.last_build'.freeze
return true if include.any? { |i| i.start_with? 'build.'.freeze }
return true if included.any? { |i| i.is_a? Models::Build and i.id == model.last_build_id }
end
end end
end end

View File

@ -1,5 +1,7 @@
module Travis::API::V3 module Travis::API::V3
class Services::Broadcasts::ForCurrentUser < Service class Services::Broadcasts::ForCurrentUser < Service
params :active, prefix: :broadcast
def run! def run!
raise LoginRequired unless access_control.logged_in? raise LoginRequired unless access_control.logged_in?
query.for_user(access_control.user) query.for_user(access_control.user)

View File

@ -14,44 +14,26 @@ describe Travis::API::V3::Services::Repository::Find do
"@href" => "/v3/repo/#{repo.id}/branch/master", "@href" => "/v3/repo/#{repo.id}/branch/master",
"@representation" => "standard", "@representation" => "standard",
"name" => "master", "name" => "master",
"default_branch" => true,
"exists_on_github" => true,
"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", "name" => "minimal",
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@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/#{build.id}",
"@representation"=> "minimal", "@representation"=> "minimal",
"id" => repo.default_branch.last_build.id, "id" => build.id,
"number" => "3", "number" => build.number,
"state" => "configured", "state" => build.state,
"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}]},
"exists_on_github"=> true
}}
end end
end end

View File

@ -48,17 +48,18 @@ describe Travis::API::V3::Services::Branches::Find do
"limit" => 1 }}, "limit" => 1 }},
"branches" => [{ "branches" => [{
"@type" => "branch", "@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/#{branch.name}", "@href" => "/v3/repo/#{repo.id}/branch/master",
"@representation" => "standard", "@representation" => "standard",
"name" => branch.name, "name" => "master",
"default_branch" => true,
"exists_on_github" => true,
"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", "name" => "minimal",
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@href" =>"/v3/repo/#{repo.id}/branch/master"}},
"last_build" => { "last_build" => {
"@type" => "build", "@type" => "build",
"@href" => "/v3/build/#{build.id}", "@href" => "/v3/build/#{build.id}",
@ -70,28 +71,7 @@ describe Travis::API::V3::Services::Branches::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 }]},
"exists_on_github" => true }]}
} }
end end
@ -125,17 +105,18 @@ describe Travis::API::V3::Services::Branches::Find do
"limit" => 1 }}, "limit" => 1 }},
"branches" => [{ "branches" => [{
"@type" => "branch", "@type" => "branch",
"@href" => "/v3/repo/#{repo.id}/branch/#{branch.name}", "@href" => "/v3/repo/#{repo.id}/branch/master",
"@representation" => "standard", "@representation" => "standard",
"name" => branch.name, "name" => "master",
"default_branch" => true,
"exists_on_github" => true,
"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", "name" => "minimal",
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@href" =>"/v3/repo/#{repo.id}/branch/master"}},
"last_build" => { "last_build" => {
"@type" => "build", "@type" => "build",
"@href" => "/v3/build/#{build.id}", "@href" => "/v3/build/#{build.id}",
@ -147,28 +128,7 @@ describe Travis::API::V3::Services::Branches::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 }]},
"exists_on_github" => true }]}
} }
end end

View File

@ -2,8 +2,6 @@ require 'spec_helper'
describe Travis::API::V3::Services::Broadcasts::ForCurrentUser do describe Travis::API::V3::Services::Broadcasts::ForCurrentUser 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(:user) { Travis::API::V3::Models::User.where(login: 'svenfuchs') }
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}" }}
@ -23,61 +21,37 @@ describe Travis::API::V3::Services::Broadcasts::ForCurrentUser do
let(:broadcasts){ Travis::API::V3::Models::Broadcast.where(recipient_id: [repo.id, org.id, repo.owner_id, nil]) } 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 describe "only active broadcasts" do
before { get("/v3/broadcasts", {}, headers) } before { get("/v3/broadcasts", {}, 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" => "broadcasts", "@type" => "broadcasts",
"@href" => "/v3/broadcasts", "@href" => "/v3/broadcasts",
"@representation" => "standard", "@representation" => "standard",
"broadcasts" => [{ "broadcasts" => []
}}
end
describe "only inactive broadcasts" do
let(:broadcast) { broadcasts.first }
before { get("/v3/broadcasts?broadcast.active=false", {}, headers) }
example { expect(last_response).to be_ok }
example { expect(JSON.load(body)["broadcasts"].first).to be == {
"@type" => "broadcast", "@type" => "broadcast",
"@representation" => "standard", "@representation" => "standard",
"id" => broadcasts[0].id, "id" => broadcast.id,
"recipient_id" => broadcasts[0].recipient_id, "message" => broadcast.message,
"recipient_type" => broadcasts[0].recipient_type,
"category" => broadcasts[0].category,
"kind" => nil,
"message" => broadcasts[0].message,
"expired" => nil,
"created_at" => "2010-11-12T13:00:00Z", "created_at" => "2010-11-12T13:00:00Z",
"updated_at" => "2010-11-12T13:00:00Z" }, "category" => nil,
{ "active" => false,
"@type" => "broadcast", "recipient" => {
"@representation"=> "standard", "@type" => "repository",
"id" => broadcasts[1].id, "@href" => "/v3/repo/#{repo.id}",
"recipient_id" => broadcasts[1].recipient_id, "@representation"=> "minimal",
"recipient_type" => broadcasts[1].recipient_type, "id" => repo.id,
"category" => broadcasts[1].category, "name" => repo.name,
"kind" => nil, "slug" => repo.slug,
"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,
"category" => broadcasts[2].category,
"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,
"category" => broadcasts[3].category,
"kind" => nil,
"message" => broadcasts[3].message,
"expired" => nil,
"created_at" => "2010-11-12T13:00:00Z",
"updated_at" => "2010-11-12T13:00:00Z"}]
}} }}
end end
end end

View File

@ -67,21 +67,13 @@ 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", "name" => repo.name,
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@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",
"@representation"=> "minimal", "@representation"=> "minimal",
"name" => "master", "name" => "master"},
"last_build" => {
"@href" => "/v3/build/#{build.id}" }},
"commit" => { "commit" => {
"@type" => "commit", "@type" => "commit",
"@representation"=> "minimal", "@representation"=> "minimal",
@ -140,21 +132,13 @@ 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", "name" => "minimal",
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@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",
"@representation"=> "minimal", "@representation"=> "minimal",
"name" => "master", "name" => "master"},
"last_build" => {
"@href" => "/v3/build/#{build.id}" }},
"commit" => { "commit" => {
"@type" => "commit", "@type" => "commit",
"@representation"=> "minimal", "@representation"=> "minimal",

View File

@ -90,21 +90,13 @@ 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", "name" => "minimal",
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@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",
"@representation"=> "minimal", "@representation"=> "minimal",
"name" => "master", "name" => "master"},
"last_build" => {
"@href" => "/v3/build/#{build.id}" }},
"commit" => { "commit" => {
"@type" => "commit", "@type" => "commit",
"@representation"=> "minimal", "@representation"=> "minimal",
@ -191,21 +183,13 @@ 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", "name" => "minimal",
"default_branch" => { "slug" => "svenfuchs/minimal"},
"@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",
"@representation"=> "minimal", "@representation"=> "minimal",
"name" => "master", "name" => "master"},
"last_build" => {
"@href" => "/v3/build/#{build.id}" }},
"commit" => { "commit" => {
"@type" => "commit", "@type" => "commit",
"@representation"=> "minimal", "@representation"=> "minimal",

View File

@ -40,69 +40,15 @@ describe Travis::API::V3::Services::Job::Find do
"event_type" => build.event_type, "event_type" => build.event_type,
"previous_state" => build.previous_state, "previous_state" => build.previous_state,
"started_at" => "2010-11-12T12:00:00Z", "started_at" => "2010-11-12T12:00:00Z",
"finished_at" => "2010-11-12T12:00:10Z", "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, "queue" => job.queue,
"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" => repo.slug, "name" => repo.name,
"default_branch" => { "slug" => repo.slug},
"@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",
@ -164,69 +110,15 @@ describe Travis::API::V3::Services::Job::Find do
"event_type" => build.event_type, "event_type" => build.event_type,
"previous_state" => build.previous_state, "previous_state" => build.previous_state,
"started_at" => "2010-11-12T12:00:00Z", "started_at" => "2010-11-12T12:00:00Z",
"finished_at" => "2010-11-12T12:00:10Z", "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, "queue" => job.queue,
"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" => repo.slug, "name" => repo.name,
"default_branch" => { "slug" => repo.slug},
"@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",

View File

@ -56,14 +56,12 @@ describe Travis::API::V3::Services::Owner::Find do
"github_language" => nil, "github_language" => nil,
"active" => false, "active" => false,
"private" => false, "private" => false,
"last_build" => nil,
"owner" => { "@href"=> "/v3/org/#{org.id}" }, "owner" => { "@href"=> "/v3/org/#{org.id}" },
"default_branch" => { "default_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" => nil }
}] }]
}} }}
end end
@ -102,14 +100,12 @@ describe Travis::API::V3::Services::Owner::Find do
"github_language" => nil, "github_language" => nil,
"active" => false, "active" => false,
"private" => false, "private" => false,
"last_build" => nil,
"owner" => { "@href"=> "/v3/org/#{org.id}" }, "owner" => { "@href"=> "/v3/org/#{org.id}" },
"default_branch" => { "default_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" => nil }
}] }]
}} }}
end end

View File

@ -39,55 +39,11 @@ describe Travis::API::V3::Services::Owner::Repositories do
"id" => repo.owner_id, "id" => repo.owner_id,
"login" => "svenfuchs", "login" => "svenfuchs",
"@href" => "/v3/user/#{repo.owner_id}" }, "@href" => "/v3/user/#{repo.owner_id}" },
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build.id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
"duration" => nil,
"started_at" => "2010-11-12T12:30:00Z",
"finished_at" => "2010-11-12T12:30:20Z"},
"default_branch" => { "default_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" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"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,
"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
describe "filter: private=false" do describe "filter: private=false" do

View File

@ -39,53 +39,11 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
"@href" => "/v3/user/#{repo.owner_id}", "@href" => "/v3/user/#{repo.owner_id}",
"id" => repo.owner_id, "id" => repo.owner_id,
"login" => "svenfuchs" }, "login" => "svenfuchs" },
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
"duration" => nil,
"started_at" => "2010-11-12T12:30:00Z",
"finished_at" => "2010-11-12T12:30:20Z"},
"default_branch" => { "default_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" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"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,
"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

@ -47,53 +47,11 @@ describe Travis::API::V3::Services::Repository::Find do
"login" => "svenfuchs", "login" => "svenfuchs",
"@type" => "user", "@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"}, "@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
"duration" => nil,
"started_at" => "2010-11-12T12:30:00Z",
"finished_at" => "2010-11-12T12:30:20Z"},
"default_branch" => { "default_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" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"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,
"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
@ -163,53 +121,11 @@ describe Travis::API::V3::Services::Repository::Find do
"login" => "svenfuchs", "login" => "svenfuchs",
"@type" => "user", "@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"}, "@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
"duration" => nil,
"started_at" => "2010-11-12T12:30:00Z",
"finished_at" => "2010-11-12T12:30:20Z"},
"default_branch" => { "default_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" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"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,
"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
@ -264,53 +180,11 @@ describe Travis::API::V3::Services::Repository::Find do
"login" => "svenfuchs", "login" => "svenfuchs",
"@type" => "user", "@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"}, "@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
"duration" => nil,
"started_at" => "2010-11-12T12:30:00Z",
"finished_at" => "2010-11-12T12:30:20Z"},
"default_branch" => { "default_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" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"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,
"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
@ -371,53 +245,11 @@ describe Travis::API::V3::Services::Repository::Find do
"login" => "svenfuchs", "login" => "svenfuchs",
"@type" => "user", "@type" => "user",
"@href" => "/v3/user/#{repo.owner_id}"}, "@href" => "/v3/user/#{repo.owner_id}"},
"last_build" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.last_build_id}",
"id" => repo.last_build_id,
"number" => "2",
"state" => "passed",
"duration" => nil,
"started_at" => "2010-11-12T12:30:00Z",
"finished_at" => "2010-11-12T12:30:20Z"},
"default_branch" => { "default_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" => {
"@type" => "build",
"@href" => "/v3/build/#{repo.default_branch.last_build.id}",
"@representation"=> "minimal",
"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,
"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
@ -431,11 +263,9 @@ describe Travis::API::V3::Services::Repository::Find do
)} )}
end end
describe "including full owner and full last build" do describe "including full owner" do
before { get("/v3/repo/#{repo.id}?include=repository.owner,repository.last_build") } before { get("/v3/repo/#{repo.id}?include=repository.owner") }
example { expect(last_response).to be_ok } example { expect(last_response).to be_ok }
example { expect(parsed_body['last_build']['state']).to be == 'passed' }
example { expect(parsed_body['last_build']['repository']).to be == { "@href" => "/v3/repo/#{repo.id}" } }
example { expect(parsed_body['owner']).to include("github_id", "is_syncing", "synced_at")} example { expect(parsed_body['owner']).to include("github_id", "is_syncing", "synced_at")}
end end
@ -458,10 +288,4 @@ describe Travis::API::V3::Services::Repository::Find do
"error_message" => "illegal format for include parameter" "error_message" => "illegal format for include parameter"
}} }}
end end
describe "including nested objects" do
before { get("/v3/repo/#{repo.id}?include=repository.last_build,build.branch") }
example { expect(last_response).to be_ok }
example { expect(parsed_body).to include("last_build") }
end
end end