gds-api-adapters 1.9.2 → 2.0.0
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.
- data/lib/gds_api/content_api.rb +12 -0
- data/lib/gds_api/exceptions.rb +3 -0
- data/lib/gds_api/json_client.rb +5 -3
- data/lib/gds_api/version.rb +1 -1
- data/test/content_api_test.rb +157 -19
- data/test/json_client_test.rb +45 -1
- data/test/publisher_api_test.rb +4 -2
- metadata +4 -4
data/lib/gds_api/content_api.rb
CHANGED
@@ -16,6 +16,18 @@ class GdsApi::ContentApi < GdsApi::Base
|
|
16
16
|
get_json!("#{base_url}/#{slug}.json")
|
17
17
|
end
|
18
18
|
|
19
|
+
def local_authority(snac_code)
|
20
|
+
get_json("#{base_url}/local_authorities/#{CGI.escape(snac_code)}.json")
|
21
|
+
end
|
22
|
+
|
23
|
+
def local_authorities_by_name(name)
|
24
|
+
get_json!("#{base_url}/local_authorities.json?name=#{CGI.escape(name)}")
|
25
|
+
end
|
26
|
+
|
27
|
+
def local_authorities_by_snac_code(snac_code)
|
28
|
+
get_json!("#{base_url}/local_authorities.json?snac_code=#{CGI.escape(snac_code)}")
|
29
|
+
end
|
30
|
+
|
19
31
|
private
|
20
32
|
def base_url
|
21
33
|
endpoint
|
data/lib/gds_api/exceptions.rb
CHANGED
data/lib/gds_api/json_client.rb
CHANGED
@@ -39,7 +39,7 @@ module GdsApi
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def get_json(url)
|
42
|
-
ignoring GdsApi::
|
42
|
+
ignoring GdsApi::HTTPNotFound do
|
43
43
|
get_json! url
|
44
44
|
end
|
45
45
|
end
|
@@ -49,7 +49,7 @@ module GdsApi
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def post_json(url, params)
|
52
|
-
ignoring GdsApi::
|
52
|
+
ignoring GdsApi::HTTPNotFound do
|
53
53
|
post_json! url, params
|
54
54
|
end
|
55
55
|
end
|
@@ -59,7 +59,7 @@ module GdsApi
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def put_json(url, params)
|
62
|
-
ignoring GdsApi::
|
62
|
+
ignoring GdsApi::HTTPNotFound do
|
63
63
|
put_json! url, params
|
64
64
|
end
|
65
65
|
end
|
@@ -84,6 +84,8 @@ module GdsApi
|
|
84
84
|
if response.is_a?(Net::HTTPSuccess)
|
85
85
|
logger.info loggable.merge(status: 'success', end_time: Time.now.to_f).to_json
|
86
86
|
Response.new(response)
|
87
|
+
elsif response.is_a?(Net::HTTPNotFound)
|
88
|
+
raise GdsApi::HTTPNotFound.new(response.code.to_i)
|
87
89
|
else
|
88
90
|
body = begin
|
89
91
|
JSON.parse(response.body.to_s)
|
data/lib/gds_api/version.rb
CHANGED
data/test/content_api_test.rb
CHANGED
@@ -2,29 +2,167 @@ require 'test_helper'
|
|
2
2
|
require 'gds_api/content_api'
|
3
3
|
require 'gds_api/test_helpers/content_api'
|
4
4
|
|
5
|
-
|
5
|
+
describe GdsApi::ContentApi do
|
6
6
|
include GdsApi::TestHelpers::ContentApi
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
before do
|
9
|
+
@base_api_url = "https://contentapi.test.alphagov.co.uk"
|
10
|
+
@api = GdsApi::ContentApi.new('test')
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
describe "sections" do
|
14
|
+
it "should show a list of sections" do
|
15
|
+
content_api_has_root_sections(["crime"])
|
16
|
+
response = @api.sections
|
17
|
+
first_section = response["results"][0]
|
18
|
+
assert_equal "http://contentapi.test.gov.uk/tags/crime.json", first_section["id"]
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
describe "tags" do
|
23
|
+
it "should produce an artefact with the provided tag" do
|
24
|
+
tag = "crime-and-justice"
|
25
|
+
api_url = "#{@base_api_url}/with_tag.json?tag=#{tag}&include_children=1"
|
26
|
+
json = {
|
27
|
+
results: [{title: "Complain about a claims company"}]
|
28
|
+
}.to_json
|
29
|
+
stub_request(:get, api_url).to_return(:status => 200, :body => json)
|
30
|
+
response = @api.with_tag("crime-and-justice")
|
31
|
+
subsection = response["results"][0]
|
32
|
+
assert_equal "Complain about a claims company", subsection["title"]
|
33
|
+
end
|
29
34
|
end
|
30
|
-
|
35
|
+
|
36
|
+
describe "local authorities" do
|
37
|
+
it "should return nil if no local authority found" do
|
38
|
+
stub_request(:get, "#{@base_api_url}/local_authorities/does-not-exist.json").
|
39
|
+
with(:headers => GdsApi::JsonClient::DEFAULT_REQUEST_HEADERS).
|
40
|
+
to_return(:status => 404,
|
41
|
+
:body => {"_response_info" => {"status" => "ok"}}.to_json,
|
42
|
+
:headers => {})
|
43
|
+
|
44
|
+
assert_nil @api.local_authority("does-not-exist")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should produce a LocalAuthority hash for an existing snac code" do
|
48
|
+
body_response = {
|
49
|
+
"name" => "Solihull Metropolitan Borough Council",
|
50
|
+
"snac_code" => "00CT",
|
51
|
+
"id" => "#{@base_api_url}/local_authorities/00CT.json",
|
52
|
+
"_response_info" => {"status" => "ok"}
|
53
|
+
}
|
54
|
+
|
55
|
+
stub_request(:get, "#{@base_api_url}/local_authorities/00CT.json").
|
56
|
+
with(:headers => GdsApi::JsonClient::DEFAULT_REQUEST_HEADERS).
|
57
|
+
to_return(:status => 200,
|
58
|
+
:body => body_response.to_json,
|
59
|
+
:headers => {})
|
60
|
+
|
61
|
+
response = @api.local_authority("00CT").to_hash
|
62
|
+
|
63
|
+
assert_equal body_response, response
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should return an empty result set if name not found" do
|
67
|
+
body_response = {
|
68
|
+
"_response_info" => {"status" => "ok"},
|
69
|
+
"description" => "Local Authorities",
|
70
|
+
"total" => 0,
|
71
|
+
"results" => []
|
72
|
+
}.to_json
|
73
|
+
|
74
|
+
stub_request(:get, "#{@base_api_url}/local_authorities.json?name=Swansalona").
|
75
|
+
with(:headers => GdsApi::JsonClient::DEFAULT_REQUEST_HEADERS).
|
76
|
+
to_return(:status => 200,
|
77
|
+
:body => body_response,
|
78
|
+
:headers => {})
|
79
|
+
|
80
|
+
response = @api.local_authorities_by_name("Swansalona")
|
81
|
+
|
82
|
+
assert_equal 0, response["total"]
|
83
|
+
assert_equal [], response["results"]
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should return an empty result set if snac code not found" do
|
87
|
+
body_response = {
|
88
|
+
"_response_info" => {"status" => "ok"},
|
89
|
+
"description" => "Local Authorities",
|
90
|
+
"total" => 0,
|
91
|
+
"results" => []
|
92
|
+
}.to_json
|
93
|
+
|
94
|
+
stub_request(:get, "#{@base_api_url}/local_authorities.json?snac_code=SNACKS").
|
95
|
+
with(:headers => GdsApi::JsonClient::DEFAULT_REQUEST_HEADERS).
|
96
|
+
to_return(:status => 200,
|
97
|
+
:body => body_response,
|
98
|
+
:headers => {})
|
99
|
+
|
100
|
+
response = @api.local_authorities_by_snac_code("SNACKS")
|
101
|
+
|
102
|
+
assert_equal 0, response["total"]
|
103
|
+
assert_equal [], response["results"]
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should have an array of results for a name search" do
|
107
|
+
body_response = {
|
108
|
+
"_response_info" => {"status" => "ok"},
|
109
|
+
"description" => "Local Authorities",
|
110
|
+
"total" => 2,
|
111
|
+
"results" => [{
|
112
|
+
"name" => "Swansalona Council",
|
113
|
+
"snac_code" => "00VT",
|
114
|
+
"id" => "#{@base_api_url}/local_authorities/00VT.json"
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"name" => "Swansea Council",
|
118
|
+
"snac_code" => "00CT",
|
119
|
+
"id" => "#{@base_api_url}/local_authorities/00VT.json"
|
120
|
+
}]
|
121
|
+
}.to_json
|
122
|
+
|
123
|
+
stub_request(:get, "#{@base_api_url}/local_authorities.json?name=Swans").
|
124
|
+
with(:headers => GdsApi::JsonClient::DEFAULT_REQUEST_HEADERS).
|
125
|
+
to_return(:status => 200,
|
126
|
+
:body => body_response,
|
127
|
+
:headers => {})
|
128
|
+
|
129
|
+
response = @api.local_authorities_by_name("Swans")
|
130
|
+
|
131
|
+
assert_equal 2, response["total"]
|
132
|
+
assert_equal "Swansalona Council", response["results"][0]["name"]
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should escape snac code when calling unique a local authority" do
|
136
|
+
stub_request(:get, "#{@base_api_url}/local_authorities/escape%21.json").
|
137
|
+
to_return(:status => 200,
|
138
|
+
:body => {"test" => "ing"}.to_json,
|
139
|
+
:headers => {})
|
140
|
+
|
141
|
+
@api.local_authority("escape!")
|
142
|
+
|
143
|
+
assert_requested :get, "#{@base_api_url}/local_authorities/escape%21.json"
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should escape name when searching for local authorities" do
|
147
|
+
stub_request(:get, "#{@base_api_url}/local_authorities.json?name=name%21").
|
148
|
+
to_return(:status => 200,
|
149
|
+
:body => {"test" => "ing"}.to_json,
|
150
|
+
:headers => {})
|
151
|
+
|
152
|
+
@api.local_authorities_by_name("name!")
|
153
|
+
|
154
|
+
assert_requested :get, "#{@base_api_url}/local_authorities.json?name=name%21"
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should escape snac code when searching for local authorities" do
|
158
|
+
stub_request(:get, "#{@base_api_url}/local_authorities.json?snac_code=snacks%21").
|
159
|
+
to_return(:status => 200,
|
160
|
+
:body => {"test" => "ing"}.to_json,
|
161
|
+
:headers => {})
|
162
|
+
|
163
|
+
@api.local_authorities_by_snac_code("snacks!")
|
164
|
+
|
165
|
+
assert_requested :get, "#{@base_api_url}/local_authorities.json?snac_code=snacks%21"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
data/test/json_client_test.rb
CHANGED
@@ -65,12 +65,56 @@ class JsonClientTest < MiniTest::Spec
|
|
65
65
|
assert_equal response_a.object_id, response_b.object_id
|
66
66
|
end
|
67
67
|
|
68
|
-
def
|
68
|
+
def test_should_raise_http_not_found_if_404_returned_from_endpoint
|
69
|
+
url = "http://some.endpoint/some.json"
|
70
|
+
stub_request(:get, url).to_return(:body => "{}", :status => 404)
|
71
|
+
assert_raises GdsApi::HTTPNotFound do
|
72
|
+
@client.get_json!(url)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_get_should_be_nil_if_404_returned_from_endpoint
|
69
77
|
url = "http://some.endpoint/some.json"
|
70
78
|
stub_request(:get, url).to_return(:body => "{}", :status => 404)
|
71
79
|
assert_nil @client.get_json(url)
|
72
80
|
end
|
73
81
|
|
82
|
+
def test_get_should_raise_error_if_non_404_error_code_returned_from_endpoint
|
83
|
+
url = "http://some.endpoint/some.json"
|
84
|
+
stub_request(:get, url).to_return(:body => "{}", :status => 500)
|
85
|
+
assert_raises GdsApi::HTTPErrorResponse do
|
86
|
+
@client.get_json(url)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_post_should_be_nil_if_404_returned_from_endpoint
|
91
|
+
url = "http://some.endpoint/some.json"
|
92
|
+
stub_request(:post, url).to_return(:body => "{}", :status => 404)
|
93
|
+
assert_nil @client.post_json(url, {})
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_post_should_raise_error_if_non_404_error_code_returned_from_endpoint
|
97
|
+
url = "http://some.endpoint/some.json"
|
98
|
+
stub_request(:post, url).to_return(:body => "{}", :status => 500)
|
99
|
+
assert_raises GdsApi::HTTPErrorResponse do
|
100
|
+
@client.post_json(url, {})
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_put_should_be_nil_if_404_returned_from_endpoint
|
105
|
+
url = "http://some.endpoint/some.json"
|
106
|
+
stub_request(:put, url).to_return(:body => "{}", :status => 404)
|
107
|
+
assert_nil @client.put_json(url, {})
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_put_should_raise_error_if_non_404_error_code_returned_from_endpoint
|
111
|
+
url = "http://some.endpoint/some.json"
|
112
|
+
stub_request(:put, url).to_return(:body => "{}", :status => 500)
|
113
|
+
assert_raises GdsApi::HTTPErrorResponse do
|
114
|
+
@client.put_json(url, {})
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
74
118
|
def empty_response
|
75
119
|
net_http_response = stub(:body => '{}')
|
76
120
|
GdsApi::Response.new(net_http_response)
|
data/test/publisher_api_test.rb
CHANGED
@@ -133,11 +133,13 @@ describe GdsApi::Publisher do
|
|
133
133
|
assert_equal [], api.licences_for_ids([123,124])
|
134
134
|
end
|
135
135
|
|
136
|
-
it "should
|
136
|
+
it "should raise an error if publisher returns an error" do
|
137
137
|
stub_request(:get, %r[\A#{PUBLISHER_ENDPOINT}/licences]).
|
138
138
|
to_return(:status => [503, "Service temporarily unabailable"])
|
139
139
|
|
140
|
-
|
140
|
+
assert_raises GdsApi::HTTPErrorResponse do
|
141
|
+
api.licences_for_ids([123,124])
|
142
|
+
end
|
141
143
|
end
|
142
144
|
|
143
145
|
it "should return nil if a council snac code is not found" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: gds-api-adapters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version:
|
5
|
+
version: 2.0.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James Stewart
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-09-
|
13
|
+
date: 2012-09-14 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: plek
|
@@ -202,7 +202,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
202
202
|
requirements:
|
203
203
|
- - ">="
|
204
204
|
- !ruby/object:Gem::Version
|
205
|
-
hash:
|
205
|
+
hash: 3104708599933595868
|
206
206
|
segments:
|
207
207
|
- 0
|
208
208
|
version: "0"
|
@@ -211,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
211
|
requirements:
|
212
212
|
- - ">="
|
213
213
|
- !ruby/object:Gem::Version
|
214
|
-
hash:
|
214
|
+
hash: 3104708599933595868
|
215
215
|
segments:
|
216
216
|
- 0
|
217
217
|
version: "0"
|