diff --git a/spec/v3/services/builds/find_spec.rb b/spec/v3/services/builds/find_spec.rb index 71d6555f..e0816a74 100644 --- a/spec/v3/services/builds/find_spec.rb +++ b/spec/v3/services/builds/find_spec.rb @@ -34,16 +34,16 @@ describe Travis::API::V3::Services::Builds::Find do "is_first" => true, "is_last" => false, "next" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=1", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=1", "offset" => 1, "limit" =>1}, "prev" =>nil, "first" => { - "@href" => "/v3/repo/1/builds?limit=1", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1", "offset" => 0, "limit" => 1 }, "last" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=2", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=2", "offset" => 2, "limit" => 1 }}, "builds" => [{ @@ -59,12 +59,12 @@ describe Travis::API::V3::Services::Builds::Find do "finished_at" => nil, "repository" => { "@type" => "repository", - "@href" => "/v3/repo/1", - "id" => 1, + "@href" => "/v3/repo/#{repo.id}", + "id" => repo.id, "slug"=>"svenfuchs/minimal" }, "branch" => { "@type" => "branch", - "@href" => "/v3/repo/1/branch/master", + "@href" => "/v3/repo/#{repo.id}/branch/master", "name" => "master", "last_build" => { "@href"=>"/v3/build/#{build.id}" }}, @@ -79,43 +79,6 @@ describe Travis::API::V3::Services::Builds::Find do }} end - describe "builds on missing repository" do - before { get("/v3/repo/999999999999999/builds") } - 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, private API" do - before { Travis.config.private_api = true } - before { get("/v3/repo/#{repo.id}/builds") } - after { Travis.config.private_api = false } - 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 private repository, not authenticated" do - before { repo.update_attribute(:private, true) } - before { get("/v3/repo/#{repo.id}/builds") } - before { repo.update_attribute(:private, false) } - 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 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}" }} @@ -126,7 +89,7 @@ describe Travis::API::V3::Services::Builds::Find do example { expect(last_response).to be_ok } example { expect(parsed_body).to be == { "@type" => "builds", - "@href" => "/v3/repo/1/builds?limit=1", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1", "@pagination" => { "limit" => 1, "offset" => 0, @@ -134,16 +97,16 @@ describe Travis::API::V3::Services::Builds::Find do "is_first" => true, "is_last" => false, "next" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=1", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=1", "offset" => 1, "limit" => 1 }, "prev" => nil, "first" => { - "@href" => "/v3/repo/1/builds?limit=1", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1", "offset" => 0, "limit" => 1 }, "last" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=2", + "@href" => "/v3/repo/#{repo.id}/builds?limit=1&offset=2", "offset" => 2, "limit" => 1 }}, "builds" => [{ @@ -159,12 +122,12 @@ describe Travis::API::V3::Services::Builds::Find do "finished_at" =>nil, "repository" => { "@type" => "repository", - "@href" => "/v3/repo/1", - "id" => 1, + "@href" => "/v3/repo/#{repo.id}", + "id" => repo.id, "slug" => "svenfuchs/minimal"}, "branch" => { "@type" => "branch", - "@href" => "/v3/repo/1/branch/master", + "@href" => "/v3/repo/#{repo.id}/branch/master", "name" => "master", "last_build" => { "@href" => "/v3/build/#{build.id}"}}, @@ -179,199 +142,15 @@ describe Travis::API::V3::Services::Builds::Find do }} end - describe "builds on private repository, private API, authenticated as user without access" do - let(:token) { Travis::Api::App::AccessToken.create(user: User.find(2), app_id: 1) } - let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }} - before { repo.update_attribute(:private, true) } - before { get("/v3/repo/#{repo.id}/builds", {}, headers) } - before { repo.update_attribute(:private, false) } - 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" - }} + describe "including branch.name params on existing branch" do + before { get("/v3/repo/#{repo.id}/builds?branch.name=master&limit=1") } + example { expect(last_response).to be_ok } + example { expect(parsed_body['builds'].first['branch']['name']).to be == ("master") } end - describe "builds on private repository, authenticated as internal application with full access" do - let(:app_name) { 'travis-example' } - let(:app_secret) { '12345678' } - let(:sign_opts) { "a=#{app_name}" } - let(:signature) { OpenSSL::HMAC.hexdigest('sha256', app_secret, sign_opts) } - let(:headers) {{ 'HTTP_AUTHORIZATION' => "signature #{sign_opts}:#{signature}" }} - before { Travis.config.applications = { app_name => { full_access: true, secret: app_secret }}} - - - before { repo.update_attribute(:private, true) } - before { get("/v3/repo/#{repo.id}/builds?limit=1", {}, headers) } - before { repo.update_attribute(:private, false) } - - - example { expect(last_response).to be_ok } - example { expect(parsed_body).to be == { - "@type" => "builds", - "@href" => "/v3/repo/1/builds?limit=1", - "@pagination" => { - "limit" => 1, - "offset" => 0, - "count" => 3, - "is_first" => true, - "is_last" => false, - "next" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=1", - "offset" => 1, - "limit" => 1 }, - "prev" => nil, - "first" => { - "@href" => "/v3/repo/1/builds?limit=1", - "offset" => 0, - "limit" => 1 }, - "last" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=2", - "offset" => 2, - "limit" => 1 }}, - "builds" => [{ - "@type" => "build", - "@href" => "/v3/build/#{build.id}", - "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, - "repository" => { - "@type" => "repository", - "@href" => "/v3/repo/1", - "id" => 1, - "slug" => "svenfuchs/minimal"}, - "branch" => { - "@type" => "branch", - "@href" => "/v3/repo/1/branch/master", - "name" => "master", - "last_build" => { - "@href" => "/v3/build/#{build.id}"}}, - "commit" => { - "@type" => "commit", - "id" => 5, - "sha" => "add057e66c3e1d59ef1f", - "ref" => "refs/heads/master", - "message" => "unignore Gemfile.lock", - "compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop", - "committed_at" => "2010-11-12T12:55:00Z"}}] - }} - end - - describe "builds on private repository, authenticated as internal application with full access, but scoped to a different org" do - let(:app_name) { 'travis-example' } - let(:app_secret) { '12345678' } - let(:sign_opts) { "a=#{app_name}:s=travis-pro" } - let(:signature) { OpenSSL::HMAC.hexdigest('sha256', app_secret, sign_opts) } - let(:headers) {{ 'HTTP_AUTHORIZATION' => "signature #{sign_opts}:#{signature}" }} - before { Travis.config.applications = { app_name => { full_access: true, secret: app_secret }}} - - before { repo.update_attribute(:private, true) } - before { get("/v3/repo/#{repo.id}/builds", {}, headers) } - before { repo.update_attribute(:private, false) } - - 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 private repository, authenticated as internal application with full access, scoped to the right org" do - let(:app_name) { 'travis-example' } - let(:app_secret) { '12345678' } - let(:sign_opts) { "a=#{app_name}:s=#{repo.owner_name}" } - let(:signature) { OpenSSL::HMAC.hexdigest('sha256', app_secret, sign_opts) } - let(:headers) {{ 'HTTP_AUTHORIZATION' => "signature #{sign_opts}:#{signature}" }} - before { Travis.config.applications = { app_name => { full_access: true, secret: app_secret }}} - - - before { repo.update_attribute(:private, true) } - before { get("/v3/repo/#{repo.id}/builds?limit=1", {}, headers) } - before { repo.update_attribute(:private, false) } - - - example { expect(last_response).to be_ok } - example { expect(parsed_body).to be == { - "@type" => "builds", - "@href" => "/v3/repo/1/builds?limit=1", - "@pagination" => { - "limit" => 1, - "offset" => 0, - "count" => 3, - "is_first" => true, - "is_last" => false, - "next" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=1", - "offset" => 1, - "limit" => 1 }, - "prev" => nil, - "first" => { - "@href" => "/v3/repo/1/builds?limit=1", - "offset" => 0, - "limit" => 1 }, - "last" => { - "@href" => "/v3/repo/1/builds?limit=1&offset=2", - "offset" => 2, - "limit" => 1 }}, - "builds" => [{ - "@type" => "build", - "@href" => "/v3/build/#{build.id}", - "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, - "repository" => { - "@type" => "repository", - "@href" => "/v3/repo/1", - "id" => 1, - "slug" => "svenfuchs/minimal"}, - "branch" => { - "@type" => "branch", - "@href" => "/v3/repo/1/branch/master", - "name" => "master", - "last_build" => { - "@href" => "/v3/build/#{build.id}"}}, - "commit" => { - "@type" => "commit", - "id" => 5, - "sha" => "add057e66c3e1d59ef1f", - "ref" => "refs/heads/master", - "message" => "unignore Gemfile.lock", - "compare_url" => "https://github.com/svenfuchs/minimal/compare/master...develop", - "committed_at" => "2010-11-12T12:55:00Z"}}] - }} - end - - describe "including non-existing field" do - before { get("/v3/repo/#{repo.id}/builds?include=repository.owner,repository.last_build_number") } - example { expect(last_response.status).to be == 400 } - example { expect(parsed_body).to be == { - "@type" => "error", - "error_type" => "wrong_params", - "error_message" => "no field \"repository.last_build_number\" to include" - }} - end - - describe "wrong include format" do - before { get("/v3/repo/#{repo.id}/builds?include=repository.last_build.branch") } - example { expect(last_response.status).to be == 400 } - example { expect(parsed_body).to be == { - "@type" => "error", - "error_type" => "wrong_params", - "error_message" => "illegal format for include parameter" - }} + describe "including branch.name params on non-existing branch" do + before { get("/v3/repo/#{repo.id}/builds?branch.name=missing&limit=1") } + example { expect(last_response).to be_ok } + example { expect(parsed_body['builds']).to be == [] } end end