diff --git a/Gemfile.lock b/Gemfile.lock index 35ae27eb..c3551b4e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -93,7 +93,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-yaml.git - revision: 9ebe328e7546c696dd374a8cf773d93276f98e4f + revision: 032caed23af8ed1ed55e9204bb91316f3ada2f74 specs: travis-yaml (0.2.0) diff --git a/lib/travis/api/v2/http/build.rb b/lib/travis/api/v2/http/build.rb index 9d8203b5..394c4ac8 100644 --- a/lib/travis/api/v2/http/build.rb +++ b/lib/travis/api/v2/http/build.rb @@ -17,7 +17,7 @@ module Travis def data { 'build' => build_data(build), - 'commit' => commit_data(build.commit), + 'commit' => commit_data(build.commit, build.repository), 'jobs' => options[:include_jobs] ? build.matrix.map { |job| job_data(job) } : [], 'annotations' => options[:include_jobs] ? Annotations.new(annotations(build), @options).data["annotations"] : [], } @@ -44,11 +44,12 @@ module Travis } end - def commit_data(commit) + def commit_data(commit, repository) { 'id' => commit.id, 'sha' => commit.commit, 'branch' => commit.branch, + 'branch_is_default' => branch_is_default(commit, repository), 'message' => commit.message, 'committed_at' => format_date(commit.committed_at), 'author_name' => commit.author_name, @@ -78,6 +79,10 @@ module Travis } end + def branch_is_default(commit, repository) + repository.default_branch == commit.branch + end + def annotations(build) build.matrix.map(&:annotations).flatten end diff --git a/lib/travis/api/v2/http/job.rb b/lib/travis/api/v2/http/job.rb index 4b712b40..92366474 100644 --- a/lib/travis/api/v2/http/job.rb +++ b/lib/travis/api/v2/http/job.rb @@ -15,7 +15,7 @@ module Travis def data { 'job' => job_data(job), - 'commit' => commit_data(job.commit), + 'commit' => commit_data(job.commit, job.repository), 'annotations' => Annotations.new(job.annotations, @options).data["annotations"], } end @@ -42,11 +42,12 @@ module Travis } end - def commit_data(commit) + def commit_data(commit, repository) { 'id' => commit.id, 'sha' => commit.commit, 'branch' => commit.branch, + 'branch_is_default' => branch_is_default(commit, repository), 'message' => commit.message, 'committed_at' => format_date(commit.committed_at), 'author_name' => commit.author_name, @@ -56,6 +57,10 @@ module Travis 'compare_url' => commit.compare_url, } end + + def branch_is_default(commit, repository) + repository.default_branch == commit.branch + end end end end diff --git a/lib/travis/api/v3.rb b/lib/travis/api/v3.rb index 8c8be745..dd8c2af6 100644 --- a/lib/travis/api/v3.rb +++ b/lib/travis/api/v3.rb @@ -35,6 +35,7 @@ module Travis NotImplemented = ServerError .create('request not (yet) implemented', status: 501) RequestLimitReached = ClientError .create('request limit reached for resource', status: 429) AlreadySyncing = ClientError .create('sync already in progress', status: 409) + MethodNotAllowed = ClientError .create('method not allowed', status: 405) end end end diff --git a/lib/travis/api/v3/router.rb b/lib/travis/api/v3/router.rb index 573c7c85..28085e81 100644 --- a/lib/travis/api/v3/router.rb +++ b/lib/travis/api/v3/router.rb @@ -15,8 +15,9 @@ module Travis::API::V3 return service_index(env) if env['PATH_INFO'.freeze] == ?/.freeze metrics = @metrics_processor.create access_control = AccessControl.new(env) - factory, params = routes.factory_for(env['REQUEST_METHOD'.freeze], env['PATH_INFO'.freeze]) env_params = params(env) + factory, params = routes.factory_for(env['REQUEST_METHOD'.freeze], env['PATH_INFO'.freeze]) + raise NotFound unless factory metrics.name_after(factory) diff --git a/spec/unit/api/v2/http/build_spec.rb b/spec/unit/api/v2/http/build_spec.rb index 11a6dbea..f276b2b8 100644 --- a/spec/unit/api/v2/http/build_spec.rb +++ b/spec/unit/api/v2/http/build_spec.rb @@ -29,6 +29,7 @@ describe Travis::Api::V2::Http::Build do 'id' => 1, 'sha' => '62aae5f70ceee39123ef', 'branch' => 'master', + 'branch_is_default' => true, 'message' => 'the commit message', 'compare_url' => 'https://github.com/svenfuchs/minimal/compare/master...develop', 'committed_at' => json_format_time(Time.now.utc - 1.hour), diff --git a/spec/unit/api/v2/http/job_spec.rb b/spec/unit/api/v2/http/job_spec.rb index a9211b6f..22fda7b6 100644 --- a/spec/unit/api/v2/http/job_spec.rb +++ b/spec/unit/api/v2/http/job_spec.rb @@ -31,6 +31,7 @@ describe Travis::Api::V2::Http::Job do 'sha' => '62aae5f70ceee39123ef', 'message' => 'the commit message', 'branch' => 'master', + 'branch_is_default' => true, 'message' => 'the commit message', 'committed_at' => json_format_time(Time.now.utc - 1.hour), 'committer_name' => 'Sven Fuchs', diff --git a/spec/v3/error_handling_spec.rb b/spec/v3/error_handling_spec.rb new file mode 100644 index 00000000..b86bf917 --- /dev/null +++ b/spec/v3/error_handling_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe Travis::API::V3::ServiceIndex do + let(:headers) {{ }} + let(:path) { "/v3/repo/1/enable" } + let(:json) { JSON.load(response.body) } + let(:response) { get(path, {}, headers) } + let(:resources) { json.fetch('resources') } + + it "handles wrong HTTP method with 405 status" do + + response.status.should == 405 + end + +end