gds-api-adapters 0.0.24 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,7 @@
1
1
  module GdsApi
2
2
  class EndpointNotFound < StandardError
3
3
  end
4
+
5
+ class TimedOutException < Exception
6
+ end
4
7
  end
@@ -5,18 +5,18 @@ require_relative 'version'
5
5
  module GdsApi
6
6
  class JsonClient
7
7
  attr_accessor :logger, :options
8
-
8
+
9
9
  def initialize(options = {})
10
10
  @logger = options[:logger] || GdsApi::Base.logger
11
11
  @options = options
12
12
  end
13
-
13
+
14
14
  REQUEST_HEADERS = {
15
- 'Accept' => 'application/json',
16
- 'Content-Type' => 'application/json',
17
- 'User-Agent' => "GDS Api Client v. #{GdsApi::VERSION}"
15
+ 'Accept' => 'application/json',
16
+ 'Content-Type' => 'application/json',
17
+ 'User-Agent' => "GDS Api Client v. #{GdsApi::VERSION}"
18
18
  }
19
- DEFAULT_TIMEOUT_IN_SECONDS = 0.5
19
+ DEFAULT_TIMEOUT_IN_SECONDS = 2
20
20
 
21
21
  def get_json(url)
22
22
  do_request(Net::HTTP::Get, url)
@@ -29,9 +29,8 @@ module GdsApi
29
29
  def put_json(url, params)
30
30
  do_request(Net::HTTP::Put, url, params)
31
31
  end
32
-
33
- private
34
-
32
+
33
+ private
35
34
  def do_request(method_class, url, params = nil)
36
35
  loggable = {request_uri: url, start_time: Time.now.to_f}
37
36
  start_logging = loggable.merge(action: 'start')
@@ -41,7 +40,7 @@ module GdsApi
41
40
  path = url.path
42
41
  path = path + "?" + url.query if url.query
43
42
 
44
- response = Net::HTTP.start(url.host, url.port, nil, nil, nil, nil, {use_ssl: url.port == 443, verify_mode: (OpenSSL::SSL::VERIFY_NONE if url.port == 443) }) do |http|
43
+ response = Net::HTTP.start(url.host, url.port, nil, nil, nil, nil, {use_ssl: url.port == 443, verify_mode: (OpenSSL::SSL::VERIFY_NONE if url.port == 443)}) do |http|
45
44
  http.read_timeout = options[:timeout] || DEFAULT_TIMEOUT_IN_SECONDS
46
45
  request = method_class.new(path, REQUEST_HEADERS)
47
46
  request.basic_auth(@options[:basic_auth][:user], @options[:basic_auth][:password]) if @options[:basic_auth]
@@ -67,7 +66,7 @@ module GdsApi
67
66
  raise GdsApi::EndpointNotFound.new("Could not connect to #{url}")
68
67
  rescue Timeout::Error, Errno::ECONNRESET => e
69
68
  logger.error loggable.merge(status: 'failed', end_time: Time.now.to_f).to_json
70
- nil
69
+ raise GdsApi::TimedOutException.new
71
70
  end
72
71
  end
73
72
  end
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = '0.0.24'
2
+ VERSION = '0.0.26'
3
3
  end
@@ -1,35 +1,25 @@
1
1
  require_relative 'test_helper'
2
2
  require 'gds_api/base'
3
3
  require 'gds_api/json_client'
4
- require 'rack'
5
4
  require 'base64'
6
5
 
7
- StubRackApp = lambda do |env|
8
- sleep(30)
9
- body = '{"some":"value"}'
10
- [200, {"Content-Type" => "text/plain", "Content-Length" => body.length.to_s}, [body]]
11
- end
12
-
13
6
  class JsonClientTest < MiniTest::Spec
14
7
  def setup
15
8
  @client = GdsApi::JsonClient.new
16
9
  end
17
10
 
18
- def options; {}; end
19
- def pending_test_long_requests_timeout
11
+ def options;
12
+ {}
13
+ end
14
+
15
+ def test_long_get_requests_timeout
20
16
  url = "http://www.example.com/timeout.json"
21
- stub_request(:get, url).to_rack(StubRackApp)
22
- assert_raises GdsApi::TimedOut do
17
+ stub_request(:get, url).to_timeout
18
+ assert_raises GdsApi::TimedOutException do
23
19
  @client.get_json(url)
24
20
  end
25
21
  end
26
22
 
