From 98362b2c51216e70a9d62cfc11530e80d87d8611 Mon Sep 17 00:00:00 2001 From: Jakob Krigovsky Date: Wed, 6 Dec 2017 12:09:55 +0100 Subject: [PATCH] Fix NoMethodError when Slack is unavailable --- CHANGELOG.md | 1 + lib/slack/web/faraday/response/raise_error.rb | 4 +--- spec/fixtures/slack/web/503_error.yml | 14 ++++++++++++++ .../web/api/errors/service_unavailable_spec.rb | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 spec/fixtures/slack/web/503_error.yml create mode 100644 spec/slack/web/api/errors/service_unavailable_spec.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index c185a520..f9f4078b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### 0.11.1 (Next) * [#187](https://github.com/slack-ruby/slack-ruby-client/pull/187): Concatenate error message when multiple errors present - [@chrislopresto](https://github.com/chrislopresto). +* [#188](https://github.com/slack-ruby/slack-ruby-client/pull/188): Fixed `NoMethodError` when Slack is unavailable - [@sonicdoe](https://github.com/sonicdoe). * Your contribution here. ### 0.11.0 (11/25/2017) diff --git a/lib/slack/web/faraday/response/raise_error.rb b/lib/slack/web/faraday/response/raise_error.rb index 7c9137eb..3897aa06 100644 --- a/lib/slack/web/faraday/response/raise_error.rb +++ b/lib/slack/web/faraday/response/raise_error.rb @@ -6,9 +6,7 @@ class RaiseError < ::Faraday::Response::Middleware def on_complete(env) if env.status == 429 raise Slack::Web::Api::Errors::TooManyRequestsError, env.response - elsif (body = env.body) && body['ok'] - nil - else + elsif (body = env.body) && !body['ok'] error_message = body['error'] || body['errors'].map { |message| message['error'] }.join(',') raise Slack::Web::Api::Errors::SlackError.new(error_message, env.response) end diff --git a/spec/fixtures/slack/web/503_error.yml b/spec/fixtures/slack/web/503_error.yml new file mode 100644 index 00000000..4c50a892 --- /dev/null +++ b/spec/fixtures/slack/web/503_error.yml @@ -0,0 +1,14 @@ +--- +http_interactions: +- request: + method: post + uri: https://slack.com/api/auth.test + response: + status: + code: 503 + message: Service Unavailable + body: + encoding: US-ASCII + string: '' + http_version: + recorded_at: Thu, 30 Nov 2017 14:36:26 GMT diff --git a/spec/slack/web/api/errors/service_unavailable_spec.rb b/spec/slack/web/api/errors/service_unavailable_spec.rb new file mode 100644 index 00000000..fe38bff5 --- /dev/null +++ b/spec/slack/web/api/errors/service_unavailable_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +RSpec.describe Slack::Web::Client do + let(:client) { Slack::Web::Client.new } + it 'raises a Faraday::ClientError when Slack is unavailable', vcr: { cassette_name: 'web/503_error' } do + begin + client.auth_test + raise 'Expected to receive Faraday::ClientError.' + rescue Faraday::ClientError => e + expect(e.response).to_not be_nil + expect(e.response[:status]).to eq 503 + end + end +end