maremma 4.7.2 → 4.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +37 -0
- data/.github/workflows/changelog.yml +36 -0
- data/.github/workflows/release.yml +46 -0
- data/CHANGELOG.md +296 -68
- data/Gemfile.lock +47 -46
- data/lib/maremma.rb +50 -44
- data/lib/maremma/version.rb +1 -1
- data/maremma.gemspec +2 -3
- data/spec/maremma_spec.rb +105 -105
- metadata +8 -5
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
maremma (4.
|
|
4
|
+
maremma (4.9.3)
|
|
5
5
|
activesupport (>= 4.2.5)
|
|
6
6
|
addressable (>= 2.3.6)
|
|
7
7
|
builder (~> 3.2, >= 3.2.2)
|
|
@@ -9,70 +9,71 @@ PATH
|
|
|
9
9
|
faraday (~> 0.17.3)
|
|
10
10
|
faraday-encoding (~> 0.0.4)
|
|
11
11
|
faraday_middleware (~> 0.14.0)
|
|
12
|
-
nokogiri (~> 1.
|
|
12
|
+
nokogiri (~> 1.11.2)
|
|
13
13
|
oj (>= 2.8.3)
|
|
14
14
|
oj_mimic_json (~> 1.0, >= 1.0.1)
|
|
15
15
|
|
|
16
16
|
GEM
|
|
17
17
|
remote: https://rubygems.org/
|
|
18
18
|
specs:
|
|
19
|
-
activesupport (6.
|
|
19
|
+
activesupport (6.1.3.2)
|
|
20
20
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
21
|
-
i18n (>=
|
|
22
|
-
minitest (
|
|
23
|
-
tzinfo (~>
|
|
24
|
-
zeitwerk (~> 2.
|
|
21
|
+
i18n (>= 1.6, < 2)
|
|
22
|
+
minitest (>= 5.1)
|
|
23
|
+
tzinfo (~> 2.0)
|
|
24
|
+
zeitwerk (~> 2.3)
|
|
25
25
|
addressable (2.7.0)
|
|
26
26
|
public_suffix (>= 2.0.2, < 5.0)
|
|
27
|
-
ast (2.4.
|
|
28
|
-
bigdecimal (2.0.0)
|
|
27
|
+
ast (2.4.2)
|
|
29
28
|
builder (3.2.4)
|
|
30
|
-
concurrent-ruby (1.1.
|
|
31
|
-
crack (0.4.
|
|
32
|
-
|
|
29
|
+
concurrent-ruby (1.1.9)
|
|
30
|
+
crack (0.4.5)
|
|
31
|
+
rexml
|
|
33
32
|
diff-lcs (1.4.4)
|
|
34
|
-
docile (1.
|
|
33
|
+
docile (1.4.0)
|
|
35
34
|
excon (0.71.1)
|
|
36
|
-
faraday (0.17.
|
|
35
|
+
faraday (0.17.4)
|
|
37
36
|
multipart-post (>= 1.2, < 3)
|
|
38
37
|
faraday-encoding (0.0.5)
|
|
39
38
|
faraday
|
|
40
39
|
faraday_middleware (0.14.0)
|
|
41
40
|
faraday (>= 0.7.4, < 1.0)
|
|
42
41
|
hashdiff (1.0.1)
|
|
43
|
-
i18n (1.8.
|
|
42
|
+
i18n (1.8.10)
|
|
44
43
|
concurrent-ruby (~> 1.0)
|
|
45
44
|
jaro_winkler (1.5.4)
|
|
46
|
-
mini_portile2 (2.
|
|
47
|
-
minitest (5.14.
|
|
45
|
+
mini_portile2 (2.5.3)
|
|
46
|
+
minitest (5.14.4)
|
|
48
47
|
multipart-post (2.1.1)
|
|
49
|
-
nokogiri (1.
|
|
50
|
-
mini_portile2 (~> 2.
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
nokogiri (1.11.7)
|
|
49
|
+
mini_portile2 (~> 2.5.0)
|
|
50
|
+
racc (~> 1.4)
|
|
51
|
+
oj (3.11.5)
|
|
53
52
|
oj_mimic_json (1.0.1)
|
|
54
|
-
parallel (1.
|
|
55
|
-
parser (
|
|
53
|
+
parallel (1.20.1)
|
|
54
|
+
parser (3.0.1.1)
|
|
56
55
|
ast (~> 2.4.1)
|
|
57
|
-
public_suffix (4.0.
|
|
56
|
+
public_suffix (4.0.6)
|
|
57
|
+
racc (1.5.2)
|
|
58
58
|
rack (2.2.3)
|
|
59
59
|
rack-test (0.8.3)
|
|
60
60
|
rack (>= 1.0, < 3)
|
|
61
61
|
rainbow (3.0.0)
|
|
62
|
-
rake (13.0.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
rspec-
|
|
66
|
-
rspec-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
rake (13.0.3)
|
|
63
|
+
rexml (3.2.5)
|
|
64
|
+
rspec (3.10.0)
|
|
65
|
+
rspec-core (~> 3.10.0)
|
|
66
|
+
rspec-expectations (~> 3.10.0)
|
|
67
|
+
rspec-mocks (~> 3.10.0)
|
|
68
|
+
rspec-core (3.10.1)
|
|
69
|
+
rspec-support (~> 3.10.0)
|
|
70
|
+
rspec-expectations (3.10.1)
|
|
70
71
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
71
|
-
rspec-support (~> 3.
|
|
72
|
-
rspec-mocks (3.
|
|
72
|
+
rspec-support (~> 3.10.0)
|
|
73
|
+
rspec-mocks (3.10.2)
|
|
73
74
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
74
|
-
rspec-support (~> 3.
|
|
75
|
-
rspec-support (3.
|
|
75
|
+
rspec-support (~> 3.10.0)
|
|
76
|
+
rspec-support (3.10.2)
|
|
76
77
|
rubocop (0.77.0)
|
|
77
78
|
jaro_winkler (~> 1.5.1)
|
|
78
79
|
parallel (~> 1.10)
|
|
@@ -82,22 +83,22 @@ GEM
|
|
|
82
83
|
unicode-display_width (>= 1.4.0, < 1.7)
|
|
83
84
|
rubocop-performance (1.6.1)
|
|
84
85
|
rubocop (>= 0.71.0)
|
|
85
|
-
ruby-progressbar (1.
|
|
86
|
-
|
|
87
|
-
simplecov (0.19.0)
|
|
86
|
+
ruby-progressbar (1.11.0)
|
|
87
|
+
simplecov (0.21.2)
|
|
88
88
|
docile (~> 1.1)
|
|
89
89
|
simplecov-html (~> 0.11)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
simplecov_json_formatter (~> 0.1)
|
|
91
|
+
simplecov-html (0.12.3)
|
|
92
|
+
simplecov_json_formatter (0.1.3)
|
|
93
|
+
tzinfo (2.0.4)
|
|
94
|
+
concurrent-ruby (~> 1.0)
|
|
94
95
|
unicode-display_width (1.6.1)
|
|
95
96
|
vcr (3.0.3)
|
|
96
|
-
webmock (3.
|
|
97
|
+
webmock (3.13.0)
|
|
97
98
|
addressable (>= 2.3.6)
|
|
98
99
|
crack (>= 0.3.2)
|
|
99
100
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
100
|
-
zeitwerk (2.4.
|
|
101
|
+
zeitwerk (2.4.2)
|
|
101
102
|
|
|
102
103
|
PLATFORMS
|
|
103
104
|
ruby
|
|
@@ -115,4 +116,4 @@ DEPENDENCIES
|
|
|
115
116
|
webmock (~> 3.0, >= 3.0.1)
|
|
116
117
|
|
|
117
118
|
BUNDLED WITH
|
|
118
|
-
2.
|
|
119
|
+
2.2.19
|
data/lib/maremma.rb
CHANGED
|
@@ -14,7 +14,7 @@ require "maremma/version"
|
|
|
14
14
|
|
|
15
15
|
module Maremma
|
|
16
16
|
DEFAULT_TIMEOUT = 60
|
|
17
|
-
ALLOWED_CONTENT_TAGS = %w(strong em b i code pre sub sup br)
|
|
17
|
+
ALLOWED_CONTENT_TAGS = %w(strong em b i code pre sub sup br).freeze
|
|
18
18
|
NETWORKABLE_EXCEPTIONS = [Faraday::ClientError,
|
|
19
19
|
Faraday::TimeoutError,
|
|
20
20
|
Faraday::ResourceNotFound,
|
|
@@ -24,35 +24,35 @@ module Maremma
|
|
|
24
24
|
Encoding::UndefinedConversionError,
|
|
25
25
|
ArgumentError,
|
|
26
26
|
NoMethodError,
|
|
27
|
-
TypeError]
|
|
27
|
+
TypeError].freeze
|
|
28
28
|
|
|
29
29
|
# ActiveSupport::XmlMini.backend = "Nokogiri"
|
|
30
30
|
|
|
31
|
-
def self.post(url, options={})
|
|
32
|
-
|
|
31
|
+
def self.post(url, options = {})
|
|
32
|
+
method(url, options.merge(method: "post"))
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
def self.put(url, options={})
|
|
36
|
-
|
|
35
|
+
def self.put(url, options = {})
|
|
36
|
+
method(url, options.merge(method: "put"))
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
def self.patch(url, options={})
|
|
40
|
-
|
|
39
|
+
def self.patch(url, options = {})
|
|
40
|
+
method(url, options.merge(method: "patch"))
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
def self.delete(url, options={})
|
|
44
|
-
|
|
43
|
+
def self.delete(url, options = {})
|
|
44
|
+
method(url, options.merge(method: "delete"))
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def self.get(url, options={})
|
|
48
|
-
|
|
47
|
+
def self.get(url, options = {})
|
|
48
|
+
method(url, options.merge(method: "get"))
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def self.head(url, options={})
|
|
52
|
-
|
|
51
|
+
def self.head(url, options = {})
|
|
52
|
+
method(url, options.merge(method: "head"))
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
def self.method(url, options={})
|
|
55
|
+
def self.method(url, options = {})
|
|
56
56
|
is_valid_url?(url)
|
|
57
57
|
|
|
58
58
|
# normalize url
|
|
@@ -66,23 +66,29 @@ module Maremma
|
|
|
66
66
|
conn.options[:timeout] = options[:timeout] || DEFAULT_TIMEOUT
|
|
67
67
|
|
|
68
68
|
response = case options[:method]
|
|
69
|
-
when "get"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
69
|
+
when "get"
|
|
70
|
+
conn.get url, {}, options[:headers] do |request|
|
|
71
|
+
request.headers["Host"] = URI.parse(url.to_s).host
|
|
72
|
+
end
|
|
73
|
+
when "post"
|
|
74
|
+
conn.post url, {}, options[:headers] do |request|
|
|
75
|
+
request.body = options[:data]
|
|
76
|
+
request.headers["Host"] = URI.parse(url.to_s).host
|
|
77
|
+
end
|
|
78
|
+
when "put"
|
|
79
|
+
conn.put url, {}, options[:headers] do |request|
|
|
80
|
+
request.body = options[:data]
|
|
81
|
+
request.headers["Host"] = URI.parse(url.to_s).host
|
|
82
|
+
end
|
|
83
|
+
when "patch"
|
|
84
|
+
conn.patch url, {}, options[:headers] do |request|
|
|
85
|
+
request.body = options[:data]
|
|
86
|
+
request.headers["Host"] = URI.parse(url.to_s).host
|
|
87
|
+
end
|
|
88
|
+
when "delete"
|
|
89
|
+
conn.delete url, {}, options[:headers]
|
|
90
|
+
when "head"
|
|
91
|
+
conn.head url, {}, options[:headers]
|
|
86
92
|
end
|
|
87
93
|
|
|
88
94
|
# return error if we are close to the rate limit, if supported in headers
|
|
@@ -102,8 +108,8 @@ module Maremma
|
|
|
102
108
|
headers: response.headers,
|
|
103
109
|
status: response.status,
|
|
104
110
|
url: response.env[:url].to_s)
|
|
105
|
-
rescue *NETWORKABLE_EXCEPTIONS =>
|
|
106
|
-
error_response = rescue_faraday_error(
|
|
111
|
+
rescue *NETWORKABLE_EXCEPTIONS => e
|
|
112
|
+
error_response = rescue_faraday_error(e, response)
|
|
107
113
|
OpenStruct.new(body: error_response,
|
|
108
114
|
status: error_response.fetch("errors", {}).first.fetch("status", 400),
|
|
109
115
|
headers: response ? response.headers : nil,
|
|
@@ -137,7 +143,7 @@ module Maremma
|
|
|
137
143
|
raise TypeError, "Invalid URL: #{url}" unless %w(http https).include?(parsed.scheme)
|
|
138
144
|
end
|
|
139
145
|
|
|
140
|
-
def self.set_request_headers(
|
|
146
|
+
def self.set_request_headers(_url, options = {})
|
|
141
147
|
header_options = { "html" => "text/html;charset=UTF-8",
|
|
142
148
|
"xml" => "application/xml;charset=UTF-8",
|
|
143
149
|
"json" => "application/json;charset=UTF-8" }
|
|
@@ -148,7 +154,7 @@ module Maremma
|
|
|
148
154
|
headers["User-Agent"] = ENV["USER_AGENT"] || "Mozilla/5.0 (compatible; Maremma/#{Maremma::VERSION}; +https://github.com/datacite/maremma)"
|
|
149
155
|
|
|
150
156
|
# set host, needed for some services behind proxy
|
|
151
|
-
#headers["Host"] = URI.parse(url).host #if options[:host]
|
|
157
|
+
# headers["Host"] = URI.parse(url).host #if options[:host]
|
|
152
158
|
|
|
153
159
|
# set Content-Type
|
|
154
160
|
headers["Content-type"] = header_options.fetch(options[:content_type], options[:content_type]) if options[:content_type].present?
|
|
@@ -179,12 +185,12 @@ module Maremma
|
|
|
179
185
|
if error.is_a?(Faraday::ResourceNotFound)
|
|
180
186
|
{ "errors" => [{ "status" => 404, "title" => "Not found" }] }
|
|
181
187
|
elsif error.message == "the server responded with status 401" || error.try(:response) && error.response[:status] == 401
|
|
182
|
-
{ "errors" => [{ "status" => 401, "title" =>"Unauthorized" }] }
|
|
188
|
+
{ "errors" => [{ "status" => 401, "title" => "Unauthorized" }] }
|
|
183
189
|
elsif error.is_a?(Faraday::ConnectionFailed)
|
|
184
190
|
{ "errors" => [{ "status" => 403, "title" => parse_error_response(error.message) }] }
|
|
185
191
|
|
|
186
192
|
elsif error.is_a?(Faraday::TimeoutError) || (error.try(:response) && error.response[:status] == 408)
|
|
187
|
-
{ "errors" => [{ "status" => 408, "title" =>"Request timeout" }] }
|
|
193
|
+
{ "errors" => [{ "status" => 408, "title" => "Request timeout" }] }
|
|
188
194
|
else
|
|
189
195
|
status = response ? response.status : 400
|
|
190
196
|
title = response ? parse_error_response(response.body) : parse_error_response(error.message)
|
|
@@ -192,7 +198,7 @@ module Maremma
|
|
|
192
198
|
end
|
|
193
199
|
end
|
|
194
200
|
|
|
195
|
-
def self.parse_success_response(string, options={})
|
|
201
|
+
def self.parse_success_response(string, options = {})
|
|
196
202
|
return nil if options[:method] == "head"
|
|
197
203
|
|
|
198
204
|
string = parse_response(string, options)
|
|
@@ -222,8 +228,10 @@ module Maremma
|
|
|
222
228
|
end
|
|
223
229
|
end
|
|
224
230
|
|
|
225
|
-
def self.parse_response(string, options={})
|
|
226
|
-
string = string.dup.
|
|
231
|
+
def self.parse_response(string, options = {})
|
|
232
|
+
string = string.dup.encode(Encoding.find("UTF-8"), invalid: :replace,
|
|
233
|
+
undef: :replace,
|
|
234
|
+
replace: "?")
|
|
227
235
|
return string if options[:raw]
|
|
228
236
|
|
|
229
237
|
from_json(string) || from_xml(string) || from_string(string)
|
|
@@ -239,15 +247,13 @@ module Maremma
|
|
|
239
247
|
# keep XML attributes, http://stackoverflow.com/a/10794044
|
|
240
248
|
# escape tags allowed in content
|
|
241
249
|
def self.from_xml(string)
|
|
242
|
-
ALLOWED_CONTENT_TAGS.each do |tag|
|
|
250
|
+
ALLOWED_CONTENT_TAGS.each do |tag|
|
|
243
251
|
string.gsub!("<#{tag}>", "<#{tag}>")
|
|
244
252
|
string.gsub!("</#{tag}>", "</#{tag}>")
|
|
245
253
|
end
|
|
246
254
|
|
|
247
255
|
if Nokogiri::XML(string, nil, "UTF-8").errors.empty?
|
|
248
256
|
Hash.from_xml(string)
|
|
249
|
-
else
|
|
250
|
-
nil
|
|
251
257
|
end
|
|
252
258
|
end
|
|
253
259
|
|
data/lib/maremma/version.rb
CHANGED
data/maremma.gemspec
CHANGED
|
@@ -22,10 +22,10 @@ Gem::Specification.new do |s|
|
|
|
22
22
|
s.add_dependency "addressable", ">= 2.3.6"
|
|
23
23
|
s.add_dependency "builder", "~> 3.2", ">= 3.2.2"
|
|
24
24
|
s.add_dependency "excon", "~> 0.71.0"
|
|
25
|
-
s.add_dependency
|
|
25
|
+
s.add_dependency "faraday", "~> 0.17.3"
|
|
26
26
|
s.add_dependency "faraday-encoding", "~> 0.0.4"
|
|
27
27
|
s.add_dependency "faraday_middleware", "~> 0.14.0"
|
|
28
|
-
s.add_dependency "nokogiri", "~> 1.
|
|
28
|
+
s.add_dependency "nokogiri", "~> 1.11.2"
|
|
29
29
|
s.add_dependency "oj", ">= 2.8.3"
|
|
30
30
|
s.add_dependency "oj_mimic_json", "~> 1.0", ">= 1.0.1"
|
|
31
31
|
s.add_development_dependency "bundler", "~> 2.0"
|
|
@@ -37,5 +37,4 @@ Gem::Specification.new do |s|
|
|
|
37
37
|
s.add_development_dependency "simplecov"
|
|
38
38
|
s.add_development_dependency "vcr", "~> 3.0", ">= 3.0.3"
|
|
39
39
|
s.add_development_dependency "webmock", "~> 3.0", ">= 3.0.1"
|
|
40
|
-
|
|
41
40
|
end
|
data/spec/maremma_spec.rb
CHANGED
|
@@ -11,26 +11,26 @@ describe Maremma do
|
|
|
11
11
|
|
|
12
12
|
context "get" do
|
|
13
13
|
it "get json" do
|
|
14
|
-
stub = stub_request(:get, url).to_return(:
|
|
14
|
+
stub = stub_request(:get, url).to_return(body: data.to_json, status: 200, headers: { "Content-Type" => "application/json" })
|
|
15
15
|
response = subject.get(url)
|
|
16
16
|
expect(response.body).to eq("data" => data)
|
|
17
|
-
expect(response.headers).to eq("Content-Type"=>"application/json")
|
|
17
|
+
expect(response.headers).to eq("Content-Type" => "application/json")
|
|
18
18
|
expect(stub).to have_been_requested
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
it "get xml" do
|
|
22
|
-
stub = stub_request(:get, url).to_return(:
|
|
22
|
+
stub = stub_request(:get, url).to_return(body: data.to_xml, status: 200, headers: { "Content-Type" => "application/xml" })
|
|
23
23
|
response = subject.get(url, accept: "xml")
|
|
24
|
-
expect(response.body).to eq("data"=>data)
|
|
25
|
-
expect(response.headers).to eq("Content-Type"=>"application/xml")
|
|
24
|
+
expect(response.body).to eq("data" => data)
|
|
25
|
+
expect(response.headers).to eq("Content-Type" => "application/xml")
|
|
26
26
|
expect(stub).to have_been_requested
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
it "get html" do
|
|
30
|
-
stub = stub_request(:get, url).to_return(:
|
|
30
|
+
stub = stub_request(:get, url).to_return(body: data.to_s, status: 200, headers: { "Content-Type" => "text/html" })
|
|
31
31
|
response = subject.get(url, accept: "html")
|
|
32
32
|
expect(response.body).to eq("data" => data.to_s)
|
|
33
|
-
expect(response.headers).to eq("Content-Type"=>"text/html")
|
|
33
|
+
expect(response.headers).to eq("Content-Type" => "text/html")
|
|
34
34
|
expect(stub).to have_been_requested
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -53,28 +53,28 @@ describe Maremma do
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it "get json with meta hash" do
|
|
56
|
-
data = { "data" => { "name" => "Jack" }, "meta" => { "count" => 12 }}
|
|
57
|
-
stub = stub_request(:get, url).to_return(:
|
|
56
|
+
data = { "data" => { "name" => "Jack" }, "meta" => { "count" => 12 } }
|
|
57
|
+
stub = stub_request(:get, url).to_return(body: data.to_json, status: 200, headers: { "Content-Type" => "application/json" })
|
|
58
58
|
response = subject.get(url)
|
|
59
|
-
expect(response.body).to eq("data"=>{"name"=>"Jack"}, "meta"=>{"count"=>12})
|
|
60
|
-
expect(response.headers).to eq("Content-Type"=>"application/json")
|
|
59
|
+
expect(response.body).to eq("data" => { "name" => "Jack" }, "meta" => { "count" => 12 })
|
|
60
|
+
expect(response.headers).to eq("Content-Type" => "application/json")
|
|
61
61
|
expect(stub).to have_been_requested
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
it "get json with umlaut" do
|
|
65
65
|
url = "https://api.ror.org/organizations?page=1&query=münster"
|
|
66
|
-
stub = stub_request(:get, url).to_return(:
|
|
66
|
+
stub = stub_request(:get, url).to_return(body: data.to_json, status: 200, headers: { "Content-Type" => "application/json" })
|
|
67
67
|
response = subject.get(url)
|
|
68
68
|
expect(response.body).to eq("data" => data)
|
|
69
|
-
expect(response.headers).to eq("Content-Type"=>"application/json")
|
|
69
|
+
expect(response.headers).to eq("Content-Type" => "application/json")
|
|
70
70
|
expect(stub).to have_been_requested
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
it "get xml raw" do
|
|
74
|
-
stub = stub_request(:get, url).to_return(:
|
|
74
|
+
stub = stub_request(:get, url).to_return(body: data.to_xml, status: 200, headers: { "Content-Type" => "application/xml" })
|
|
75
75
|
response = subject.get(url, accept: "xml", raw: true)
|
|
76
|
-
expect(response.body).to eq("data"=>data.to_xml)
|
|
77
|
-
expect(response.headers).to eq("Content-Type"=>"application/xml")
|
|
76
|
+
expect(response.body).to eq("data" => data.to_xml)
|
|
77
|
+
expect(response.headers).to eq("Content-Type" => "application/xml")
|
|
78
78
|
expect(stub).to have_been_requested
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -96,23 +96,23 @@ describe Maremma do
|
|
|
96
96
|
|
|
97
97
|
context "head" do
|
|
98
98
|
it "head html" do
|
|
99
|
-
stub = stub_request(:head, url).to_return(:
|
|
99
|
+
stub = stub_request(:head, url).to_return(status: 200, headers: { "Content-Type" => "text/html" })
|
|
100
100
|
response = subject.head(url, accept: "html")
|
|
101
101
|
expect(response.body).to be_nil
|
|
102
|
-
expect(response.headers).to eq("Content-Type"=>"text/html")
|
|
102
|
+
expect(response.headers).to eq("Content-Type" => "text/html")
|
|
103
103
|
expect(stub).to have_been_requested
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
context "post" do
|
|
108
108
|
it "post json" do
|
|
109
|
-
stub = stub_request(:post, url).with(:
|
|
109
|
+
stub = stub_request(:post, url).with(body: post_data.to_json).to_return(body: data.to_json, status: 200, headers: { "Content-Type" => "application/json" })
|
|
110
110
|
subject.post(url, content_type: "json", data: post_data.to_json) { |response| expect(response.body).to eq(2) }
|
|
111
111
|
expect(stub).to have_been_requested
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
it "post xml" do
|
|
115
|
-
stub = stub_request(:post, url).with(:
|
|
115
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_return(body: data.to_xml, status: 200, headers: { "Content-Type" => "text/html" })
|
|
116
116
|
subject.post(url, content_type: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.body.to_s)["hash"]).to eq(data) }
|
|
117
117
|
expect(stub).to have_been_requested
|
|
118
118
|
end
|
|
@@ -120,13 +120,13 @@ describe Maremma do
|
|
|
120
120
|
|
|
121
121
|
context "put" do
|
|
122
122
|
it "put json" do
|
|
123
|
-
stub = stub_request(:put, url).with(:
|
|
123
|
+
stub = stub_request(:put, url).with(body: post_data.to_json).to_return(body: data.to_json, status: 200, headers: { "Content-Type" => "application/json" })
|
|
124
124
|
subject.put(url, content_type: "json", data: post_data.to_json) { |response| expect(JSON.parse(response.body.to_s)).to eq(data) }
|
|
125
125
|
expect(stub).to have_been_requested
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
it "put xml" do
|
|
129
|
-
stub = stub_request(:put, url).with(:
|
|
129
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_return(body: data.to_xml, status: 200, headers: { "Content-Type" => "text/html" })
|
|
130
130
|
subject.put(url, content_type: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.body.to_s)["hash"]).to eq(data) }
|
|
131
131
|
expect(stub).to have_been_requested
|
|
132
132
|
end
|
|
@@ -134,13 +134,13 @@ describe Maremma do
|
|
|
134
134
|
|
|
135
135
|
context "patch" do
|
|
136
136
|
it "patch json" do
|
|
137
|
-
stub = stub_request(:patch, url).with(:
|
|
137
|
+
stub = stub_request(:patch, url).with(body: post_data.to_json).to_return(body: data.to_json, status: 200, headers: { "Content-Type" => "application/json" })
|
|
138
138
|
subject.patch(url, content_type: "json", data: post_data.to_json) { |response| expect(JSON.parse(response.body.to_s)).to eq(data) }
|
|
139
139
|
expect(stub).to have_been_requested
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
it "patch xml" do
|
|
143
|
-
stub = stub_request(:patch, url).with(:
|
|
143
|
+
stub = stub_request(:patch, url).with(body: post_data.to_xml).to_return(body: data.to_xml, status: 200, headers: { "Content-Type" => "text/html" })
|
|
144
144
|
subject.patch(url, content_type: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.body.to_s)["hash"]).to eq(data) }
|
|
145
145
|
expect(stub).to have_been_requested
|
|
146
146
|
end
|
|
@@ -148,125 +148,125 @@ describe Maremma do
|
|
|
148
148
|
|
|
149
149
|
context "empty response" do
|
|
150
150
|
it "get json" do
|
|
151
|
-
stub = stub_request(:get, url).to_return(:
|
|
151
|
+
stub = stub_request(:get, url).to_return(body: nil, status: 200, headers: { "Content-Type" => "application/json" })
|
|
152
152
|
response = subject.get(url)
|
|
153
|
-
expect(response.body).to eq("data"=>nil)
|
|
154
|
-
expect(response.headers).to eq("Content-Type"=>"application/json")
|
|
153
|
+
expect(response.body).to eq("data" => nil)
|
|
154
|
+
expect(response.headers).to eq("Content-Type" => "application/json")
|
|
155
155
|
expect(stub).to have_been_requested
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
it "get xml" do
|
|
159
|
-
stub = stub_request(:get, url).to_return(:
|
|
159
|
+
stub = stub_request(:get, url).to_return(body: nil, status: 200, headers: { "Content-Type" => "application/xml" })
|
|
160
160
|
response = subject.get(url, accept: "xml")
|
|
161
|
-
expect(response.body).to eq("data"=>nil)
|
|
162
|
-
expect(response.headers).to eq("Content-Type"=>"application/xml")
|
|
161
|
+
expect(response.body).to eq("data" => nil)
|
|
162
|
+
expect(response.headers).to eq("Content-Type" => "application/xml")
|
|
163
163
|
expect(stub).to have_been_requested
|
|
164
164
|
end
|
|
165
165
|
|
|
166
166
|
it "get html" do
|
|
167
|
-
stub = stub_request(:get, url).to_return(:
|
|
167
|
+
stub = stub_request(:get, url).to_return(body: nil, status: 200, headers: { "Content-Type" => "text/html" })
|
|
168
168
|
response = subject.get(url, accept: "html")
|
|
169
169
|
expect(response.body).to eq("data" => nil)
|
|
170
|
-
expect(response.headers).to eq("Content-Type"=>"text/html")
|
|
170
|
+
expect(response.headers).to eq("Content-Type" => "text/html")
|
|
171
171
|
expect(stub).to have_been_requested
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
it "post xml" do
|
|
175
|
-
stub = stub_request(:post, url).with(:
|
|
175
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_return(body: nil, status: 200, headers: { "Content-Type" => "application/xml" })
|
|
176
176
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to eq("data" => nil) }
|
|
177
177
|
expect(stub).to have_been_requested
|
|
178
178
|
end
|
|
179
179
|
|
|
180
180
|
it "put xml" do
|
|
181
|
-
stub = stub_request(:put, url).with(:
|
|
181
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_return(body: nil, status: 200, headers: { "Content-Type" => "application/xml" })
|
|
182
182
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to eq("data" => nil) }
|
|
183
183
|
expect(stub).to have_been_requested
|
|
184
184
|
end
|
|
185
185
|
end
|
|
186
186
|
|
|
187
187
|
context "not found" do
|
|
188
|
-
let(:error) { { "errors" => [{ "status" => 404, "title" => "Not found" }]} }
|
|
188
|
+
let(:error) { { "errors" => [{ "status" => 404, "title" => "Not found" }] } }
|
|
189
189
|
|
|
190
190
|
it "get json" do
|
|
191
|
-
stub = stub_request(:get, url).to_return(:
|
|
191
|
+
stub = stub_request(:get, url).to_return(body: error.to_json, status: [404], headers: { "Content-Type" => "application/json" })
|
|
192
192
|
response = subject.get(url, accept: "json")
|
|
193
193
|
expect(response.body).to eq(error)
|
|
194
194
|
expect(stub).to have_been_requested
|
|
195
195
|
end
|
|
196
196
|
|
|
197
197
|
it "get xml" do
|
|
198
|
-
stub = stub_request(:get, url).to_return(:
|
|
198
|
+
stub = stub_request(:get, url).to_return(body: error.to_xml, status: [404], headers: { "Content-Type" => "application/xml" })
|
|
199
199
|
response = subject.get(url, accept: "xml")
|
|
200
200
|
expect(response.body).to eq(error)
|
|
201
201
|
expect(stub).to have_been_requested
|
|
202
202
|
end
|
|
203
203
|
|
|
204
204
|
it "get html" do
|
|
205
|
-
stub = stub_request(:get, url).to_return(:
|
|
205
|
+
stub = stub_request(:get, url).to_return(body: error.to_s, status: [404], headers: { "Content-Type" => "text/html" })
|
|
206
206
|
response = subject.get(url, accept: "html")
|
|
207
207
|
expect(response.body).to eq(error)
|
|
208
208
|
expect(stub).to have_been_requested
|
|
209
209
|
end
|
|
210
210
|
|
|
211
211
|
it "head html" do
|
|
212
|
-
stub = stub_request(:head, url).to_return(:
|
|
212
|
+
stub = stub_request(:head, url).to_return(body: error.to_s, status: [404], headers: { "Content-Type" => "text/html" })
|
|
213
213
|
response = subject.head(url, accept: "html")
|
|
214
214
|
expect(response.status).to eq(404)
|
|
215
215
|
expect(stub).to have_been_requested
|
|
216
216
|
end
|
|
217
217
|
|
|
218
218
|
it "post xml" do
|
|
219
|
-
stub = stub_request(:post, url).with(:
|
|
219
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_return(body: error.to_xml, status: [404], headers: { "Content-Type" => "application/xml" })
|
|
220
220
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.to_s)["hash"]).to eq(error) }
|
|
221
221
|
expect(stub).to have_been_requested
|
|
222
222
|
end
|
|
223
223
|
|
|
224
224
|
it "put xml" do
|
|
225
|
-
stub = stub_request(:put, url).with(:
|
|
225
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_return(body: error.to_xml, status: [404], headers: { "Content-Type" => "application/xml" })
|
|
226
226
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.to_s)["hash"]).to eq(error) }
|
|
227
227
|
expect(stub).to have_been_requested
|
|
228
228
|
end
|
|
229
229
|
end
|
|
230
230
|
|
|
231
231
|
context "method not allowed" do
|
|
232
|
-
let(:error) { { "errors" => [{ "status" => 405, "title" => "Method not allowed" }]} }
|
|
232
|
+
let(:error) { { "errors" => [{ "status" => 405, "title" => "Method not allowed" }] } }
|
|
233
233
|
|
|
234
234
|
it "get json" do
|
|
235
|
-
stub = stub_request(:get, url).to_return(:
|
|
235
|
+
stub = stub_request(:get, url).to_return(body: error.to_json, status: [405], headers: { "Content-Type" => "application/json" })
|
|
236
236
|
response = subject.get(url, accept: "json")
|
|
237
237
|
expect(response.body).to eq(error)
|
|
238
238
|
expect(stub).to have_been_requested
|
|
239
239
|
end
|
|
240
240
|
|
|
241
241
|
it "get xml" do
|
|
242
|
-
stub = stub_request(:get, url).to_return(:
|
|
242
|
+
stub = stub_request(:get, url).to_return(body: error.to_xml, status: [405], headers: { "Content-Type" => "application/xml" })
|
|
243
243
|
response = subject.get(url, accept: "xml")
|
|
244
244
|
expect(response.body).to eq(error)
|
|
245
245
|
expect(stub).to have_been_requested
|
|
246
246
|
end
|
|
247
247
|
|
|
248
248
|
it "get html" do
|
|
249
|
-
stub = stub_request(:get, url).to_return(:
|
|
249
|
+
stub = stub_request(:get, url).to_return(body: error.dig("errors", 0, "title"), status: [405], headers: { "Content-Type" => "text/html" })
|
|
250
250
|
response = subject.get(url, accept: "html")
|
|
251
251
|
expect(response.body).to eq(error)
|
|
252
252
|
expect(stub).to have_been_requested
|
|
253
253
|
end
|
|
254
254
|
|
|
255
255
|
it "head html" do
|
|
256
|
-
stub = stub_request(:head, url).to_return(:
|
|
256
|
+
stub = stub_request(:head, url).to_return(body: error.to_s, status: [405], headers: { "Content-Type" => "text/html" })
|
|
257
257
|
response = subject.head(url, accept: "html")
|
|
258
258
|
expect(response.status).to eq(405)
|
|
259
259
|
expect(stub).to have_been_requested
|
|
260
260
|
end
|
|
261
261
|
|
|
262
262
|
it "post xml" do
|
|
263
|
-
stub = stub_request(:post, url).with(:
|
|
263
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_return(body: error.to_xml, status: [405], headers: { "Content-Type" => "application/xml" })
|
|
264
264
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.to_s)["hash"]).to eq(error) }
|
|
265
265
|
expect(stub).to have_been_requested
|
|
266
266
|
end
|
|
267
267
|
|
|
268
268
|
it "put xml" do
|
|
269
|
-
stub = stub_request(:put, url).with(:
|
|
269
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_return(body: error.to_xml, status: [405], headers: { "Content-Type" => "application/xml" })
|
|
270
270
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(Hash.from_xml(response.to_s)["hash"]).to eq(error) }
|
|
271
271
|
expect(stub).to have_been_requested
|
|
272
272
|
end
|
|
@@ -274,41 +274,41 @@ describe Maremma do
|
|
|
274
274
|
|
|
275
275
|
context "request timeout" do
|
|
276
276
|
it "get json" do
|
|
277
|
-
stub = stub_request(:get, url).to_return(:
|
|
277
|
+
stub = stub_request(:get, url).to_return(status: [408])
|
|
278
278
|
response = subject.get(url)
|
|
279
|
-
expect(response.body).to eq("errors"=>[{"status"=>408, "title"=>"Request timeout"}])
|
|
279
|
+
expect(response.body).to eq("errors" => [{ "status" => 408, "title" => "Request timeout" }])
|
|
280
280
|
expect(stub).to have_been_requested
|
|
281
281
|
end
|
|
282
282
|
|
|
283
283
|
it "get xml" do
|
|
284
|
-
stub = stub_request(:get, url).to_return(:
|
|
284
|
+
stub = stub_request(:get, url).to_return(status: [408])
|
|
285
285
|
response = subject.get(url, accept: "xml")
|
|
286
|
-
expect(response.body).to eq("errors"=>[{"status"=>408, "title"=>"Request timeout"}])
|
|
286
|
+
expect(response.body).to eq("errors" => [{ "status" => 408, "title" => "Request timeout" }])
|
|
287
287
|
expect(stub).to have_been_requested
|
|
288
288
|
end
|
|
289
289
|
|
|
290
290
|
it "get html" do
|
|
291
|
-
stub = stub_request(:get, url).to_return(:
|
|
291
|
+
stub = stub_request(:get, url).to_return(status: [408])
|
|
292
292
|
response = subject.get(url, accept: "html")
|
|
293
|
-
expect(response.body).to eq("errors"=>[{"status"=>408, "title"=>"Request timeout"}])
|
|
293
|
+
expect(response.body).to eq("errors" => [{ "status" => 408, "title" => "Request timeout" }])
|
|
294
294
|
expect(stub).to have_been_requested
|
|
295
295
|
end
|
|
296
296
|
|
|
297
297
|
it "head html" do
|
|
298
|
-
stub = stub_request(:head, url).to_return(:
|
|
298
|
+
stub = stub_request(:head, url).to_return(status: [408])
|
|
299
299
|
response = subject.head(url, accept: "html")
|
|
300
300
|
expect(response.status).to eq(408)
|
|
301
301
|
expect(stub).to have_been_requested
|
|
302
302
|
end
|
|
303
303
|
|
|
304
304
|
it "post xml" do
|
|
305
|
-
stub = stub_request(:post, url).with(:
|
|
305
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_return(status: [408])
|
|
306
306
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
307
307
|
expect(stub).to have_been_requested
|
|
308
308
|
end
|
|
309
309
|
|
|
310
310
|
it "put xml" do
|
|
311
|
-
stub = stub_request(:put, url).with(:
|
|
311
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_return(status: [408])
|
|
312
312
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
313
313
|
expect(stub).to have_been_requested
|
|
314
314
|
end
|
|
@@ -316,10 +316,10 @@ describe Maremma do
|
|
|
316
316
|
|
|
317
317
|
context "delete" do
|
|
318
318
|
it "delete" do
|
|
319
|
-
stub = stub_request(:delete, url).to_return(:
|
|
319
|
+
stub = stub_request(:delete, url).to_return(status: 204, headers: { "Content-Type" => "text/html" })
|
|
320
320
|
response = subject.delete(url)
|
|
321
|
-
expect(response.body).to eq("data"=>nil)
|
|
322
|
-
expect(response.headers).to eq("Content-Type"=>"text/html")
|
|
321
|
+
expect(response.body).to eq("data" => nil)
|
|
322
|
+
expect(response.headers).to eq("Content-Type" => "text/html")
|
|
323
323
|
expect(response.status).to eq(204)
|
|
324
324
|
expect(stub).to have_been_requested
|
|
325
325
|
end
|
|
@@ -329,32 +329,32 @@ describe Maremma do
|
|
|
329
329
|
it "get json" do
|
|
330
330
|
stub = stub_request(:get, url).to_raise(Faraday::ConnectionFailed.new("Connection refused - connect(2)"))
|
|
331
331
|
response = subject.get(url)
|
|
332
|
-
expect(response.body).to eq("errors"=>[{"status"=>403, "title"=>"Connection refused - connect(2)"}])
|
|
332
|
+
expect(response.body).to eq("errors" => [{ "status" => 403, "title" => "Connection refused - connect(2)" }])
|
|
333
333
|
expect(stub).to have_been_requested
|
|
334
334
|
end
|
|
335
335
|
|
|
336
336
|
it "get xml" do
|
|
337
337
|
stub = stub_request(:get, url).to_raise(Faraday::ConnectionFailed.new("Connection refused - connect(2)"))
|
|
338
338
|
response = subject.get(url, accept: "xml")
|
|
339
|
-
expect(response.body).to eq("errors"=>[{"status"=>403, "title"=>"Connection refused - connect(2)"}])
|
|
339
|
+
expect(response.body).to eq("errors" => [{ "status" => 403, "title" => "Connection refused - connect(2)" }])
|
|
340
340
|
expect(stub).to have_been_requested
|
|
341
341
|
end
|
|
342
342
|
|
|
343
343
|
it "get html" do
|
|
344
344
|
stub = stub_request(:get, url).to_raise(Faraday::ConnectionFailed.new("Connection refused - connect(2)"))
|
|
345
345
|
response = subject.get(url, accept: "html")
|
|
346
|
-
expect(response.body).to eq("errors"=>[{"status"=>403, "title"=>"Connection refused - connect(2)"}])
|
|
346
|
+
expect(response.body).to eq("errors" => [{ "status" => 403, "title" => "Connection refused - connect(2)" }])
|
|
347
347
|
expect(stub).to have_been_requested
|
|
348
348
|
end
|
|
349
349
|
|
|
350
350
|
it "post xml" do
|
|
351
|
-
stub = stub_request(:post, url).with(:
|
|
351
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_raise(Faraday::ConnectionFailed.new("Connection refused - connect(2)"))
|
|
352
352
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
353
353
|
expect(stub).to have_been_requested
|
|
354
354
|
end
|
|
355
355
|
|
|
356
356
|
it "put xml" do
|
|
357
|
-
stub = stub_request(:put, url).with(:
|
|
357
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_raise(Faraday::ConnectionFailed.new("Connection refused - connect(2)"))
|
|
358
358
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
359
359
|
expect(stub).to have_been_requested
|
|
360
360
|
end
|
|
@@ -364,38 +364,38 @@ describe Maremma do
|
|
|
364
364
|
it "get json" do
|
|
365
365
|
stub = stub_request(:get, url).to_raise(Faraday::ClientError.new("the server responded with status 401"))
|
|
366
366
|
response = subject.get(url)
|
|
367
|
-
expect(response.body).to eq("errors"=>[{"status"=>401, "title"=>"Unauthorized"}])
|
|
367
|
+
expect(response.body).to eq("errors" => [{ "status" => 401, "title" => "Unauthorized" }])
|
|
368
368
|
expect(stub).to have_been_requested
|
|
369
369
|
end
|
|
370
370
|
|
|
371
371
|
it "get xml" do
|
|
372
372
|
stub = stub_request(:get, url).to_raise(Faraday::ClientError.new("the server responded with status 401"))
|
|
373
373
|
response = subject.get(url, accept: "xml")
|
|
374
|
-
expect(response.body).to eq("errors"=>[{"status"=>401, "title"=>"Unauthorized"}])
|
|
374
|
+
expect(response.body).to eq("errors" => [{ "status" => 401, "title" => "Unauthorized" }])
|
|
375
375
|
expect(stub).to have_been_requested
|
|
376
376
|
end
|
|
377
377
|
|
|
378
378
|
it "get html" do
|
|
379
379
|
stub = stub_request(:get, url).to_raise(Faraday::ClientError.new("the server responded with status 401"))
|
|
380
380
|
response = subject.get(url, accept: "html")
|
|
381
|
-
expect(response.body).to eq("errors"=>[{"status"=>401, "title"=>"Unauthorized"}])
|
|
381
|
+
expect(response.body).to eq("errors" => [{ "status" => 401, "title" => "Unauthorized" }])
|
|
382
382
|
expect(stub).to have_been_requested
|
|
383
383
|
end
|
|
384
384
|
|
|
385
385
|
it "post xml" do
|
|
386
|
-
stub = stub_request(:post, url).with(:
|
|
386
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_raise(Faraday::ClientError.new("the server responded with status 401"))
|
|
387
387
|
subject.post(url, accept: "xml", data: post_data.to_xml) do |response|
|
|
388
388
|
expect(response.body).to be_nil
|
|
389
|
-
expect(response.status).to eq("errors"=>[{"status"=>401, "title"=>"Unauthorized"}])
|
|
389
|
+
expect(response.status).to eq("errors" => [{ "status" => 401, "title" => "Unauthorized" }])
|
|
390
390
|
end
|
|
391
391
|
expect(stub).to have_been_requested
|
|
392
392
|
end
|
|
393
393
|
|
|
394
394
|
it "put xml" do
|
|
395
|
-
stub = stub_request(:put, url).with(:
|
|
395
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_raise(Faraday::ClientError.new("the server responded with status 401"))
|
|
396
396
|
subject.put(url, accept: "xml", data: post_data.to_xml) do |response|
|
|
397
397
|
expect(response.body).to be_nil
|
|
398
|
-
expect(response.status).to eq("errors"=>[{"status"=>401, "title"=>"Unauthorized"}])
|
|
398
|
+
expect(response.status).to eq("errors" => [{ "status" => 401, "title" => "Unauthorized" }])
|
|
399
399
|
end
|
|
400
400
|
expect(stub).to have_been_requested
|
|
401
401
|
end
|
|
@@ -405,32 +405,32 @@ describe Maremma do
|
|
|
405
405
|
it "get json" do
|
|
406
406
|
stub = stub_request(:get, url).to_timeout
|
|
407
407
|
response = subject.get(url)
|
|
408
|
-
expect(response.body).to eq("errors"=>[{"status"=>408, "title"=>"Request timeout"}])
|
|
408
|
+
expect(response.body).to eq("errors" => [{ "status" => 408, "title" => "Request timeout" }])
|
|
409
409
|
expect(stub).to have_been_requested
|
|
410
410
|
end
|
|
411
411
|
|
|
412
412
|
it "get xml" do
|
|
413
413
|
stub = stub_request(:get, url).to_timeout
|
|
414
414
|
response = subject.get(url, accept: "xml")
|
|
415
|
-
expect(response.body).to eq("errors"=>[{"status"=>408, "title"=>"Request timeout"}])
|
|
415
|
+
expect(response.body).to eq("errors" => [{ "status" => 408, "title" => "Request timeout" }])
|
|
416
416
|
expect(stub).to have_been_requested
|
|
417
417
|
end
|
|
418
418
|
|
|
419
419
|
it "get html" do
|
|
420
420
|
stub = stub_request(:get, url).to_timeout
|
|
421
421
|
response = subject.get(url, accept: "html")
|
|
422
|
-
expect(response.body).to eq("errors"=>[{"status"=>408, "title"=>"Request timeout"}])
|
|
422
|
+
expect(response.body).to eq("errors" => [{ "status" => 408, "title" => "Request timeout" }])
|
|
423
423
|
expect(stub).to have_been_requested
|
|
424
424
|
end
|
|
425
425
|
|
|
426
426
|
it "post xml" do
|
|
427
|
-
stub = stub_request(:post, url).with(:
|
|
427
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).to_timeout
|
|
428
428
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
429
429
|
expect(stub).to have_been_requested
|
|
430
430
|
end
|
|
431
431
|
|
|
432
432
|
it "put xml" do
|
|
433
|
-
stub = stub_request(:put, url).with(:
|
|
433
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).to_timeout
|
|
434
434
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
435
435
|
expect(stub).to have_been_requested
|
|
436
436
|
end
|
|
@@ -440,34 +440,34 @@ describe Maremma do
|
|
|
440
440
|
it "get json" do
|
|
441
441
|
stub = stub_request(:get, url).to_return(status: 200, headers: { "X-Rate-Limit-Remaining" => 2 })
|
|
442
442
|
response = subject.get(url)
|
|
443
|
-
expect(response.body).to eq("errors"=>[{"status"=>429, "title"=>"Too many requests"}])
|
|
443
|
+
expect(response.body).to eq("errors" => [{ "status" => 429, "title" => "Too many requests" }])
|
|
444
444
|
expect(stub).to have_been_requested
|
|
445
445
|
end
|
|
446
446
|
|
|
447
447
|
it "get xml" do
|
|
448
448
|
stub = stub_request(:get, url).to_return(status: 200, headers: { "X-Rate-Limit-Remaining" => 2 })
|
|
449
449
|
response = subject.get(url, accept: "xml")
|
|
450
|
-
expect(response.body).to eq("errors"=>[{"status"=>429, "title"=>"Too many requests"}])
|
|
450
|
+
expect(response.body).to eq("errors" => [{ "status" => 429, "title" => "Too many requests" }])
|
|
451
451
|
expect(stub).to have_been_requested
|
|
452
452
|
end
|
|
453
453
|
|
|
454
454
|
it "get html" do
|
|
455
455
|
stub = stub_request(:get, url).to_return(status: 200, headers: { "X-Rate-Limit-Remaining" => 2 })
|
|
456
456
|
response = subject.get(url, accept: "html")
|
|
457
|
-
expect(response.body).to eq("errors"=>[{"status"=>429, "title"=>"Too many requests"}])
|
|
457
|
+
expect(response.body).to eq("errors" => [{ "status" => 429, "title" => "Too many requests" }])
|
|
458
458
|
expect(stub).to have_been_requested
|
|
459
459
|
end
|
|
460
460
|
|
|
461
461
|
it "post xml" do
|
|
462
|
-
stub = stub_request(:post, url).with(:
|
|
463
|
-
|
|
462
|
+
stub = stub_request(:post, url).with(body: post_data.to_xml).
|
|
463
|
+
to_return(status: 200, headers: { "X-Rate-Limit-Remaining" => 3 })
|
|
464
464
|
subject.post(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
465
465
|
expect(stub).to have_been_requested
|
|
466
466
|
end
|
|
467
467
|
|
|
468
468
|
it "put xml" do
|
|
469
|
-
stub = stub_request(:put, url).with(:
|
|
470
|
-
|
|
469
|
+
stub = stub_request(:put, url).with(body: post_data.to_xml).
|
|
470
|
+
to_return(status: 200, headers: { "X-Rate-Limit-Remaining" => 3 })
|
|
471
471
|
subject.put(url, accept: "xml", data: post_data.to_xml) { |response| expect(response.body).to be_nil }
|
|
472
472
|
expect(stub).to have_been_requested
|
|
473
473
|
end
|
|
@@ -480,26 +480,26 @@ describe Maremma do
|
|
|
480
480
|
stub_request(:get, url).to_return(status: 301, headers: { location: redirect_url })
|
|
481
481
|
stub_request(:get, redirect_url).to_return(status: 200, body: "Test")
|
|
482
482
|
response = subject.get(url)
|
|
483
|
-
expect(response.body).to eq("data"=>"Test")
|
|
483
|
+
expect(response.body).to eq("data" => "Test")
|
|
484
484
|
expect(response.url).to eq("http://www.example.org/redirect")
|
|
485
485
|
end
|
|
486
486
|
|
|
487
487
|
it "redirect four times" do
|
|
488
488
|
stub_request(:get, url).to_return(status: 301, headers: { location: redirect_url })
|
|
489
489
|
stub_request(:get, redirect_url).to_return(status: 301, headers: { location: redirect_url + "/x" })
|
|
490
|
-
stub_request(:get, redirect_url+ "/x").to_return(status: 301, headers: { location: redirect_url + "/y" })
|
|
491
|
-
stub_request(:get, redirect_url+ "/y").to_return(status: 301, headers: { location: redirect_url + "/z" })
|
|
490
|
+
stub_request(:get, redirect_url + "/x").to_return(status: 301, headers: { location: redirect_url + "/y" })
|
|
491
|
+
stub_request(:get, redirect_url + "/y").to_return(status: 301, headers: { location: redirect_url + "/z" })
|
|
492
492
|
stub_request(:get, redirect_url + "/z").to_return(status: 200, body: "Test")
|
|
493
493
|
response = subject.get(url)
|
|
494
|
-
expect(response.body).to eq("data"=>"Test")
|
|
494
|
+
expect(response.body).to eq("data" => "Test")
|
|
495
495
|
end
|
|
496
496
|
|
|
497
497
|
it "redirect limit 1" do
|
|
498
498
|
stub_request(:get, url).to_return(status: 301, headers: { location: redirect_url })
|
|
499
499
|
stub_request(:get, redirect_url).to_return(status: 301, headers: { location: redirect_url + "/x" })
|
|
500
|
-
stub_request(:get, redirect_url+ "/x").to_return(status: 301, headers: { location: redirect_url + "/y" })
|
|
500
|
+
stub_request(:get, redirect_url + "/x").to_return(status: 301, headers: { location: redirect_url + "/y" })
|
|
501
501
|
response = subject.get(url, limit: 1)
|
|
502
|
-
expect(response.body).to eq("errors"=>[{"status"=>400, "title"=>"too many redirects; last one to: http://www.example.org/redirect/x"}])
|
|
502
|
+
expect(response.body).to eq("errors" => [{ "status" => 400, "title" => "too many redirects; last one to: http://www.example.org/redirect/x" }])
|
|
503
503
|
end
|
|
504
504
|
|
|
505
505
|
it "redirect limit 0" do
|
|
@@ -562,7 +562,7 @@ describe Maremma do
|
|
|
562
562
|
|
|
563
563
|
it "json not error" do
|
|
564
564
|
string = "{ \"customError\": \"An error occured.\" }"
|
|
565
|
-
expect(subject.parse_error_response(string)).to eq("customError"=>"An error occured.")
|
|
565
|
+
expect(subject.parse_error_response(string)).to eq("customError" => "An error occured.")
|
|
566
566
|
end
|
|
567
567
|
|
|
568
568
|
it "xml" do
|
|
@@ -574,27 +574,27 @@ describe Maremma do
|
|
|
574
574
|
context "parse_success_response" do
|
|
575
575
|
it "from_json" do
|
|
576
576
|
string = "{ \"word\": \"abc\" }"
|
|
577
|
-
expect(subject.parse_success_response(string)).to eq(
|
|
577
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "word" => "abc" })
|
|
578
578
|
end
|
|
579
579
|
|
|
580
580
|
it "from_json with data" do
|
|
581
581
|
string = "{ \"data\": { \"word\": \"abc\" }}"
|
|
582
|
-
expect(subject.parse_success_response(string)).to eq(
|
|
582
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "word" => "abc" })
|
|
583
583
|
end
|
|
584
584
|
|
|
585
585
|
it "from_json with data and meta" do
|
|
586
586
|
string = "{ \"data\": { \"word\": \"abc\" }, \"meta\": { \"total\": 12 }}"
|
|
587
|
-
expect(subject.parse_success_response(string)).to eq(
|
|
587
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "word" => "abc" }, "meta" => { "total" => 12 })
|
|
588
588
|
end
|
|
589
589
|
|
|
590
590
|
it "from_xml" do
|
|
591
591
|
string = "<word>abc</word>"
|
|
592
|
-
expect(subject.parse_success_response(string)).to eq("data"=>{"word"=>"abc"})
|
|
592
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "word" => "abc" })
|
|
593
593
|
end
|
|
594
594
|
|
|
595
595
|
it "from_xml with attribute" do
|
|
596
596
|
string = "<word type='small'>abc</word>"
|
|
597
|
-
expect(subject.parse_success_response(string)).to eq("data"=>{"word"=>{"type"=>"small", "__content__"=>"abc"}})
|
|
597
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "word" => { "type" => "small", "__content__" => "abc" } })
|
|
598
598
|
end
|
|
599
599
|
|
|
600
600
|
# it "from_xml with allowed content attributes" do
|
|
@@ -604,22 +604,22 @@ describe Maremma do
|
|
|
604
604
|
|
|
605
605
|
it "from_xml with attribute type string" do
|
|
606
606
|
string = "<crm-item name='publisher-name' type='string'>eLife Sciences Publications, Ltd</crm-item>"
|
|
607
|
-
expect(subject.parse_success_response(string)).to eq("data"=>{"crm_item"=>"eLife Sciences Publications, Ltd"})
|
|
607
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "crm_item" => "eLife Sciences Publications, Ltd" })
|
|
608
608
|
end
|
|
609
609
|
|
|
610
610
|
it "from_xml with mixed attribute" do
|
|
611
611
|
string = "<word type='small'>abc<footnote>1</footnote></word>"
|
|
612
|
-
expect(subject.parse_success_response(string)).to eq("data"=>{"word"=>{"type"=>"small", "footnote"=>"1", "__content__"=>"abc"}})
|
|
612
|
+
expect(subject.parse_success_response(string)).to eq("data" => { "word" => { "type" => "small", "footnote" => "1", "__content__" => "abc" } })
|
|
613
613
|
end
|
|
614
614
|
|
|
615
615
|
it "from_string" do
|
|
616
616
|
string = "abc"
|
|
617
|
-
expect(subject.parse_success_response(string)).to eq("data"=>"abc")
|
|
617
|
+
expect(subject.parse_success_response(string)).to eq("data" => "abc")
|
|
618
618
|
end
|
|
619
619
|
|
|
620
620
|
it "from_string with utf-8" do
|
|
621
621
|
string = "fön "
|
|
622
|
-
expect(subject.parse_success_response(string)).to eq("data"=>"fön")
|
|
622
|
+
expect(subject.parse_success_response(string)).to eq("data" => "fön")
|
|
623
623
|
end
|
|
624
624
|
end
|
|
625
625
|
|
|
@@ -673,7 +673,7 @@ describe Maremma do
|
|
|
673
673
|
|
|
674
674
|
it "github_token" do
|
|
675
675
|
options = { github_token: "12345" }
|
|
676
|
-
expect(subject.set_request_headers(url, options)).to eq("User-Agent"=>"Mozilla/5.0 (compatible; Maremma/#{Maremma::VERSION}; +https://github.com/datacite/maremma)", "Accept"=>accept_header, "Authorization"=>"Token 12345")
|
|
676
|
+
expect(subject.set_request_headers(url, options)).to eq("User-Agent" => "Mozilla/5.0 (compatible; Maremma/#{Maremma::VERSION}; +https://github.com/datacite/maremma)", "Accept" => accept_header, "Authorization" => "Token 12345")
|
|
677
677
|
end
|
|
678
678
|
|
|
679
679
|
it "basic" do
|
|
@@ -697,7 +697,7 @@ describe Maremma do
|
|
|
697
697
|
expect(response.status).to eq(200)
|
|
698
698
|
doc = Nokogiri::XML(response.body.fetch("data", nil), nil, "UTF-8")
|
|
699
699
|
nodeset = doc.css("script")
|
|
700
|
-
string = nodeset.
|
|
700
|
+
string = nodeset.detect { |element| element["type"] == "application/ld+json" }
|
|
701
701
|
json = JSON.parse(string)
|
|
702
702
|
expect(json["@id"]).to eq("https://doi.org/10.3334/ORNLDAAC/1339")
|
|
703
703
|
end
|
|
@@ -708,10 +708,10 @@ describe Maremma do
|
|
|
708
708
|
expect(response.status).to eq(200)
|
|
709
709
|
doc = Nokogiri::XML(response.body.fetch("data", nil), nil, "UTF-8")
|
|
710
710
|
nodeset = doc.css("script")
|
|
711
|
-
string = nodeset.
|
|
711
|
+
string = nodeset.detect { |element| element["type"] == "application/ld+json" }
|
|
712
712
|
json = JSON.parse(string)
|
|
713
713
|
expect(json["@id"]).to eq("https://doi.org/10.3334/ORNLDAAC/1339")
|
|
714
|
-
end
|
|
714
|
+
end
|
|
715
715
|
end
|
|
716
716
|
|
|
717
717
|
context "ssl verify", vcr: true do
|
|
@@ -723,7 +723,7 @@ describe Maremma do
|
|
|
723
723
|
|
|
724
724
|
it "self-signed" do
|
|
725
725
|
url = "https://38.100.138.135:8000/api/handles/10.5281/ZENODO.21430?index=1"
|
|
726
|
-
options = { ssl_self_signed: true}
|
|
726
|
+
options = { ssl_self_signed: true }
|
|
727
727
|
response = subject.get(url, options)
|
|
728
728
|
expect(response.status).to eq(200)
|
|
729
729
|
expect(response.body.dig("data", "values", 0, "data", "value")).to eq("https://zenodo.org/record/21430")
|