From 98bcc9e530749c36dfcf109e3f0459261ee943ec Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 26 Aug 2015 12:44:15 +0200 Subject: [PATCH 01/13] add :jobs to build payload --- lib/travis/api/v3/renderer/build.rb | 2 +- lib/travis/api/v3/renderer/job.rb | 10 ++++++++++ lib/travis/api/v3/renderer/jobs.rb | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 lib/travis/api/v3/renderer/job.rb create mode 100644 lib/travis/api/v3/renderer/jobs.rb diff --git a/lib/travis/api/v3/renderer/build.rb b/lib/travis/api/v3/renderer/build.rb index 0151e65f..21114e07 100644 --- a/lib/travis/api/v3/renderer/build.rb +++ b/lib/travis/api/v3/renderer/build.rb @@ -3,6 +3,6 @@ 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(:standard, *representations[:minimal], :repository, :branch, :commit) + representation(:standard, *representations[:minimal], :repository, :branch, :commit, :jobs) end end diff --git a/lib/travis/api/v3/renderer/job.rb b/lib/travis/api/v3/renderer/job.rb new file mode 100644 index 00000000..464961fb --- /dev/null +++ b/lib/travis/api/v3/renderer/job.rb @@ -0,0 +1,10 @@ +require 'travis/api/v3/renderer/model_renderer' + +module Travis::API::V3 + class Renderer::Job < Renderer::ModelRenderer + # # representation(:minimal, :id, :number, :state, :queue, :type, :started_at, :finished_at) + # representation(:minimal, :id) + # # representation(:standard, *representations[:minimal], :repository_id, :commit_id, :source_type, source_id) + # representation(:standard, *representations[:minimal]) + end +end diff --git a/lib/travis/api/v3/renderer/jobs.rb b/lib/travis/api/v3/renderer/jobs.rb new file mode 100644 index 00000000..14ede7c8 --- /dev/null +++ b/lib/travis/api/v3/renderer/jobs.rb @@ -0,0 +1,6 @@ +module Travis::API::V3 + class Renderer::Jobs < Renderer::CollectionRenderer + type :jobs + collection_key :jobs + end +end From 1a3d42da216d948714264fd174cc586594780855 Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 26 Aug 2015 16:33:16 +0200 Subject: [PATCH 02/13] v3 add _type_disabled to ovveride activerecord setting wrong class on job --- lib/travis/api/v3/models/build.rb | 6 +++++- lib/travis/api/v3/models/job.rb | 3 +++ lib/travis/api/v3/renderer.rb | 1 + lib/travis/api/v3/renderer/job.rb | 6 ++---- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/travis/api/v3/models/build.rb b/lib/travis/api/v3/models/build.rb index 219a6913..78f1b697 100644 --- a/lib/travis/api/v3/models/build.rb +++ b/lib/travis/api/v3/models/build.rb @@ -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], diff --git a/lib/travis/api/v3/models/job.rb b/lib/travis/api/v3/models/job.rb index 2db5df10..852f515c 100644 --- a/lib/travis/api/v3/models/job.rb +++ b/lib/travis/api/v3/models/job.rb @@ -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 diff --git a/lib/travis/api/v3/renderer.rb b/lib/travis/api/v3/renderer.rb index efb0434b..2ee8ca15 100644 --- a/lib/travis/api/v3/renderer.rb +++ b/lib/travis/api/v3/renderer.rb @@ -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 diff --git a/lib/travis/api/v3/renderer/job.rb b/lib/travis/api/v3/renderer/job.rb index 464961fb..62981477 100644 --- a/lib/travis/api/v3/renderer/job.rb +++ b/lib/travis/api/v3/renderer/job.rb @@ -2,9 +2,7 @@ require 'travis/api/v3/renderer/model_renderer' module Travis::API::V3 class Renderer::Job < Renderer::ModelRenderer - # # representation(:minimal, :id, :number, :state, :queue, :type, :started_at, :finished_at) - # representation(:minimal, :id) - # # representation(:standard, *representations[:minimal], :repository_id, :commit_id, :source_type, source_id) - # representation(:standard, *representations[:minimal]) + representation(:minimal, :id, :number, :state, :started_at, :finished_at) + representation(:standard, *representations[:minimal], :build, :queue, :repository, :commit, :owner ) end end From 64673eb9711ddd414744eb544c1c960bf2b23ae4 Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 26 Aug 2015 17:41:25 +0200 Subject: [PATCH 03/13] v3 update payloads for builds/find_spec.rb to include jobs --- spec/v3/services/builds/find_spec.rb | 77 ++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 4 deletions(-) diff --git a/spec/v3/services/builds/find_spec.rb b/spec/v3/services/builds/find_spec.rb index c882d78a..f91f5e38 100644 --- a/spec/v3/services/builds/find_spec.rb +++ b/spec/v3/services/builds/find_spec.rb @@ -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 @@ -80,8 +81,42 @@ 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"}, + "jobs" =>[ + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[0].id, + "number"=>"3.1", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}, + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[1].id, + "number"=>"3.2", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}, + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[2].id, + "number"=>"3.3", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}, + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[3].id, + "number"=>"3.4", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}] + }] + }} end describe "builds private repository, private API, authenticated as user with access" do @@ -148,8 +183,42 @@ 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"}, + "jobs" =>[ + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[0].id, + "number"=>"3.1", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}, + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[1].id, + "number"=>"3.2", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}, + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[2].id, + "number"=>"3.3", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}, + { + "@type"=>"job", + "@representation"=>"minimal", + "id"=>jobs[3].id, + "number"=>"3.4", + "state"=>"configured", + "started_at"=>"2010-11-12T13:00:00Z", + "finished_at"=>nil}] + }] + }} end describe "including branch.name params on existing branch" do From 5893241ca508700f48bbcf665da653ca1173447d Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 26 Aug 2015 20:39:38 +0200 Subject: [PATCH 04/13] v3 fix spacing on spec payloads --- spec/v3/services/builds/find_spec.rb | 112 ++++++++++---------- spec/v3/services/owner/repositories_spec.rb | 2 +- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/spec/v3/services/builds/find_spec.rb b/spec/v3/services/builds/find_spec.rb index f91f5e38..dd9573fb 100644 --- a/spec/v3/services/builds/find_spec.rb +++ b/spec/v3/services/builds/find_spec.rb @@ -84,37 +84,37 @@ describe Travis::API::V3::Services::Builds::Find do "committed_at" => "2010-11-12T12:55:00Z"}, "jobs" =>[ { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[0].id, - "number"=>"3.1", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}, + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[0].id, + "number" => jobs[0].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[1].id, - "number"=>"3.2", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}, + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[1].id, + "number" => jobs[1].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[2].id, - "number"=>"3.3", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}, + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[2].id, + "number" => jobs[2].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[3].id, - "number"=>"3.4", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}] + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[3].id, + "number" => jobs[3].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}] }] }} end @@ -186,37 +186,37 @@ describe Travis::API::V3::Services::Builds::Find do "committed_at" => "2010-11-12T12:55:00Z"}, "jobs" =>[ { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[0].id, - "number"=>"3.1", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}, + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[0].id, + "number" => jobs[0].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[1].id, - "number"=>"3.2", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}, + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[1].id, + "number" => jobs[1].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[2].id, - "number"=>"3.3", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}, + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[2].id, + "number" => jobs[2].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, { - "@type"=>"job", - "@representation"=>"minimal", - "id"=>jobs[3].id, - "number"=>"3.4", - "state"=>"configured", - "started_at"=>"2010-11-12T13:00:00Z", - "finished_at"=>nil}] + "@type" => "job", + "@representation"=> "minimal", + "id" => jobs[3].id, + "number" => jobs[3].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}] }] }} end diff --git a/spec/v3/services/owner/repositories_spec.rb b/spec/v3/services/owner/repositories_spec.rb index 450a5abd..7d690c62 100644 --- a/spec/v3/services/owner/repositories_spec.rb +++ b/spec/v3/services/owner/repositories_spec.rb @@ -15,7 +15,7 @@ describe Travis::API::V3::Services::Owner::Repositories do example { expect(JSON.load(body)).to be == { "@type" => "repositories", "@href" => "/v3/owner/svenfuchs/repos", - "@representation" => "standard", + "@representation" => "standard", "repositories" => [{ "@type" => "repository", "@href" => "/v3/repo/#{repo.id}", From 8e6dbf9319700f8767420f139e39fda7254245ac Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 11:00:09 +0200 Subject: [PATCH 05/13] v3 add /job/:id endpoint --- lib/travis/api/v3/access_control/generic.rb | 4 ++++ lib/travis/api/v3/queries/job.rb | 10 ++++++++++ lib/travis/api/v3/routes.rb | 6 ++++++ lib/travis/api/v3/services.rb | 1 + lib/travis/api/v3/services/job/find.rb | 7 +++++++ 5 files changed, 28 insertions(+) create mode 100644 lib/travis/api/v3/queries/job.rb create mode 100644 lib/travis/api/v3/services/job/find.rb diff --git a/lib/travis/api/v3/access_control/generic.rb b/lib/travis/api/v3/access_control/generic.rb index c6bab377..7f006029 100644 --- a/lib/travis/api/v3/access_control/generic.rb +++ b/lib/travis/api/v3/access_control/generic.rb @@ -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 diff --git a/lib/travis/api/v3/queries/job.rb b/lib/travis/api/v3/queries/job.rb new file mode 100644 index 00000000..b25781cb --- /dev/null +++ b/lib/travis/api/v3/queries/job.rb @@ -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 diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index 710621b0..cf0a3731 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -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' diff --git a/lib/travis/api/v3/services.rb b/lib/travis/api/v3/services.rb index 85ecef01..a25984f1 100644 --- a/lib/travis/api/v3/services.rb +++ b/lib/travis/api/v3/services.rb @@ -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 } diff --git a/lib/travis/api/v3/services/job/find.rb b/lib/travis/api/v3/services/job/find.rb new file mode 100644 index 00000000..e8d20316 --- /dev/null +++ b/lib/travis/api/v3/services/job/find.rb @@ -0,0 +1,7 @@ +module Travis::API::V3 + class Services::Job::Find < Service + def run! + find + end + end +end From e80dfadf5c32ef91119c38983a59a6af633165a3 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 12:37:59 +0200 Subject: [PATCH 06/13] add spec for /job/:id endpoint --- spec/v3/services/job/find_spec.rb | 83 +++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 spec/v3/services/job/find_spec.rb diff --git a/spec/v3/services/job/find_spec.rb b/spec/v3/services/job/find_spec.rb new file mode 100644 index 00000000..808c2b2f --- /dev/null +++ b/spec/v3/services/job/find_spec.rb @@ -0,0 +1,83 @@ +require 'spec_helper' + +describe Travis::API::V3::Services::Job::Find do + let(:repo) { Repository.by_slug('svenfuchs/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(: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-12T13:00:00Z", + "finished_at" => job.finished_at, + "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-12T13:00:00Z", + "finished_at" => build.finished_at}, + "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-12T12:55: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 { 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 == { }} + end +end From 8e8e1393916cc27c8aa1680d227e2049d66cff03 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 12:50:56 +0200 Subject: [PATCH 07/13] v3 fix syntax of permission in spec for /job/:id --- spec/v3/services/job/find_spec.rb | 51 ++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/spec/v3/services/job/find_spec.rb b/spec/v3/services/job/find_spec.rb index 808c2b2f..5c98e3cf 100644 --- a/spec/v3/services/job/find_spec.rb +++ b/spec/v3/services/job/find_spec.rb @@ -71,13 +71,56 @@ describe Travis::API::V3::Services::Job::Find do 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 { Permission.create(repository=> repo, user=> repo.owner, pull=> true) } + 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 { 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 == { }} + 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-12T13:00:00Z", + "finished_at" => job.finished_at, + "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-12T13:00:00Z", + "finished_at" => build.finished_at}, + "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-12T12:55:00Z"}, + "owner" => { + "@type" => owner_type.to_s.downcase, + "@href" => "/v3/#{owner_href}/#{owner.id}", + "@representation" => "minimal", + "id" => owner.id, + "login" => owner.login} + }} end end From d99d80ac98c946cab2408fbf834b1c61f490c7dc Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 13:32:51 +0200 Subject: [PATCH 08/13] v3 add :job_ids to build payload, update builds/find_spec --- lib/travis/api/v3/renderer/build.rb | 2 +- spec/v3/services/builds/find_spec.rb | 88 ++++++++++++++++------------ 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/lib/travis/api/v3/renderer/build.rb b/lib/travis/api/v3/renderer/build.rb index 21114e07..fd251fd4 100644 --- a/lib/travis/api/v3/renderer/build.rb +++ b/lib/travis/api/v3/renderer/build.rb @@ -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, :job_ids) representation(:standard, *representations[:minimal], :repository, :branch, :commit, :jobs) end end diff --git a/spec/v3/services/builds/find_spec.rb b/spec/v3/services/builds/find_spec.rb index dd9573fb..9d0a9cea 100644 --- a/spec/v3/services/builds/find_spec.rb +++ b/spec/v3/services/builds/find_spec.rb @@ -60,6 +60,7 @@ describe Travis::API::V3::Services::Builds::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, + "job_ids" => build.cached_matrix_ids, "repository" => { "@type" => "repository", "@href" => "/v3/repo/#{repo.id}", @@ -85,6 +86,7 @@ describe Travis::API::V3::Services::Builds::Find do "jobs" =>[ { "@type" => "job", + "@href" => "/v3/job/#{jobs[0].id}", "@representation"=> "minimal", "id" => jobs[0].id, "number" => jobs[0].number, @@ -93,6 +95,7 @@ describe Travis::API::V3::Services::Builds::Find do "finished_at" => nil}, { "@type" => "job", + "@href" => "/v3/job/#{jobs[1].id}", "@representation"=> "minimal", "id" => jobs[1].id, "number" => jobs[1].number, @@ -101,6 +104,7 @@ describe Travis::API::V3::Services::Builds::Find do "finished_at" => nil}, { "@type" => "job", + "@href" => "/v3/job/#{jobs[2].id}", "@representation"=> "minimal", "id" => jobs[2].id, "number" => jobs[2].number, @@ -109,6 +113,7 @@ describe Travis::API::V3::Services::Builds::Find do "finished_at" => nil}, { "@type" => "job", + "@href" => "/v3/job/#{jobs[3].id}", "@representation"=> "minimal", "id" => jobs[3].id, "number" => jobs[3].number, @@ -127,7 +132,7 @@ describe Travis::API::V3::Services::Builds::Find do before { get("/v3/repo/#{repo.id}/builds?limit=1", {}, headers) } after { repo.update_attribute(:private, false) } example { expect(last_response).to be_ok } - example { expect(parsed_body).to be == { + example { expect(parsed_body).to be == { "@type" => "builds", "@href" => "/v3/repo/#{repo.id}/builds?limit=1", "@representation" => "standard", @@ -140,7 +145,7 @@ describe Travis::API::V3::Services::Builds::Find do "next" => { "@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=1", "offset" => 1, - "limit" => 1 }, + "limit" => 1}, "prev" => nil, "first" => { "@href" => "/v3/repo/#{repo.id}/builds?limit=1", @@ -162,19 +167,20 @@ describe Travis::API::V3::Services::Builds::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, + "job_ids" => build.cached_matrix_ids, "repository" => { "@type" => "repository", "@href" => "/v3/repo/#{repo.id}", "@representation"=> "minimal", "id" => repo.id, - "slug" => "svenfuchs/minimal"}, + "slug" => "svenfuchs/minimal" }, "branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", "@representation"=> "minimal", "name" => "master", "last_build" => { - "@href" => "/v3/build/#{build.id}"}}, + "@href" => "/v3/build/#{build.id}" }}, "commit" => { "@type" => "commit", "@representation"=> "minimal", @@ -184,41 +190,45 @@ describe Travis::API::V3::Services::Builds::Find do "message" => "unignore Gemfile.lock", "compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop", "committed_at" => "2010-11-12T12:55:00Z"}, - "jobs" =>[ - { - "@type" => "job", - "@representation"=> "minimal", - "id" => jobs[0].id, - "number" => jobs[0].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@representation"=> "minimal", - "id" => jobs[1].id, - "number" => jobs[1].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@representation"=> "minimal", - "id" => jobs[2].id, - "number" => jobs[2].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@representation"=> "minimal", - "id" => jobs[3].id, - "number" => jobs[3].number, - "state" => "configured", - "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, + "number" => jobs[0].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[1].id}", + "@representation"=> "minimal", + "id" => jobs[1].id, + "number" => jobs[1].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[2].id}", + "@representation"=> "minimal", + "id" => jobs[2].id, + "number" => jobs[2].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[3].id}", + "@representation"=> "minimal", + "id" => jobs[3].id, + "number" => jobs[3].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}] + }] + }} end describe "including branch.name params on existing branch" do From 18e5c22fd7a4e7c3fefc1d2b39943f6c9e30dadd Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 13:42:52 +0200 Subject: [PATCH 09/13] v3 add spec for /build/:id endpoint --- spec/v3/services/build/find_spec.rb | 185 ++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 spec/v3/services/build/find_spec.rb diff --git a/spec/v3/services/build/find_spec.rb b/spec/v3/services/build/find_spec.rb new file mode 100644 index 00000000..f31d0526 --- /dev/null +++ b/spec/v3/services/build/find_spec.rb @@ -0,0 +1,185 @@ +require 'spec_helper' + +describe Travis::API::V3::Services::Build::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 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" => "3", + "state" => "configured", + "duration" => nil, + "event_type" => "push", + "previous_state" => "passed", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil, + "job_ids" => build.cached_matrix_ids, + "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"}, + "jobs" =>[ + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[0].id}", + "@representation"=> "minimal", + "id" => jobs[0].id, + "number" => jobs[0].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[1].id}", + "@representation"=> "minimal", + "id" => jobs[1].id, + "number" => jobs[1].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[2].id}", + "@representation"=> "minimal", + "id" => jobs[2].id, + "number" => jobs[2].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[3].id}", + "@representation"=> "minimal", + "id" => jobs[3].id, + "number" => jobs[3].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}] + }} + 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 { 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" => "3", + "state" => "configured", + "duration" => nil, + "event_type" => "push", + "previous_state" => "passed", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil, + "job_ids" => build.cached_matrix_ids, + "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"}, + "jobs" =>[ + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[0].id}", + "@representation"=> "minimal", + "id" => jobs[0].id, + "number" => jobs[0].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[1].id}", + "@representation"=> "minimal", + "id" => jobs[1].id, + "number" => jobs[1].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[2].id}", + "@representation"=> "minimal", + "id" => jobs[2].id, + "number" => jobs[2].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[3].id}", + "@representation"=> "minimal", + "id" => jobs[3].id, + "number" => jobs[3].number, + "state" => "configured", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil}] + }} + end +end From 288d61497793a02a59a2663399ac1a92adb267ca Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 14:22:38 +0200 Subject: [PATCH 10/13] v3 update branch/find_spec to include job_ids --- spec/v3/services/branch/find_spec.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/v3/services/branch/find_spec.rb b/spec/v3/services/branch/find_spec.rb index 277c6874..dd424226 100644 --- a/spec/v3/services/branch/find_spec.rb +++ b/spec/v3/services/branch/find_spec.rb @@ -1,13 +1,13 @@ 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(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first } before { repo.default_branch.save! } describe "public repository, existing branch" do before { get("/v3/repo/#{repo.id}/branch/master") } example { expect(last_response).to be_ok } - example { expect(JSON.load(body)).to be == { + example { expect(JSON.load(body)).to be == { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", "@representation" => "standard", @@ -29,6 +29,8 @@ 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, + "job_ids" => repo.default_branch.last_build.cached_matrix_ids[1...-1].split(",").map(&:to_i) } + }} end end From 210f368de484b2e9f740c2c799ee135840c159b4 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 27 Aug 2015 14:36:11 +0200 Subject: [PATCH 11/13] v3 update all relevant specs with job_ids payload --- spec/v3/services/build/find_spec.rb | 14 +++++++------- spec/v3/services/job/find_spec.rb | 6 ++++-- spec/v3/services/owner/repositories_spec.rb | 13 +++++++------ .../services/repositories/for_current_user_spec.rb | 3 ++- spec/v3/services/repository/find_spec.rb | 12 ++++++++---- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/spec/v3/services/build/find_spec.rb b/spec/v3/services/build/find_spec.rb index f31d0526..422d5546 100644 --- a/spec/v3/services/build/find_spec.rb +++ b/spec/v3/services/build/find_spec.rb @@ -7,12 +7,12 @@ describe Travis::API::V3::Services::Build::Find do let(:parsed_body) { JSON.load(body) } describe "fetching build on a public repository " do - before { get("/v3/build/#{build.id}") } + 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") } + before { get("/v3/build/1231987129387218") } example { expect(last_response).to be_not_found } example { expect(parsed_body).to be == { "@type" => "error", @@ -102,12 +102,12 @@ describe Travis::API::V3::Services::Build::Find do 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}" }} + let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} before { 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 } + 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}", diff --git a/spec/v3/services/job/find_spec.rb b/spec/v3/services/job/find_spec.rb index 5c98e3cf..c388c7b0 100644 --- a/spec/v3/services/job/find_spec.rb +++ b/spec/v3/services/job/find_spec.rb @@ -33,7 +33,8 @@ describe Travis::API::V3::Services::Job::Find do "event_type" => build.event_type, "previous_state" => build.previous_state, "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => build.finished_at}, + "finished_at" => build.finished_at, + "job_ids" => build.cached_matrix_ids}, "queue" => job.queue, "repository" => { "@type" => "repository", @@ -98,7 +99,8 @@ describe Travis::API::V3::Services::Job::Find do "event_type" => build.event_type, "previous_state" => build.previous_state, "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => build.finished_at}, + "finished_at" => build.finished_at, + "job_ids" => build.cached_matrix_ids}, "queue" => job.queue, "repository" => { "@type" => "repository", diff --git a/spec/v3/services/owner/repositories_spec.rb b/spec/v3/services/owner/repositories_spec.rb index 7d690c62..107254f9 100644 --- a/spec/v3/services/owner/repositories_spec.rb +++ b/spec/v3/services/owner/repositories_spec.rb @@ -10,8 +10,8 @@ describe Travis::API::V3::Services::Owner::Repositories do after { repo.update_attribute(:private, false) } describe "private repository, private API, authenticated as user with access" do - before { get("/v3/owner/svenfuchs/repos", {}, headers) } - example { expect(last_response).to be_ok } + before { get("/v3/owner/svenfuchs/repos", {}, headers) } + example { expect(last_response).to be_ok } example { expect(JSON.load(body)).to be == { "@type" => "repositories", "@href" => "/v3/owner/svenfuchs/repos", @@ -25,9 +25,9 @@ describe Travis::API::V3::Services::Owner::Repositories do "enable" => false, "disable" => false, "create_request" => false}, - "id" => repo.id, - "name" => "minimal", - "slug" => "svenfuchs/minimal", + "id" => repo.id, + "name" => "minimal", + "slug" => "svenfuchs/minimal", "description" => nil, "github_language" => nil, "active" => true, @@ -62,7 +62,8 @@ describe Travis::API::V3::Services::Owner::Repositories do "event_type" => "push", "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}}}] + "finished_at" => nil, + "job_ids" => repo.last_build.cached_matrix_ids}}}] }} end diff --git a/spec/v3/services/repositories/for_current_user_spec.rb b/spec/v3/services/repositories/for_current_user_spec.rb index 202e4253..c89fec91 100644 --- a/spec/v3/services/repositories/for_current_user_spec.rb +++ b/spec/v3/services/repositories/for_current_user_spec.rb @@ -62,7 +62,8 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do "event_type" => "push", "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}}}] + "finished_at" => nil, + "job_ids" => repo.last_build.cached_matrix_ids}}}] }} end diff --git a/spec/v3/services/repository/find_spec.rb b/spec/v3/services/repository/find_spec.rb index 5f4998d8..8c48e252 100644 --- a/spec/v3/services/repository/find_spec.rb +++ b/spec/v3/services/repository/find_spec.rb @@ -70,7 +70,8 @@ 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, + "job_ids" => repo.last_build.cached_matrix_ids}} }} end @@ -165,7 +166,8 @@ 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, + "job_ids" => repo.last_build.cached_matrix_ids}} }} end @@ -245,7 +247,8 @@ 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, + "job_ids" => repo.last_build.cached_matrix_ids}} }} end @@ -331,7 +334,8 @@ 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, + "job_ids" => repo.last_build.cached_matrix_ids}} }} end From 211637e24763c934c3a89387e5b73cf514869dfa Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 2 Sep 2015 16:21:41 +0200 Subject: [PATCH 12/13] v3 make specs use v3 models, update representations of build and job, make some indentation pretty --- lib/travis/api/v3/models/build.rb | 6 +- lib/travis/api/v3/renderer/build.rb | 4 +- lib/travis/api/v3/renderer/job.rb | 4 +- spec/v3/extensions/belongs_to_spec.rb | 4 +- .../accounts/for_current_user_spec.rb | 6 +- spec/v3/services/branch/find_spec.rb | 20 ++- spec/v3/services/build/find_spec.rb | 138 +++++++----------- spec/v3/services/builds/find_spec.rb | 122 ++++++---------- spec/v3/services/job/find_spec.rb | 65 +++++++-- spec/v3/services/organization/find_spec.rb | 2 +- .../organizations/for_current_user_spec.rb | 6 +- spec/v3/services/owner/find_spec.rb | 12 +- spec/v3/services/owner/repositories_spec.rb | 39 ++++- .../repositories/for_current_user_spec.rb | 32 +++- spec/v3/services/repository/find_spec.rb | 134 +++++++++++++---- spec/v3/services/user/current_spec.rb | 2 +- spec/v3/services/user/find_spec.rb | 2 +- 17 files changed, 353 insertions(+), 245 deletions(-) diff --git a/lib/travis/api/v3/models/build.rb b/lib/travis/api/v3/models/build.rb index 78f1b697..cecf242d 100644 --- a/lib/travis/api/v3/models/build.rb +++ b/lib/travis/api/v3/models/build.rb @@ -6,9 +6,9 @@ module Travis::API::V3 belongs_to :repository, autosave: true belongs_to :owner, polymorphic: true - has_many :jobs, - as: :source, - order: :id, + has_many :jobs, + as: :source, + order: :id, dependent: :destroy has_one :branch, diff --git a/lib/travis/api/v3/renderer/build.rb b/lib/travis/api/v3/renderer/build.rb index fd251fd4..a57e5136 100644 --- a/lib/travis/api/v3/renderer/build.rb +++ b/lib/travis/api/v3/renderer/build.rb @@ -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, :job_ids) - representation(:standard, *representations[:minimal], :repository, :branch, :commit, :jobs) + representation(:minimal, :id, :number, :state, :duration, :event_type, :previous_state, :started_at, :finished_at, :jobs) + representation(:standard, *representations[:minimal], :repository, :branch, :commit ) end end diff --git a/lib/travis/api/v3/renderer/job.rb b/lib/travis/api/v3/renderer/job.rb index 62981477..bb04fda0 100644 --- a/lib/travis/api/v3/renderer/job.rb +++ b/lib/travis/api/v3/renderer/job.rb @@ -2,7 +2,7 @@ require 'travis/api/v3/renderer/model_renderer' module Travis::API::V3 class Renderer::Job < Renderer::ModelRenderer - representation(:minimal, :id, :number, :state, :started_at, :finished_at) - representation(:standard, *representations[:minimal], :build, :queue, :repository, :commit, :owner ) + representation(:minimal, :id) + representation(:standard, *representations[:minimal], :number, :state, :started_at, :finished_at, :build, :queue, :repository, :commit, :owner ) end end diff --git a/spec/v3/extensions/belongs_to_spec.rb b/spec/v3/extensions/belongs_to_spec.rb index b7a28042..dabac0fd 100644 --- a/spec/v3/extensions/belongs_to_spec.rb +++ b/spec/v3/extensions/belongs_to_spec.rb @@ -12,7 +12,7 @@ describe Travis::API::V3::Extensions::BelongsTo do after { repo.destroy; user.destroy } example { expect(repo.owner).to be_a(Travis::API::V3::Models::User) } - example { expect(::Repository.find(repo.id).owner).to be_a(::User) } + example { expect(Travis::API::V3::Models::Repository.find(repo.id).owner).to be_a(Travis::API::V3::Models::User) } example { expect(user.repositories).to include(repo) } end -end \ No newline at end of file +end diff --git a/spec/v3/services/accounts/for_current_user_spec.rb b/spec/v3/services/accounts/for_current_user_spec.rb index 823e2361..e81a4f59 100644 --- a/spec/v3/services/accounts/for_current_user_spec.rb +++ b/spec/v3/services/accounts/for_current_user_spec.rb @@ -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 } diff --git a/spec/v3/services/branch/find_spec.rb b/spec/v3/services/branch/find_spec.rb index dd424226..5fb56102 100644 --- a/spec/v3/services/branch/find_spec.rb +++ b/spec/v3/services/branch/find_spec.rb @@ -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 @@ -30,7 +32,23 @@ describe Travis::API::V3::Services::Repository::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.default_branch.last_build.cached_matrix_ids[1...-1].split(",").map(&:to_i) } + "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 diff --git a/spec/v3/services/build/find_spec.rb b/spec/v3/services/build/find_spec.rb index 422d5546..05ffd26f 100644 --- a/spec/v3/services/build/find_spec.rb +++ b/spec/v3/services/build/find_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' describe Travis::API::V3::Services::Build::Find do - let(:repo) { Repository.by_slug('svenfuchs/minimal').first } - let(:build) { repo.builds.last } + let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first } + let(:build) { repo.builds.first } let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs } let(:parsed_body) { JSON.load(body) } @@ -30,14 +30,34 @@ describe Travis::API::V3::Services::Build::Find do "@href" => "/v3/build/#{build.id}", "@representation" => "standard", "id" => build.id, - "number" => "3", - "state" => "configured", + "number" => build.number, + "state" => build.state, "duration" => nil, "event_type" => "push", - "previous_state" => "passed", + "previous_state" => build.previous_state, "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => build.cached_matrix_ids, + "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}", @@ -59,68 +79,47 @@ describe Travis::API::V3::Services::Build::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"}, - "jobs" =>[ - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[0].id}", - "@representation"=> "minimal", - "id" => jobs[0].id, - "number" => jobs[0].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[1].id}", - "@representation"=> "minimal", - "id" => jobs[1].id, - "number" => jobs[1].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[2].id}", - "@representation"=> "minimal", - "id" => jobs[2].id, - "number" => jobs[2].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[3].id}", - "@representation"=> "minimal", - "id" => jobs[3].id, - "number" => jobs[3].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}] + "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 { 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/build/#{build.id}", {}, headers) } 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 == { "@type" => "build", "@href" => "/v3/build/#{build.id}", "@representation" => "standard", "id" => build.id, - "number" => "3", - "state" => "configured", + "number" => build.number, + "state" => build.state, "duration" => nil, "event_type" => "push", - "previous_state" => "passed", + "previous_state" => build.previous_state, "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => build.cached_matrix_ids, + "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}", @@ -142,44 +141,7 @@ describe Travis::API::V3::Services::Build::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"}, - "jobs" =>[ - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[0].id}", - "@representation"=> "minimal", - "id" => jobs[0].id, - "number" => jobs[0].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[1].id}", - "@representation"=> "minimal", - "id" => jobs[1].id, - "number" => jobs[1].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[2].id}", - "@representation"=> "minimal", - "id" => jobs[2].id, - "number" => jobs[2].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[3].id}", - "@representation"=> "minimal", - "id" => jobs[3].id, - "number" => jobs[3].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}] + "committed_at" => "2010-11-12T12:55:00Z"} }} end end diff --git a/spec/v3/services/builds/find_spec.rb b/spec/v3/services/builds/find_spec.rb index 9d0a9cea..65801147 100644 --- a/spec/v3/services/builds/find_spec.rb +++ b/spec/v3/services/builds/find_spec.rb @@ -60,7 +60,27 @@ describe Travis::API::V3::Services::Builds::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => build.cached_matrix_ids, + "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}", @@ -83,43 +103,6 @@ describe Travis::API::V3::Services::Builds::Find do "message" => "unignore Gemfile.lock", "compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop", "committed_at" => "2010-11-12T12:55:00Z"}, - "jobs" =>[ - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[0].id}", - "@representation"=> "minimal", - "id" => jobs[0].id, - "number" => jobs[0].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[1].id}", - "@representation"=> "minimal", - "id" => jobs[1].id, - "number" => jobs[1].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[2].id}", - "@representation"=> "minimal", - "id" => jobs[2].id, - "number" => jobs[2].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[3].id}", - "@representation"=> "minimal", - "id" => jobs[3].id, - "number" => jobs[3].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}] }] }} end @@ -127,7 +110,7 @@ describe Travis::API::V3::Services::Builds::Find 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(: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) } @@ -167,7 +150,27 @@ describe Travis::API::V3::Services::Builds::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => build.cached_matrix_ids, + "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}", @@ -189,44 +192,7 @@ 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"}, - "jobs" =>[ - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[0].id}", - "@representation"=> "minimal", - "id" => jobs[0].id, - "number" => jobs[0].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[1].id}", - "@representation"=> "minimal", - "id" => jobs[1].id, - "number" => jobs[1].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[2].id}", - "@representation"=> "minimal", - "id" => jobs[2].id, - "number" => jobs[2].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}, - { - "@type" => "job", - "@href" => "/v3/job/#{jobs[3].id}", - "@representation"=> "minimal", - "id" => jobs[3].id, - "number" => jobs[3].number, - "state" => "configured", - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => nil}] + "committed_at" => "2010-11-12T12:55:00Z"} }] }} end diff --git a/spec/v3/services/job/find_spec.rb b/spec/v3/services/job/find_spec.rb index c388c7b0..fba9c4f0 100644 --- a/spec/v3/services/job/find_spec.rb +++ b/spec/v3/services/job/find_spec.rb @@ -1,11 +1,12 @@ require 'spec_helper' describe Travis::API::V3::Services::Job::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(: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) } @@ -20,8 +21,8 @@ describe Travis::API::V3::Services::Job::Find do "id" => job.id, "number" => job.number, "state" => job.state, - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => job.finished_at, + "started_at" => "2010-11-12T12:00:00Z", + "finished_at" => "2010-11-12T12:00:10Z", "build" => { "@type" => "build", "@href" => "/v3/build/#{build.id}", @@ -32,9 +33,26 @@ describe Travis::API::V3::Services::Job::Find do "duration" => build.duration, "event_type" => build.event_type, "previous_state" => build.previous_state, - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => build.finished_at, - "job_ids" => build.cached_matrix_ids}, + "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", @@ -50,7 +68,7 @@ describe Travis::API::V3::Services::Job::Find do "ref" => commit.ref, "message" => commit.message, "compare_url" => commit.compare_url, - "committed_at" => "2010-11-12T12:55:00Z"}, + "committed_at" => "2010-11-12T11:50:00Z"}, "owner" => { "@type" => owner_type.to_s.downcase, "@href" => "/v3/#{owner_href}/#{owner.id}", @@ -74,9 +92,9 @@ describe Travis::API::V3::Services::Job::Find do 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 { 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/job/#{job.id}", {}, headers) } + 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 == { @@ -86,8 +104,8 @@ describe Travis::API::V3::Services::Job::Find do "id" => job.id, "number" => job.number, "state" => job.state, - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => job.finished_at, + "started_at" => "2010-11-12T12:00:00Z", + "finished_at" => "2010-11-12T12:00:10Z", "build" => { "@type" => "build", "@href" => "/v3/build/#{build.id}", @@ -98,9 +116,26 @@ describe Travis::API::V3::Services::Job::Find do "duration" => build.duration, "event_type" => build.event_type, "previous_state" => build.previous_state, - "started_at" => "2010-11-12T13:00:00Z", - "finished_at" => build.finished_at, - "job_ids" => build.cached_matrix_ids}, + "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", @@ -116,7 +151,7 @@ describe Travis::API::V3::Services::Job::Find do "ref" => commit.ref, "message" => commit.message, "compare_url" => commit.compare_url, - "committed_at" => "2010-11-12T12:55:00Z"}, + "committed_at" => "2010-11-12T11:50:00Z"}, "owner" => { "@type" => owner_type.to_s.downcase, "@href" => "/v3/#{owner_href}/#{owner.id}", diff --git a/spec/v3/services/organization/find_spec.rb b/spec/v3/services/organization/find_spec.rb index c0b2e3e4..216265f6 100644 --- a/spec/v3/services/organization/find_spec.rb +++ b/spec/v3/services/organization/find_spec.rb @@ -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 } diff --git a/spec/v3/services/organizations/for_current_user_spec.rb b/spec/v3/services/organizations/for_current_user_spec.rb index 04e5dd0e..eb978cac 100644 --- a/spec/v3/services/organizations/for_current_user_spec.rb +++ b/spec/v3/services/organizations/for_current_user_spec.rb @@ -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 } diff --git a/spec/v3/services/owner/find_spec.rb b/spec/v3/services/owner/find_spec.rb index 61f253ce..2399d2c6 100644 --- a/spec/v3/services/owner/find_spec.rb +++ b/spec/v3/services/owner/find_spec.rb @@ -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 } diff --git a/spec/v3/services/owner/repositories_spec.rb b/spec/v3/services/owner/repositories_spec.rb index 107254f9..48c4673b 100644 --- a/spec/v3/services/owner/repositories_spec.rb +++ b/spec/v3/services/owner/repositories_spec.rb @@ -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,9 +55,9 @@ 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, @@ -63,7 +65,28 @@ describe Travis::API::V3::Services::Owner::Repositories do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.last_build.cached_matrix_ids}}}] + "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 diff --git a/spec/v3/services/repositories/for_current_user_spec.rb b/spec/v3/services/repositories/for_current_user_spec.rb index c89fec91..79138a7c 100644 --- a/spec/v3/services/repositories/for_current_user_spec.rb +++ b/spec/v3/services/repositories/for_current_user_spec.rb @@ -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,9 +55,9 @@ 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, @@ -63,7 +65,27 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.last_build.cached_matrix_ids}}}] + "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 diff --git a/spec/v3/services/repository/find_spec.rb b/spec/v3/services/repository/find_spec.rb index 8c48e252..9bc6b750 100644 --- a/spec/v3/services/repository/find_spec.rb +++ b/spec/v3/services/repository/find_spec.rb @@ -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,9 +63,9 @@ 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, @@ -71,7 +73,27 @@ describe Travis::API::V3::Services::Repository::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.last_build.cached_matrix_ids}} + "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 @@ -115,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) } @@ -137,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}", @@ -157,9 +179,9 @@ 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, @@ -167,7 +189,27 @@ describe Travis::API::V3::Services::Repository::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.last_build.cached_matrix_ids}} + "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 @@ -218,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}", @@ -238,9 +280,9 @@ 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, @@ -248,7 +290,27 @@ describe Travis::API::V3::Services::Repository::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.last_build.cached_matrix_ids}} + "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 @@ -305,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}", @@ -325,9 +387,9 @@ 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, @@ -335,7 +397,27 @@ describe Travis::API::V3::Services::Repository::Find do "previous_state" => "passed", "started_at" => "2010-11-12T13:00:00Z", "finished_at" => nil, - "job_ids" => repo.last_build.cached_matrix_ids}} + "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 diff --git a/spec/v3/services/user/current_spec.rb b/spec/v3/services/user/current_spec.rb index ac6d38cc..4557ee2b 100644 --- a/spec/v3/services/user/current_spec.rb +++ b/spec/v3/services/user/current_spec.rb @@ -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}" }} diff --git a/spec/v3/services/user/find_spec.rb b/spec/v3/services/user/find_spec.rb index 1c0517ec..9155cb63 100644 --- a/spec/v3/services/user/find_spec.rb +++ b/spec/v3/services/user/find_spec.rb @@ -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}" }} From 070be827df841fa8b0bacb9abf4df7bb682233ea Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 2 Sep 2015 16:29:40 +0200 Subject: [PATCH 13/13] revert extensions spec expectation --- spec/v3/extensions/belongs_to_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/v3/extensions/belongs_to_spec.rb b/spec/v3/extensions/belongs_to_spec.rb index dabac0fd..8ed9d92a 100644 --- a/spec/v3/extensions/belongs_to_spec.rb +++ b/spec/v3/extensions/belongs_to_spec.rb @@ -12,7 +12,7 @@ describe Travis::API::V3::Extensions::BelongsTo do after { repo.destroy; user.destroy } example { expect(repo.owner).to be_a(Travis::API::V3::Models::User) } - example { expect(Travis::API::V3::Models::Repository.find(repo.id).owner).to be_a(Travis::API::V3::Models::User) } + example { expect(::Repository.find(repo.id).owner).to be_a(::User) } example { expect(user.repositories).to include(repo) } end end