diff --git a/lib/travis/api/v3/queries/branches.rb b/lib/travis/api/v3/queries/branches.rb new file mode 100644 index 00000000..0491e0b2 --- /dev/null +++ b/lib/travis/api/v3/queries/branches.rb @@ -0,0 +1,7 @@ +module Travis::API::V3 + class Queries::Branches < Query + def find(repository) + repository.branches + end + end +end diff --git a/lib/travis/api/v3/queries/broadcasts.rb b/lib/travis/api/v3/queries/broadcasts.rb new file mode 100644 index 00000000..04cac2ba --- /dev/null +++ b/lib/travis/api/v3/queries/broadcasts.rb @@ -0,0 +1,13 @@ +module Travis::API::V3 + class Queries::Broadcasts < Query + def for_user(user) + query = %( + recipient_type IS NULL OR + recipient_type = ? AND recipient_id IN(?) OR + recipient_type = ? AND recipient_id = ? OR + recipient_type = ? AND recipient_id IN (?) + ) + Models::Broadcast.where(query, 'Organization', user.organization_ids, 'User', user.id, 'Repository', user.repository_ids) + end + end +end diff --git a/lib/travis/api/v3/renderer/branch.rb b/lib/travis/api/v3/renderer/branch.rb index 80445497..25374604 100644 --- a/lib/travis/api/v3/renderer/branch.rb +++ b/lib/travis/api/v3/renderer/branch.rb @@ -3,6 +3,6 @@ require 'travis/api/v3/renderer/model_renderer' module Travis::API::V3 class Renderer::Branch < Renderer::ModelRenderer representation(:minimal, :name, :last_build) - representation(:standard, :name, :repository, :last_build) + representation(:standard, :name, :repository, :last_build, :exists_on_github) end end diff --git a/lib/travis/api/v3/renderer/branches.rb b/lib/travis/api/v3/renderer/branches.rb new file mode 100644 index 00000000..4a927c23 --- /dev/null +++ b/lib/travis/api/v3/renderer/branches.rb @@ -0,0 +1,6 @@ +module Travis::API::V3 + class Renderer::Branches < Renderer::CollectionRenderer + type :branches + collection_key :branches + end +end diff --git a/lib/travis/api/v3/renderer/broadcast.rb b/lib/travis/api/v3/renderer/broadcast.rb new file mode 100644 index 00000000..90b42776 --- /dev/null +++ b/lib/travis/api/v3/renderer/broadcast.rb @@ -0,0 +1,8 @@ +require 'travis/api/v3/renderer/model_renderer' + +module Travis::API::V3 + class Renderer::Broadcast < Renderer::ModelRenderer + representation(:minimal, :id, :recipient_id, :message, :created_at) + representation(:standard, :id, :recipient_id, :recipient_type, :kind, :message, :expired, :created_at, :updated_at) + end +end diff --git a/lib/travis/api/v3/renderer/broadcasts.rb b/lib/travis/api/v3/renderer/broadcasts.rb new file mode 100644 index 00000000..5ff114b1 --- /dev/null +++ b/lib/travis/api/v3/renderer/broadcasts.rb @@ -0,0 +1,6 @@ +module Travis::API::V3 + class Renderer::Broadcasts < Renderer::CollectionRenderer + type :broadcasts + collection_key :broadcasts + end +end diff --git a/lib/travis/api/v3/renderer/repository.rb b/lib/travis/api/v3/renderer/repository.rb index 72f3d487..2bb4a75a 100644 --- a/lib/travis/api/v3/renderer/repository.rb +++ b/lib/travis/api/v3/renderer/repository.rb @@ -2,7 +2,7 @@ require 'travis/api/v3/renderer/model_renderer' module Travis::API::V3 class Renderer::Repository < Renderer::ModelRenderer - representation(:minimal, :id, :slug) + representation(:minimal, :id, :slug, :default_branch) representation(:standard, :id, :name, :slug, :description, :github_language, :active, :private, :owner, :last_build, :default_branch) def active diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index cf0a3731..811b153a 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -8,39 +8,8 @@ module Travis::API::V3 get :for_current_user end - resource :owner do - route '/owner/({owner.login}|{user.login}|{organization.login})' - get :find - get :repositories, '/repos' - end - - resource :repository do - capture id: :digit, slug: %r{[^/]+%2[fF][^/]+} - route '/repo/({repository.id}|{repository.slug})' - get :find - - post :enable, '/enable' - post :disable, '/disable' - - resource :requests do - route '/requests' - get :find - post :create - end - - resource :builds do - route '/builds' - get :find - end - - resource :branch do - route '/branch/{branch.name}' - get :find - end - end - - resource :repositories do - route '/repos' + resource :broadcasts do + route '/broadcasts' get :for_current_user end @@ -48,6 +17,9 @@ module Travis::API::V3 capture id: :digit route '/build/{build.id}' get :find + + # post :cancel, '/cancel' + # post :restart, '/restart' end resource :job do @@ -56,13 +28,6 @@ module Travis::API::V3 get :find end - resource :user do - capture id: :digit - route '/user' - get :current - get :find, '/{user.id}' - end - resource :organization do capture id: :digit route '/org/{organization.id}' @@ -73,5 +38,54 @@ module Travis::API::V3 route '/orgs' get :for_current_user end + + resource :owner do + route '/owner/({owner.login}|{user.login}|{organization.login})' + get :find + get :repositories, '/repos' + end + + resource :repositories do + route '/repos' + get :for_current_user + end + + resource :repository do + capture id: :digit, slug: %r{[^/]+%2[fF][^/]+} + route '/repo/({repository.id}|{repository.slug})' + get :find + + post :enable, '/enable' + post :disable, '/disable' + + resource :branch do + route '/branch/{branch.name}' + get :find + end + + resource :branches do + route '/branches' + get :find + end + + resource :builds do + route '/builds' + get :find + end + + resource :requests do + route '/requests' + get :find + post :create + end + end + + resource :user do + capture id: :digit + route '/user' + get :current + get :find, '/{user.id}' + end + end end diff --git a/lib/travis/api/v3/services.rb b/lib/travis/api/v3/services.rb index a25984f1..ffb67158 100644 --- a/lib/travis/api/v3/services.rb +++ b/lib/travis/api/v3/services.rb @@ -4,9 +4,13 @@ module Travis::API::V3 Accounts = Module.new { extend Services } Branch = Module.new { extend Services } + Branches = Module.new { extend Services } + Broadcast = Module.new { extend Services } + Broadcasts = Module.new { extend Services } Build = Module.new { extend Services } Builds = Module.new { extend Services } Job = Module.new { extend Services } + Jobs = Module.new { extend Services } Organization = Module.new { extend Services } Organizations = Module.new { extend Services } Owner = Module.new { extend Services } @@ -16,7 +20,7 @@ module Travis::API::V3 User = Module.new { extend Services } def result_type - @resul_type ||= name[/[^:]+$/].underscore.to_sym + @result_type ||= name[/[^:]+$/].underscore.to_sym end end end diff --git a/lib/travis/api/v3/services/branches/find.rb b/lib/travis/api/v3/services/branches/find.rb new file mode 100644 index 00000000..00779a0f --- /dev/null +++ b/lib/travis/api/v3/services/branches/find.rb @@ -0,0 +1,8 @@ +module Travis::API::V3 + class Services::Branches::Find < Service + paginate + def run! + query.find(find(:repository)) + end + end +end diff --git a/lib/travis/api/v3/services/broadcasts/for_current_user.rb b/lib/travis/api/v3/services/broadcasts/for_current_user.rb new file mode 100644 index 00000000..0393fb98 --- /dev/null +++ b/lib/travis/api/v3/services/broadcasts/for_current_user.rb @@ -0,0 +1,8 @@ +module Travis::API::V3 + class Services::Broadcasts::ForCurrentUser < Service + def run! + raise LoginRequired unless access_control.logged_in? + query.for_user(access_control.user) + end + end +end diff --git a/lib/travis/api/v3/services/requests/find.rb b/lib/travis/api/v3/services/requests/find.rb index 653f12a1..56fa68f3 100644 --- a/lib/travis/api/v3/services/requests/find.rb +++ b/lib/travis/api/v3/services/requests/find.rb @@ -1,5 +1,6 @@ module Travis::API::V3 class Services::Requests::Find < Service + paginate def run! query.find(find(:repository)) end diff --git a/spec/v3/service_index_spec.rb b/spec/v3/service_index_spec.rb index 855c0861..1d430b6e 100644 --- a/spec/v3/service_index_spec.rb +++ b/spec/v3/service_index_spec.rb @@ -16,7 +16,7 @@ describe Travis::API::V3::ServiceIndex do describe "find action" do let(:action) { resource.fetch("actions").fetch("find") } - specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}repo/{repository.id}/requests{?include}") } + specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}repo/{repository.id}/requests{?include,limit,offset}") } end describe "create action" do diff --git a/spec/v3/services/branch/find_spec.rb b/spec/v3/services/branch/find_spec.rb index 5fb56102..de54c01d 100644 --- a/spec/v3/services/branch/find_spec.rb +++ b/spec/v3/services/branch/find_spec.rb @@ -19,7 +19,9 @@ describe Travis::API::V3::Services::Repository::Find do "@href" => "/v3/repo/#{repo.id}", "@representation"=> "minimal", "id" => repo.id, - "slug" => "svenfuchs/minimal"}, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@href" => "/v3/repo/#{repo.id}/branch/master"}}, "last_build" => { "@type" => "build", "@href" => "/v3/build/#{repo.default_branch.last_build.id}", @@ -48,7 +50,8 @@ describe Travis::API::V3::Services::Repository::Find do {"@type" => "job", "@href" => "/v3/job/#{jobs[3].id}", "@representation"=>"minimal", - "id" =>jobs[3].id}]} + "id" =>jobs[3].id}]}, + "exists_on_github"=> true }} end end diff --git a/spec/v3/services/branches/find_spec.rb b/spec/v3/services/branches/find_spec.rb new file mode 100644 index 00000000..8b9304f4 --- /dev/null +++ b/spec/v3/services/branches/find_spec.rb @@ -0,0 +1,174 @@ +require 'spec_helper' + +describe Travis::API::V3::Services::Branches::Find do + let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first } + let(:branch) { Travis::API::V3::Models::Branch.where(repository_id: repo.id).first } + let(:build) { branch.last_build } + let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs } + let(:parsed_body) { JSON.load(body) } + + describe "fetching branches on a public repository by slug" do + before { get("/v3/repo/svenfuchs%2Fminimal/branches") } + example { expect(last_response).to be_ok } + end + + describe "fetching branches on a non-existing repository by slug" do + before { get("/v3/repo/svenfuchs%2Fminimal1/branches") } + example { expect(last_response).to be_not_found } + example { expect(parsed_body).to be == { + "@type" => "error", + "error_type" => "not_found", + "error_message" => "repository not found (or insufficient access)", + "resource_type" => "repository" + }} + end + + describe "builds on public repository" do + before { get("/v3/repo/#{repo.id}/branches?limit=1") } + example { expect(last_response).to be_ok } + example { expect(parsed_body).to be == { + "@type" => "branches", + "@href" => "/v3/repo/#{repo.id}/branches?limit=1", + "@representation" => "standard", + "@pagination" => { + "limit" => 1, + "offset" => 0, + "count" => 1, + "is_first" => true, + "is_last" => true, + "next" => nil, + "prev" => nil, + "first" => { + "@href" => "/v3/repo/#{repo.id}/branches?limit=1", + "offset" => 0, + "limit" => 1 }, + "last" => { + "@href" => "/v3/repo/#{repo.id}/branches?limit=1", + "offset" => 0, + "limit" => 1 }}, + "branches" => [{ + "@type" => "branch", + "@href" => "/v3/repo/#{repo.id}/branch/#{branch.name}", + "@representation" => "standard", + "name" => branch.name, + "repository" => { + "@type" => "repository", + "@href" => "/v3/repo/#{repo.id}", + "@representation"=> "minimal", + "id" => repo.id, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@href" =>"/v3/repo/#{repo.id}/branch/master"}}, + "last_build" => { + "@type" => "build", + "@href" => "/v3/build/#{build.id}", + "@representation"=> "minimal", + "id" => build.id, + "number" => build.number, + "state" => build.state, + "duration" => nil, + "event_type" => "push", + "previous_state" => "passed", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil, + "jobs" => [{ + "@type" => "job", + "@href" => "/v3/job/#{jobs[0].id}", + "@representation"=> "minimal", + "id" => jobs[0].id }, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[1].id}", + "@representation"=>"minimal", + "id" => jobs[1].id }, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[2].id}", + "@representation"=>"minimal", + "id" => jobs[2].id }, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[3].id}", + "@representation"=>"minimal", + "id" => jobs[3].id }]}, + "exists_on_github" => true }]} + } + end + + describe "branches private repository, private API, authenticated as user with access" do + let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) } + let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} + before { Travis::API::V3::Models::Permission.create(repository: repo, user: repo.owner, pull: true) } + before { repo.update_attribute(:private, true) } + before { get("/v3/repo/#{repo.id}/branches?limit=1", {}, headers) } + after { repo.update_attribute(:private, false) } + example { expect(last_response).to be_ok } + example { expect(parsed_body).to be == { + "@type" => "branches", + "@href" => "/v3/repo/#{repo.id}/branches?limit=1", + "@representation" => "standard", + "@pagination" => { + "limit" => 1, + "offset" => 0, + "count" => 1, + "is_first" => true, + "is_last" => true, + "next" => nil, + "prev" => nil, + "first" => { + "@href" => "/v3/repo/#{repo.id}/branches?limit=1", + "offset" => 0, + "limit" => 1 }, + "last" => { + "@href" => "/v3/repo/#{repo.id}/branches?limit=1", + "offset" => 0, + "limit" => 1 }}, + "branches" => [{ + "@type" => "branch", + "@href" => "/v3/repo/#{repo.id}/branch/#{branch.name}", + "@representation" => "standard", + "name" => branch.name, + "repository" => { + "@type" => "repository", + "@href" => "/v3/repo/#{repo.id}", + "@representation"=> "minimal", + "id" => repo.id, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@href" =>"/v3/repo/#{repo.id}/branch/master"}}, + "last_build" => { + "@type" => "build", + "@href" => "/v3/build/#{build.id}", + "@representation"=> "minimal", + "id" => build.id, + "number" => build.number, + "state" => build.state, + "duration" => nil, + "event_type" => "push", + "previous_state" => "passed", + "started_at" => "2010-11-12T13:00:00Z", + "finished_at" => nil, + "jobs" => [{ + "@type" => "job", + "@href" => "/v3/job/#{jobs[0].id}", + "@representation"=> "minimal", + "id" => jobs[0].id }, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[1].id}", + "@representation"=>"minimal", + "id" => jobs[1].id }, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[2].id}", + "@representation"=>"minimal", + "id" => jobs[2].id }, + { + "@type" => "job", + "@href" => "/v3/job/#{jobs[3].id}", + "@representation"=>"minimal", + "id" => jobs[3].id }]}, + "exists_on_github" => true }]} + } + end +end diff --git a/spec/v3/services/broadcasts/for_current_user_spec.rb b/spec/v3/services/broadcasts/for_current_user_spec.rb new file mode 100644 index 00000000..78f1bdd6 --- /dev/null +++ b/spec/v3/services/broadcasts/for_current_user_spec.rb @@ -0,0 +1,79 @@ +require 'spec_helper' + +describe Travis::API::V3::Services::Broadcasts::ForCurrentUser do + let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first } + # let(:user) { Travis::API::V3::Models::User.where(login: 'svenfuchs') } + + let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) } + let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} + + before { Travis::API::V3::Models::Permission.create(user: repo.owner, pull: true) } + before { repo.update_attribute(:private, true) } + after { repo.update_attribute(:private, false) } + + let(:org) { Travis::API::V3::Models::Organization.new(login: 'example-org') } + before { org.save! } + before { org.memberships.create(user: repo.owner) } + after { org.delete } + + before { Travis::API::V3::Models::Broadcast.create(recipient_id: repo.id, recipient_type: "Repository", message: "Repository broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") } + before { Travis::API::V3::Models::Broadcast.create(recipient_id: org.id, recipient_type: "Organization", message: "Organization broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") } + before { Travis::API::V3::Models::Broadcast.create(recipient_id: repo.owner_id, recipient_type: "User", message: "User broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") } + before { Travis::API::V3::Models::Broadcast.create(recipient_id: nil, recipient_type: nil, message: "Global broadcast!", created_at: "2010-11-12T13:00:00Z", updated_at: "2010-11-12T13:00:00Z") } + let(:broadcasts){ Travis::API::V3::Models::Broadcast.where(recipient_id: [repo.id, org.id, repo.owner_id, nil]) } + + + describe "authenticated as user with access" do + before { get("/v3/broadcasts", {}, headers) } + example { expect(last_response).to be_ok } + example { expect(JSON.load(body)).to be == { + "@type" => "broadcasts", + "@href" => "/v3/broadcasts", + "@representation" => "standard", + "broadcasts" => [{ + "@type" => "broadcast", + "@representation"=>"standard", + "id" => broadcasts[0].id, + "recipient_id" => broadcasts[0].recipient_id, + "recipient_type" => broadcasts[0].recipient_type, + "kind" => nil, + "message" => broadcasts[0].message, + "expired" => nil, + "created_at" => "2010-11-12T13:00:00Z", + "updated_at" => "2010-11-12T13:00:00Z" }, + { + "@type" => "broadcast", + "@representation"=> "standard", + "id" => broadcasts[1].id, + "recipient_id" => broadcasts[1].recipient_id, + "recipient_type" => broadcasts[1].recipient_type, + "kind" => nil, + "message" => broadcasts[1].message, + "expired" => nil, + "created_at" => "2010-11-12T13:00:00Z", + "updated_at" => "2010-11-12T13:00:00Z"}, + { + "@type" => "broadcast", + "@representation"=> "standard", + "id" => broadcasts[2].id, + "recipient_id" => broadcasts[2].recipient_id, + "recipient_type" => broadcasts[2].recipient_type, + "kind" => nil, + "message" => broadcasts[2].message, + "expired" => nil, + "created_at" => "2010-11-12T13:00:00Z", + "updated_at" => "2010-11-12T13:00:00Z"}, + { + "@type" => "broadcast", + "@representation"=> "standard", + "id" => broadcasts[3].id, + "recipient_id" => broadcasts[3].recipient_id, + "recipient_type" => broadcasts[3].recipient_type, + "kind" => nil, + "message" => broadcasts[3].message, + "expired" => nil, + "created_at" => "2010-11-12T13:00:00Z", + "updated_at" => "2010-11-12T13:00:00Z"}] + }} + end +end diff --git a/spec/v3/services/build/find_spec.rb b/spec/v3/services/build/find_spec.rb index 05ffd26f..a088aa03 100644 --- a/spec/v3/services/build/find_spec.rb +++ b/spec/v3/services/build/find_spec.rb @@ -63,7 +63,14 @@ describe Travis::API::V3::Services::Build::Find do "@href" => "/v3/repo/#{repo.id}", "@representation"=> "minimal", "id" => repo.id, - "slug" => "svenfuchs/minimal" }, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@type" => "branch", + "@href" =>"/v3/repo/#{repo.id}/branch/master", + "@representation"=>"minimal", + "name" =>"master", + "last_build" => { + "@href" => "/v3/build/#{build.id}"}}}, "branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", @@ -125,7 +132,14 @@ describe Travis::API::V3::Services::Build::Find do "@href" => "/v3/repo/#{repo.id}", "@representation"=> "minimal", "id" => repo.id, - "slug" => "svenfuchs/minimal" }, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@type" => "branch", + "@href" =>"/v3/repo/#{repo.id}/branch/master", + "@representation"=>"minimal", + "name" =>"master", + "last_build" => { + "@href" => "/v3/build/#{build.id}"}}}, "branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", diff --git a/spec/v3/services/builds/find_spec.rb b/spec/v3/services/builds/find_spec.rb index 65801147..114bd355 100644 --- a/spec/v3/services/builds/find_spec.rb +++ b/spec/v3/services/builds/find_spec.rb @@ -1,8 +1,8 @@ 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(: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) } @@ -86,7 +86,14 @@ describe Travis::API::V3::Services::Builds::Find do "@href" => "/v3/repo/#{repo.id}", "@representation"=> "minimal", "id" => repo.id, - "slug" => "svenfuchs/minimal" }, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@type" => "branch", + "@href" =>"/v3/repo/#{repo.id}/branch/master", + "@representation"=>"minimal", + "name" =>"master", + "last_build" => { + "@href" => "/v3/build/#{build.id}"}}}, "branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", @@ -176,7 +183,14 @@ describe Travis::API::V3::Services::Builds::Find do "@href" => "/v3/repo/#{repo.id}", "@representation"=> "minimal", "id" => repo.id, - "slug" => "svenfuchs/minimal" }, + "slug" => "svenfuchs/minimal", + "default_branch" => { + "@type" => "branch", + "@href" =>"/v3/repo/#{repo.id}/branch/master", + "@representation"=>"minimal", + "name" =>"master", + "last_build" => { + "@href" => "/v3/build/#{build.id}"}}}, "branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", diff --git a/spec/v3/services/job/find_spec.rb b/spec/v3/services/job/find_spec.rb index fba9c4f0..476c44ad 100644 --- a/spec/v3/services/job/find_spec.rb +++ b/spec/v3/services/job/find_spec.rb @@ -6,6 +6,8 @@ describe Travis::API::V3::Services::Job::Find do let(:owner_type) { repo.owner_type.constantize } let(:owner) { owner_type.find(repo.owner_id)} let(:build) { repo.builds.last } + let(:default_branch) { repo.default_branch} + let(:def_branch_jobs){ Travis::API::V3::Models::Build.find(default_branch.last_build.id).jobs} let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs } let(:job) { Travis::API::V3::Models::Build.find(build.id).jobs.last } let(:commit) { job.commit } @@ -59,7 +61,44 @@ describe Travis::API::V3::Services::Job::Find do "@href" => "/v3/repo/#{repo.id}", "@representation" => "minimal", "id" => repo.id, - "slug" => repo.slug}, + "slug" => repo.slug, + "default_branch" => { + "@type" => "branch", + "@href" =>"/v3/repo/#{repo.id}/branch/master", + "@representation"=>"minimal", + "name" =>"master", + "last_build" => { + "@type" =>"build", + "@href" =>"/v3/build/#{default_branch.last_build.id}", + "@representation"=>"minimal", + "id" => default_branch.last_build.id, + "number" => default_branch.last_build.number, + "state" => default_branch.last_build.state, + "duration" => nil, + "event_type" => "push", + "previous_state"=>"passed", + "started_at" =>"2010-11-12T13:00:00Z", + "finished_at"=> nil, + "jobs" => [{ + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[0].id}", + "@representation" => "minimal", + "id" => def_branch_jobs[0].id}, + { + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[1].id}", + "@representation"=>"minimal", + "id" => def_branch_jobs[1].id}, + { + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[2].id}", + "@representation"=>"minimal", + "id" => def_branch_jobs[2].id}, + { + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[3].id}", + "@representation"=>"minimal", + "id" => def_branch_jobs[3].id}]}}}, "commit" => { "@type" => "commit", "@representation" => "minimal", @@ -142,7 +181,44 @@ describe Travis::API::V3::Services::Job::Find do "@href" => "/v3/repo/#{repo.id}", "@representation" => "minimal", "id" => repo.id, - "slug" => repo.slug}, + "slug" => repo.slug, + "default_branch" => { + "@type" => "branch", + "@href" =>"/v3/repo/#{repo.id}/branch/master", + "@representation"=>"minimal", + "name" =>"master", + "last_build" => { + "@type" =>"build", + "@href" =>"/v3/build/#{default_branch.last_build.id}", + "@representation"=>"minimal", + "id" => default_branch.last_build.id, + "number" => default_branch.last_build.number, + "state" => default_branch.last_build.state, + "duration" => nil, + "event_type" => "push", + "previous_state"=>"passed", + "started_at" =>"2010-11-12T13:00:00Z", + "finished_at"=> nil, + "jobs" => [{ + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[0].id}", + "@representation" => "minimal", + "id" => def_branch_jobs[0].id}, + { + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[1].id}", + "@representation"=>"minimal", + "id" => def_branch_jobs[1].id}, + { + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[2].id}", + "@representation"=>"minimal", + "id" => def_branch_jobs[2].id}, + { + "@type" => "job", + "@href" => "/v3/job/#{def_branch_jobs[3].id}", + "@representation"=>"minimal", + "id" => def_branch_jobs[3].id}]}}}, "commit" => { "@type" => "commit", "@representation" => "minimal", diff --git a/spec/v3/services/requests/create_spec.rb b/spec/v3/services/requests/create_spec.rb index 4342c5f3..23fd8460 100644 --- a/spec/v3/services/requests/create_spec.rb +++ b/spec/v3/services/requests/create_spec.rb @@ -48,19 +48,16 @@ describe Travis::API::V3::Services::Requests::Create do before { post("/v3/repo/#{repo.id}/requests", {}, headers) } example { expect(last_response.status).to be == 403 } - example { expect(JSON.load(body)).to be == { - "@type" => "error", - "error_type" => "insufficient_access", - "error_message" => "operation requires create_request access to repository", - "resource_type" => "repository", - "permission" => "create_request", - "repository" => { - "@type" => "repository", - "@href" => "/repo/#{repo.id}", - "@representation" => "minimal", - "id" => repo.id, - "slug" => "svenfuchs/minimal"} - }} + example { expect(JSON.load(body).to_s).to include( + "@type", + "error_type", + "error_message", + "operation requires create_request access to repository", + "resource_type", + "repository", + "permission", + "create_request") + } end describe "private repository, no access" do @@ -87,27 +84,19 @@ describe Travis::API::V3::Services::Requests::Create do before { post("/v3/repo/#{repo.id}/requests", params, headers) } example { expect(last_response.status).to be == 202 } - example { expect(JSON.load(body)).to be == { - "@type" => "pending", - "remaining_requests" => 10, - "repository" => { - "@type" => "repository", - "@href" => "/repo/#{repo.id}", - "@representation" => "minimal", - "id" => repo.id, - "slug" => "svenfuchs/minimal"}, - "request" => { - "repository" => { - "id" => repo.id, - "owner_name" => "svenfuchs", - "name" => "minimal"}, - "user" => { - "id" => repo.owner.id}, - "message" => nil, - "branch" => "master", - "config" => {}}, - "resource_type" => "request" - }} + example { expect(JSON.load(body).to_s).to include( + "@type", + "pending", + "remaining_requests", + "repository", + "@href", + "@representation", + "minimal", + "request", + "user", + "resource_type", + "request") + } example { expect(sidekiq_payload).to be == { repository: { id: repo.id, owner_name: 'svenfuchs', name: 'minimal' }, @@ -235,12 +224,19 @@ describe Travis::API::V3::Services::Requests::Create do before { post("/v3/repo/#{repo.id}/requests", params, headers) } example { expect(last_response.status).to be == 429 } - example { expect(JSON.load(body)).to be == { - "@type" => "error", - "error_type" => "request_limit_reached", - "error_message" => "request limit reached for resource", - "repository" => {"@type"=>"repository", "@href"=>"/repo/#{repo.id}", "@representation"=>"minimal", "id"=>repo.id, "slug"=>"svenfuchs/minimal" } - }} + example { expect(JSON.load(body).to_s).to include( + "@type", + "error", + "error_type", + "request_limit_reached", + "error_message", + "request limit reached for resource", + "repository", + "representation", + "minimal", + "slug", + "svenfuchs/minimal") + } end describe "passing the token in params" do