27
- def test_get_returns_nil_on_timeout
28
- url = "http://some.endpoint/some.json"
29
- stub_request(:get, url).to_raise(Timeout::Error)
30
- assert_nil @client.get_json(url)
31
- end
32
-
33
23
  def test_get_should_raise_endpoint_not_found_if_connection_refused
34
24
  url = "http://some.endpoint/some.json"
35
25
  stub_request(:get, url).to_raise(Errno::ECONNREFUSED)
@@ -46,15 +36,17 @@ class JsonClientTest < MiniTest::Spec
46
36
  end
47
37
  end
48
38
 
49
- def test_post_returns_nil_on_timeout
39
+ def test_post_requests_timeout
50
40
  url = "http://some.endpoint/some.json"
51
- stub_request(:post, url).to_raise(Timeout::Error)
52
- assert_nil @client.post_json(url, {})
41
+ stub_request(:post, url).to_timeout
42
+ assert_raises GdsApi::TimedOutException do
43
+ @client.post_json(url, {})
44
+ end
53
45
  end
54
46
 
55
47
  def test_should_fetch_and_parse_json_into_response
56
48
  url = "http://some.endpoint/some.json"
57
- stub_request(:get, url).to_return(:body => "{}",:status => 200)
49
+ stub_request(:get, url).to_return(:body => "{}", :status => 200)
58
50
  assert_equal GdsApi::Response, @client.get_json(url).class
59
51
  end
60
52
 
@@ -63,30 +55,30 @@ class JsonClientTest < MiniTest::Spec
63
55
  stub_request(:get, url).to_return(:body => "{}", :status => 404)
64
56
  assert_nil @client.get_json(url)
65
57
  end
66
-
58
+
67
59
  def empty_response
68
60
  net_http_response = stub(:body => '{}')
69
61
  GdsApi::Response.new(net_http_response)
70
62
  end
71
-
63
+
72
64
  def test_put_json_does_put_with_json_encoded_packet
73
65
  url = "http://some.endpoint/some.json"
74
- payload = {a:1}
66
+ payload = {a: 1}
75
67
  stub_request(:put, url).with(body: payload.to_json).to_return(:body => "{}", :status => 200)
76
68
  assert_equal({}, @client.put_json(url, payload).to_hash)
77
69
  end
78
-
70
+
79
71
  def test_can_convert_response_to_ostruct
80
72
  url = "http://some.endpoint/some.json"
81
- payload = {a:1}
73
+ payload = {a: 1}
82
74
  stub_request(:put, url).with(body: payload.to_json).to_return(:body => '{"a":1}', :status => 200)
83
75
  response = @client.put_json(url, payload)
84
- assert_equal(OpenStruct.new(a:1), response.to_ostruct)
76
+ assert_equal(OpenStruct.new(a: 1), response.to_ostruct)
85
77
  end
86
-
78
+
87
79
  def test_can_access_attributes_of_response_directly
88
80
  url = "http://some.endpoint/some.json"
89
- payload = {a:1}
81
+ payload = {a: 1}
90
82
  stub_request(:put, url).with(body: payload.to_json).to_return(:body => '{"a":{"b":2}}', :status => 200)
91
83
  response = @client.put_json(url, payload)
92
84
  assert_equal 2, response.a.b
@@ -95,8 +87,7 @@ class JsonClientTest < MiniTest::Spec
95
87
  def test_client_can_use_basic_auth
96
88
  client = GdsApi::JsonClient.new(basic_auth: {user: 'user', password: 'password'})
97
89
 
98
- stub_request(:put, "http://user:password@some.endpoint/some.json")
99
- .to_return(:body => '{"a":1}', :status => 200)
90
+ stub_request(:put, "http://user:password@some.endpoint/some.json").to_return(:body => '{"a":1}', :status => 200)
100
91
  response = client.put_json("http://some.endpoint/some.json", {})
101
92
  assert_equal 1, response.a
102
93
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gds-api-adapters
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.24
5
+ version: 0.0.26
6
6
  platform: ruby
7
7
  authors:
8
8
  - James Stewart
@@ -160,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
160
  requirements:
161
161
  - - ">="
162
162
  - !ruby/object:Gem::Version
163
- hash: -4557442821976738426
163
+ hash: -3364287350249021531
164
164
  segments:
165
165
  - 0
166
166
  version: "0"
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - ">="
171
171
  - !ruby/object:Gem::Version
172
- hash: -4557442821976738426
172
+ hash: -3364287350249021531
173
173
  segments:
174
174
  - 0
175
175
  version: "0"