From ab1bfe0aeb4f2f91ac961512ba6445e7e5c05165 Mon Sep 17 00:00:00 2001 From: Lisa P Date: Thu, 25 Feb 2016 14:40:53 +0100 Subject: [PATCH 1/2] create MethodNotAllowed error --- lib/travis/api/v3/error.rb | 6 ++++++ lib/travis/api/v3/router.rb | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/travis/api/v3/error.rb b/lib/travis/api/v3/error.rb index fefd2b08..61d10882 100644 --- a/lib/travis/api/v3/error.rb +++ b/lib/travis/api/v3/error.rb @@ -35,4 +35,10 @@ module Travis::API::V3 super(message) end end + + class MethodNotAllowed < Error + def self.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) From 04484271369dafac81fafbb2e1899a3e9f34bc6e Mon Sep 17 00:00:00 2001 From: Lisa P Date: Thu, 25 Feb 2016 15:06:45 +0100 Subject: [PATCH 2/2] create error in v3.rb --- lib/travis/api/v3.rb | 1 + lib/travis/api/v3/error.rb | 6 ------ spec/v3/error_handling_spec.rb | 15 +++++++++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 spec/v3/error_handling_spec.rb 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/error.rb b/lib/travis/api/v3/error.rb index 61d10882..fefd2b08 100644 --- a/lib/travis/api/v3/error.rb +++ b/lib/travis/api/v3/error.rb @@ -35,10 +35,4 @@ module Travis::API::V3 super(message) end end - - class MethodNotAllowed < Error - def self.status - 405 - end - end end 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