gds-api-adapters 36.4.1 → 37.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -12
- data/Rakefile +5 -0
- data/lib/gds_api/asset_manager.rb +3 -3
- data/lib/gds_api/config.rb +58 -11
- data/lib/gds_api/gov_uk_delivery.rb +1 -1
- data/lib/gds_api/json_client.rb +0 -20
- data/lib/gds_api/part_methods.rb +11 -8
- data/lib/gds_api/publisher.rb +5 -4
- data/lib/gds_api/publishing_api_v2.rb +18 -1
- data/lib/gds_api/response.rb +7 -3
- data/lib/gds_api/test_helpers/rummager.rb +12 -0
- data/lib/gds_api/version.rb +1 -1
- data/test/asset_manager_test.rb +6 -14
- data/test/content_api_test.rb +105 -30
- data/test/content_store_test.rb +10 -22
- data/test/gov_uk_delivery_test.rb +5 -3
- data/test/json_client_test.rb +188 -173
- data/test/licence_application_api_test.rb +15 -7
- data/test/list_response_test.rb +23 -8
- data/test/local_links_manager_api_test.rb +14 -12
- data/test/mapit_test.rb +8 -4
- data/test/need_api_test.rb +35 -14
- data/test/organisations_api_test.rb +11 -6
- data/test/panopticon_test.rb +13 -5
- data/test/publisher_api_test.rb +4 -4
- data/test/publishing_api_v2/get_expanded_links_test.rb +3 -3
- data/test/publishing_api_v2/get_links_test.rb +8 -4
- data/test/publishing_api_v2_test.rb +47 -37
- data/test/response_test.rb +49 -20
- data/test/router_test.rb +24 -20
- data/test/rummager_helpers_test.rb +1 -1
- data/test/worldwide_api_test.rb +18 -7
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80e428cbf9fbbf1cc956c99fdab6135b912b0eb7
|
4
|
+
data.tar.gz: 2f3522bb16213e2fa76e8fad6786b65f1c4150f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba103489e0af11e87a3c3712043a27fd192e96f7242faa40b0e1e85a109337ea26e4ed08ed3ae1e3a474490c975063db7f91251e213d480c09fc14a1d1c959b5
|
7
|
+
data.tar.gz: aa8e0fe34d8960d43bb68bd4facb7208459c64545be952414d945f0b35c2eaa20a38fb5376b0725efa422170ed442ccb3eefb8d1e21d745a7970c00c5d392747
|
data/README.md
CHANGED
@@ -18,19 +18,14 @@ Example adapters for frequently used applications:
|
|
18
18
|
|
19
19
|
## Configuration
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
From December 1st, 2016 it won't be possible to use the following configuration
|
22
|
+
options:
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# Return a hash, not an OpenStruct from a request.
|
31
|
-
config.hash_response_for_requests = true
|
32
|
-
end
|
33
|
-
```
|
24
|
+
- `always_raise_for_not_found`
|
25
|
+
- `hash_response_for_requests`
|
26
|
+
|
27
|
+
Please remove these configuration options from your client application and
|
28
|
+
migrate to the new behaviour as soon as possible.
|
34
29
|
|
35
30
|
## Logging
|
36
31
|
|
data/Rakefile
CHANGED
@@ -36,6 +36,11 @@ PactBroker::Client::PublicationTask.new("released_version") do | task |
|
|
36
36
|
configure_pact_broker_location(task)
|
37
37
|
end
|
38
38
|
|
39
|
+
desc "Run the linter against changed files"
|
40
|
+
task :lint do
|
41
|
+
sh "bundle exec govuk-lint-ruby --diff --cached --format clang"
|
42
|
+
end
|
43
|
+
|
39
44
|
require "gem_publisher"
|
40
45
|
desc "Publish gem to rubygems.org if necessary"
|
41
46
|
task :publish_gem do |t|
|
@@ -31,8 +31,8 @@ class GdsApi::AssetManager < GdsApi::Base
|
|
31
31
|
#
|
32
32
|
# @example Upload a file from disk
|
33
33
|
# response = asset_manager.create_asset(file: File.new('image.jpg', 'r'))
|
34
|
-
# response
|
35
|
-
# response
|
34
|
+
# response['id'] #=> "http://asset-manager.dev.gov.uk/assets/576bbc52759b74196b000012"
|
35
|
+
# response['content_type'] #=> "image/jpeg"
|
36
36
|
# @example Upload a file from a Rails param, (typically a multipart wrapper)
|
37
37
|
# params[:file] #=> #<ActionDispatch::Http::UploadedFile:0x007fc60b43c5c8
|
38
38
|
# # @content_type="application/foofle",
|
@@ -42,7 +42,7 @@ class GdsApi::AssetManager < GdsApi::Base
|
|
42
42
|
# # Though we sent a file with a +content_type+ of 'application/foofle',
|
43
43
|
# # this was ignored
|
44
44
|
# response = asset_manager.create_asset(file: params[:file])
|
45
|
-
# response
|
45
|
+
# response['content_type'] #=> "image/jpeg"
|
46
46
|
def create_asset(asset)
|
47
47
|
post_multipart("#{base_url}/assets", { :asset => asset })
|
48
48
|
end
|
data/lib/gds_api/config.rb
CHANGED
@@ -8,22 +8,69 @@ module GdsApi
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class Config
|
11
|
-
# Always raise
|
12
|
-
# 410. This avoids nil-errors in your
|
11
|
+
# Always raise an `HTTPNotFound` exception when the server returns 404 or an
|
12
|
+
# `HTTPGone` when the server returns 410. This avoids nil-errors in your
|
13
|
+
# code and makes debugging easier.
|
13
14
|
#
|
14
|
-
# Currently defaults to
|
15
|
+
# Currently defaults to true.
|
15
16
|
#
|
16
|
-
# This configuration
|
17
|
-
#
|
18
|
-
#
|
19
|
-
|
17
|
+
# This configuration will be removed on December 1st, 2016. Please make sure
|
18
|
+
# you upgrade gds-api-adapters to the latest version and avoid configuring
|
19
|
+
# it on your client application.
|
20
|
+
def always_raise_for_not_found
|
21
|
+
return true if @always_raise_for_not_found.nil?
|
22
|
+
|
23
|
+
@always_raise_for_not_found
|
24
|
+
end
|
25
|
+
|
26
|
+
def always_raise_for_not_found=(value)
|
27
|
+
warn <<-doc
|
28
|
+
|
29
|
+
DEPRECATION NOTICE: Please delete any instances of
|
30
|
+
`GdsApi.config.always_raise_for_not_found=` from your codebase to make
|
31
|
+
sure all 404 or 410 responses raise an exception.
|
32
|
+
|
33
|
+
This configuration option will be be removed. Raising exceptions is now
|
34
|
+
the default behaviour and it won't be possible to opt-out from December
|
35
|
+
1st, 2016.
|
36
|
+
|
37
|
+
Called from: #{caller[2]}
|
38
|
+
|
39
|
+
doc
|
40
|
+
|
41
|
+
@always_raise_for_not_found = value
|
42
|
+
end
|
20
43
|
|
21
44
|
# Set to true to make `GdsApi::Response` behave like a simple hash, instead
|
22
45
|
# of an OpenStruct. This will prevent nil-errors.
|
23
46
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
|
47
|
+
# Currently defaults to true.
|
48
|
+
#
|
49
|
+
# This configuration will be removed on December 1st, 2016. Please make sure
|
50
|
+
# you upgrade gds-api-adapters to the latest version and avoid configuring
|
51
|
+
# it on your client application.
|
52
|
+
def hash_response_for_requests
|
53
|
+
return true if @hash_response_for_requests.nil?
|
54
|
+
|
55
|
+
@hash_response_for_requests
|
56
|
+
end
|
57
|
+
|
58
|
+
def hash_response_for_requests=(value)
|
59
|
+
warn <<-doc
|
60
|
+
|
61
|
+
DEPRECATION NOTICE: Please delete any instances of
|
62
|
+
`GdsApi.config.hash_response_for_requests=` from your codebase to make
|
63
|
+
sure responses behave like a Hash instead of an OpenStruct.
|
64
|
+
|
65
|
+
This configuration option will be be removed. Returning responses that
|
66
|
+
behave like a Hash is the default behaviour and it won't be possible to
|
67
|
+
opt-out from December 1st, 2016.
|
68
|
+
|
69
|
+
Called from: #{caller[2]}
|
70
|
+
|
71
|
+
doc
|
72
|
+
|
73
|
+
@hash_response_for_requests = value
|
74
|
+
end
|
28
75
|
end
|
29
76
|
end
|
data/lib/gds_api/json_client.rb
CHANGED
@@ -78,16 +78,6 @@ module GdsApi
|
|
78
78
|
if GdsApi.config.always_raise_for_not_found
|
79
79
|
get_raw!(url)
|
80
80
|
else
|
81
|
-
warn <<-doc
|
82
|
-
DEPRECATION NOTICE: You are making requests that will potentially
|
83
|
-
return nil. Please set `GdsApi.config.always_raise_for_not_found = true`
|
84
|
-
to make sure all responses with 404 or 410 raise an exception.
|
85
|
-
|
86
|
-
Raising exceptions will be the default behaviour from October 1st, 2016.
|
87
|
-
|
88
|
-
Called from: #{caller[2]}
|
89
|
-
doc
|
90
|
-
|
91
81
|
ignoring_missing do
|
92
82
|
get_raw!(url)
|
93
83
|
end
|
@@ -105,16 +95,6 @@ module GdsApi
|
|
105
95
|
if GdsApi.config.always_raise_for_not_found
|
106
96
|
send (method_name + "!"), url, *args, &block
|
107
97
|
else
|
108
|
-
warn <<-doc
|
109
|
-
DEPRECATION NOTICE: You are making requests that will potentially
|
110
|
-
return nil. Please set `GdsApi.config.always_raise_for_not_found = true`
|
111
|
-
to make sure all responses with 404 or 410 raise an exception.
|
112
|
-
|
113
|
-
Raising exceptions will be the default behaviour from October 1st, 2016.
|
114
|
-
|
115
|
-
Called from: #{caller[2]}
|
116
|
-
doc
|
117
|
-
|
118
98
|
ignoring_missing do
|
119
99
|
send (method_name + "!"), url, *args, &block
|
120
100
|
end
|
data/lib/gds_api/part_methods.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module GdsApi::PartMethods
|
2
2
|
|
3
3
|
def part_index(slug)
|
4
|
-
parts.index { |p| p
|
4
|
+
parsed_content['parts'].index { |p| p['slug'] == slug }
|
5
5
|
end
|
6
6
|
|
7
7
|
def find_part(slug)
|
8
8
|
return nil unless index = part_index(slug)
|
9
|
-
parts[index]
|
9
|
+
parsed_content['parts'][index]
|
10
10
|
end
|
11
11
|
|
12
12
|
def has_parts?(part)
|
@@ -14,13 +14,13 @@ module GdsApi::PartMethods
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def has_previous_part?(part)
|
17
|
-
index = part_index(part
|
17
|
+
index = part_index(part['slug'])
|
18
18
|
!! (index && index > 0)
|
19
19
|
end
|
20
20
|
|
21
21
|
def has_next_part?(part)
|
22
|
-
index = part_index(part
|
23
|
-
!! (index && (index + 1) < parts.length)
|
22
|
+
index = part_index(part['slug'])
|
23
|
+
!! (index && (index + 1) < parsed_content['parts'].length)
|
24
24
|
end
|
25
25
|
|
26
26
|
def part_after(part)
|
@@ -33,9 +33,12 @@ module GdsApi::PartMethods
|
|
33
33
|
|
34
34
|
private
|
35
35
|
def part_at(part, relative_offset)
|
36
|
-
|
36
|
+
current_index = part_index(part['slug'])
|
37
|
+
return nil unless current_index
|
38
|
+
|
37
39
|
other_index = current_index + relative_offset
|
38
|
-
return nil unless (0
|
39
|
-
|
40
|
+
return nil unless (0...parsed_content['parts'].length).cover?(other_index)
|
41
|
+
|
42
|
+
parsed_content['parts'][other_index]
|
40
43
|
end
|
41
44
|
end
|
data/lib/gds_api/publisher.rb
CHANGED
@@ -7,8 +7,8 @@ class GdsApi::Publisher < GdsApi::Base
|
|
7
7
|
|
8
8
|
response = get_json(url_for_slug(slug, options))
|
9
9
|
if response
|
10
|
-
container = response.
|
11
|
-
container.extend(GdsApi::PartMethods) if container
|
10
|
+
container = response.dup
|
11
|
+
container.extend(GdsApi::PartMethods) if container['parts']
|
12
12
|
convert_updated_date(container)
|
13
13
|
container
|
14
14
|
else
|
@@ -39,8 +39,9 @@ class GdsApi::Publisher < GdsApi::Base
|
|
39
39
|
|
40
40
|
private
|
41
41
|
def convert_updated_date(container)
|
42
|
-
if container
|
43
|
-
container.updated_at =
|
42
|
+
if container['updated_at'] && container['updated_at'].is_a?(String)
|
43
|
+
container.parsed_content['updated_at'] =
|
44
|
+
Time.parse(container['updated_at'])
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
@@ -241,7 +241,24 @@ class GdsApi::PublishingApiV2 < GdsApi::Base
|
|
241
241
|
patch_json!(links_url(content_id), payload)
|
242
242
|
end
|
243
243
|
|
244
|
-
#
|
244
|
+
# Get a list of content items from the Publishing API.
|
245
|
+
#
|
246
|
+
# The only required key in the params hash is `document_type`. These will be used to filter down the content items being returned by the API. Other allowed options can be seen from the link below.
|
247
|
+
#
|
248
|
+
# @param params [Hash] At minimum, this hash has to include the `document_type` of the content items we wish to see. All other optional keys are documented above.
|
249
|
+
#
|
250
|
+
# @example
|
251
|
+
#
|
252
|
+
# publishing_api.get_content_items(
|
253
|
+
# document_type: 'taxon',
|
254
|
+
# q: 'Driving',
|
255
|
+
# page: 1,
|
256
|
+
# per_page: 50,
|
257
|
+
# publishing_app: 'content-tagger',
|
258
|
+
# fields: ['title', 'description', 'public_updated_at'],
|
259
|
+
# locale: 'en',
|
260
|
+
# order: '-public_updated_at'
|
261
|
+
# )
|
245
262
|
#
|
246
263
|
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2content
|
247
264
|
def get_content_items(params)
|
data/lib/gds_api/response.rb
CHANGED
@@ -19,7 +19,7 @@ module GdsApi
|
|
19
19
|
# Example:
|
20
20
|
#
|
21
21
|
# r = Response.new(response, web_urls_relative_to: "https://www.gov.uk")
|
22
|
-
# r
|
22
|
+
# r['results'][0]['web_url']
|
23
23
|
# => "/bank-holidays"
|
24
24
|
class Response
|
25
25
|
extend Forwardable
|
@@ -71,12 +71,16 @@ module GdsApi
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def to_hash
|
74
|
-
|
74
|
+
parsed_content
|
75
|
+
end
|
76
|
+
|
77
|
+
def parsed_content
|
78
|
+
@parsed_content ||= transform_parsed(JSON.parse(@http_response.body))
|
75
79
|
end
|
76
80
|
|
77
81
|
def to_ostruct
|
78
82
|
raise NoMethodError if GdsApi.config.hash_response_for_requests
|
79
|
-
@ostruct ||= self.class.build_ostruct_recursively(
|
83
|
+
@ostruct ||= self.class.build_ostruct_recursively(parsed_content)
|
80
84
|
end
|
81
85
|
|
82
86
|
def method_missing(method_sym, *arguments, &block)
|
@@ -38,6 +38,18 @@ module GdsApi
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def stub_any_rummager_search
|
42
|
+
stub_request(:get, %r{#{RUMMAGER_ENDPOINT}/search.json})
|
43
|
+
end
|
44
|
+
|
45
|
+
def stub_any_rummager_search_to_return_no_results
|
46
|
+
stub_any_rummager_search.to_return(body: { results: [] }.to_json)
|
47
|
+
end
|
48
|
+
|
49
|
+
def assert_rummager_search(options)
|
50
|
+
assert_requested :get, "#{RUMMAGER_ENDPOINT}/search.json", **options
|
51
|
+
end
|
52
|
+
|
41
53
|
def stub_any_rummager_delete(index: nil)
|
42
54
|
if index
|
43
55
|
stub_request(:delete, %r{#{RUMMAGER_ENDPOINT}/#{index}/documents/.*})
|
data/lib/gds_api/version.rb
CHANGED
data/test/asset_manager_test.rb
CHANGED
@@ -22,14 +22,6 @@ describe GdsApi::AssetManager do
|
|
22
22
|
}
|
23
23
|
}
|
24
24
|
|
25
|
-
before do
|
26
|
-
GdsApi.config.always_raise_for_not_found = true
|
27
|
-
end
|
28
|
-
|
29
|
-
after do
|
30
|
-
GdsApi.config.always_raise_for_not_found = false
|
31
|
-
end
|
32
|
-
|
33
25
|
it "creates an asset with a file" do
|
34
26
|
req = stub_request(:post, "#{base_api_url}/assets").
|
35
27
|
with(:body => %r{Content\-Disposition: form\-data; name="asset\[file\]"; filename="hello\.txt"\r\nContent\-Type: text/plain}).
|
@@ -37,7 +29,7 @@ describe GdsApi::AssetManager do
|
|
37
29
|
|
38
30
|
response = api.create_asset(:file => file_fixture)
|
39
31
|
|
40
|
-
assert_equal asset_url, response
|
32
|
+
assert_equal asset_url, response['asset']['id']
|
41
33
|
assert_requested(req)
|
42
34
|
end
|
43
35
|
|
@@ -67,16 +59,16 @@ describe GdsApi::AssetManager do
|
|
67
59
|
|
68
60
|
response = api.update_asset(asset_id, :file => file_fixture)
|
69
61
|
|
70
|
-
assert_equal "#{base_api_url}/assets/#{asset_id}", response
|
62
|
+
assert_equal "#{base_api_url}/assets/#{asset_id}", response['asset']['id']
|
71
63
|
assert_requested(req)
|
72
64
|
end
|
73
65
|
|
74
66
|
it "retrieves an asset" do
|
75
67
|
asset = api.asset(asset_id)
|
76
68
|
|
77
|
-
assert_equal "photo.jpg", asset
|
78
|
-
assert_equal "image/jpeg", asset
|
79
|
-
assert_equal "http://fooey.gov.uk/media/photo.jpg", asset
|
69
|
+
assert_equal "photo.jpg", asset['name']
|
70
|
+
assert_equal "image/jpeg", asset['content_type']
|
71
|
+
assert_equal "http://fooey.gov.uk/media/photo.jpg", asset['file_url']
|
80
72
|
end
|
81
73
|
end
|
82
74
|
|
@@ -86,7 +78,7 @@ describe GdsApi::AssetManager do
|
|
86
78
|
|
87
79
|
response = api.delete_asset(asset_id)
|
88
80
|
|
89
|
-
assert_equal "#{base_api_url}/assets/#{asset_id}", response
|
81
|
+
assert_equal "#{base_api_url}/assets/#{asset_id}", response['asset']['id']
|
90
82
|
assert_requested(req)
|
91
83
|
end
|
92
84
|
end
|
data/test/content_api_test.rb
CHANGED
@@ -32,10 +32,13 @@ describe GdsApi::ContentApi do
|
|
32
32
|
content_api_has_an_artefact("bank-holidays", artefact_response)
|
33
33
|
artefact = @api.artefact("bank-holidays")
|
34
34
|
|
35
|
-
assert_equal "Bank holidays", artefact
|
36
|
-
assert_equal "/bank-holidays", artefact
|
35
|
+
assert_equal "Bank holidays", artefact['title']
|
36
|
+
assert_equal "/bank-holidays", artefact['web_url']
|
37
37
|
|
38
|
-
assert_equal
|
38
|
+
assert_equal(
|
39
|
+
"/browse/cheese",
|
40
|
+
artefact['tags'][0]['content_with_tag']['web_url']
|
41
|
+
)
|
39
42
|
end
|
40
43
|
|
41
44
|
it "should use relative URLs for tag listings" do
|
@@ -44,7 +47,7 @@ describe GdsApi::ContentApi do
|
|
44
47
|
|
45
48
|
assert_equal 3, tags.count
|
46
49
|
tags.each do |tag|
|
47
|
-
web_url = tag
|
50
|
+
web_url = tag['content_with_tag']['web_url']
|
48
51
|
assert web_url.start_with?("/browse/"), web_url
|
49
52
|
end
|
50
53
|
end
|
@@ -60,12 +63,15 @@ describe GdsApi::ContentApi do
|
|
60
63
|
artefact_response["web_url"] = "http://www.test.gov.uk/bank-holidays"
|
61
64
|
content_api_has_an_artefact("bank-holidays", artefact_response)
|
62
65
|
|
63
|
-
assert_equal "/bank-holidays", @api.artefact("bank-holidays")
|
66
|
+
assert_equal "/bank-holidays", @api.artefact("bank-holidays")['web_url']
|
64
67
|
|
65
68
|
clean_api = GdsApi::ContentApi.new(@base_api_url)
|
66
69
|
clean_artefact = clean_api.artefact("bank-holidays")
|
67
70
|
|
68
|
-
assert_equal
|
71
|
+
assert_equal(
|
72
|
+
"http://www.test.gov.uk/bank-holidays",
|
73
|
+
clean_artefact['web_url']
|
74
|
+
)
|
69
75
|
end
|
70
76
|
|
71
77
|
after do
|
@@ -85,7 +91,10 @@ describe GdsApi::ContentApi do
|
|
85
91
|
|
86
92
|
# Also check attribute access
|
87
93
|
first_section = response.first
|
88
|
-
assert_equal
|
94
|
+
assert_equal(
|
95
|
+
"#{@base_api_url}/tags/sections/crime.json",
|
96
|
+
first_section['id']
|
97
|
+
)
|
89
98
|
end
|
90
99
|
|
91
100
|
def section_page_url(page_parameter)
|
@@ -134,7 +143,10 @@ describe GdsApi::ContentApi do
|
|
134
143
|
|
135
144
|
sections = @api.sections
|
136
145
|
assert_equal 20, sections.with_subsequent_pages.count
|
137
|
-
assert_equal
|
146
|
+
assert_equal(
|
147
|
+
"Section 20",
|
148
|
+
sections.with_subsequent_pages.to_a.last['title']
|
149
|
+
)
|
138
150
|
end
|
139
151
|
|
140
152
|
it "should iterate across three or more pages" do
|
@@ -144,7 +156,10 @@ describe GdsApi::ContentApi do
|
|
144
156
|
|
145
157
|
sections = @api.sections
|
146
158
|
assert_equal 30, sections.with_subsequent_pages.count
|
147
|
-
assert_equal
|
159
|
+
assert_equal(
|
160
|
+
"Section 30",
|
161
|
+
sections.with_subsequent_pages.to_a.last['title']
|
162
|
+
)
|
148
163
|
end
|
149
164
|
|
150
165
|
it "should not load a page multiple times" do
|
@@ -225,7 +240,10 @@ describe GdsApi::ContentApi do
|
|
225
240
|
|
226
241
|
response = @api.artefacts
|
227
242
|
assert_equal 4, response.count
|
228
|
-
assert_equal
|
243
|
+
assert_equal(
|
244
|
+
%w(answer local_transaction place guide),
|
245
|
+
response.map { |item| item['format'] }
|
246
|
+
)
|
229
247
|
end
|
230
248
|
|
231
249
|
it "should work with a paginated response" do
|
@@ -257,7 +275,10 @@ describe GdsApi::ContentApi do
|
|
257
275
|
)
|
258
276
|
response = @api.artefacts
|
259
277
|
assert_equal 7, response.with_subsequent_pages.count
|
260
|
-
assert_equal
|
278
|
+
assert_equal(
|
279
|
+
"http://www.test.gov.uk/vat2",
|
280
|
+
response.with_subsequent_pages.to_a.last['web_url']
|
281
|
+
)
|
261
282
|
end
|
262
283
|
end
|
263
284
|
|
@@ -272,8 +293,18 @@ describe GdsApi::ContentApi do
|
|
272
293
|
response = @api.for_need(100123)
|
273
294
|
|
274
295
|
assert_equal 3, response.count
|
275
|
-
assert_equal
|
276
|
-
|
296
|
+
assert_equal(
|
297
|
+
[
|
298
|
+
"http://www.gov.uk/burrito",
|
299
|
+
"http://www.gov.uk/burrito-standard",
|
300
|
+
"http://www.gov.uk/local-burrito-place"
|
301
|
+
],
|
302
|
+
response.map { |item| item['web_url'] }
|
303
|
+
)
|
304
|
+
assert_equal(
|
305
|
+
%w(answer guide transaction),
|
306
|
+
response.map { |item| item['format'] }
|
307
|
+
)
|
277
308
|
end
|
278
309
|
end
|
279
310
|
|
@@ -288,7 +319,10 @@ describe GdsApi::ContentApi do
|
|
288
319
|
|
289
320
|
# Also check attribute access
|
290
321
|
first_section = response.first
|
291
|
-
assert_equal
|
322
|
+
assert_equal(
|
323
|
+
"#{@base_api_url}/tags/authors/justin-thyme.json",
|
324
|
+
first_section['id']
|
325
|
+
)
|
292
326
|
end
|
293
327
|
|
294
328
|
it "returns a sorted list of tags of a given type" do
|
@@ -296,17 +330,29 @@ describe GdsApi::ContentApi do
|
|
296
330
|
response = @api.tags("author", sort: "alphabetical")
|
297
331
|
|
298
332
|
first_section = response.first
|
299
|
-
assert_equal
|
333
|
+
assert_equal(
|
334
|
+
"#{@base_api_url}/tags/authors/justin-thyme.json",
|
335
|
+
first_section['id']
|
336
|
+
)
|
300
337
|
end
|
301
338
|
|
302
339
|
it "returns draft tags if requested" do
|
303
340
|
content_api_has_draft_and_live_tags(type: "specialist", draft: ["draft-tag-1"], live: ["live-tag-1"])
|
304
341
|
|
305
342
|
all_tags = @api.tags("specialist", draft: true)
|
306
|
-
assert_equal
|
343
|
+
assert_equal(
|
344
|
+
[
|
345
|
+
["draft-tag-1", "draft"],
|
346
|
+
["live-tag-1", "live"]
|
347
|
+
].to_set,
|
348
|
+
all_tags.map { |t| [t['slug'], t['state']] }.to_set
|
349
|
+
)
|
307
350
|
|
308
351
|
live_tags = @api.tags("specialist")
|
309
|
-
assert_equal
|
352
|
+
assert_equal(
|
353
|
+
[["live-tag-1", "live"]],
|
354
|
+
live_tags.map { |t| [t['slug'], t['state']] }
|
355
|
+
)
|
310
356
|
end
|
311
357
|
|
312
358
|
it "returns a list of root tags of a given type" do
|
@@ -319,7 +365,10 @@ describe GdsApi::ContentApi do
|
|
319
365
|
|
320
366
|
# Also check attribute access
|
321
367
|
first_section = response.first
|
322
|
-
assert_equal
|
368
|
+
assert_equal(
|
369
|
+
"#{@base_api_url}/tags/authors/oliver-sudden.json",
|
370
|
+
first_section['id']
|
371
|
+
)
|
323
372
|
end
|
324
373
|
|
325
374
|
it "returns a list of child tags of a given type" do
|
@@ -332,7 +381,10 @@ describe GdsApi::ContentApi do
|
|
332
381
|
|
333
382
|
# Also check attribute access
|
334
383
|
first_section = response.first
|
335
|
-
assert_equal
|
384
|
+
assert_equal(
|
385
|
+
"#{@base_api_url}/tags/genres/indie%2Findie-rock.json",
|
386
|
+
first_section['id']
|
387
|
+
)
|
336
388
|
end
|
337
389
|
|
338
390
|
it "returns a sorted list of child tags of a given type" do
|
@@ -340,7 +392,10 @@ describe GdsApi::ContentApi do
|
|
340
392
|
response = @api.child_tags("genre", "indie", sort: "alphabetical")
|
341
393
|
|
342
394
|
first_section = response.first
|
343
|
-
assert_equal
|
395
|
+
assert_equal(
|
396
|
+
"#{@base_api_url}/tags/genres/indie%2Findie-rock.json",
|
397
|
+
first_section['id']
|
398
|
+
)
|
344
399
|
end
|
345
400
|
|
346
401
|
it "returns tag information for a section" do
|
@@ -411,14 +466,16 @@ describe GdsApi::ContentApi do
|
|
411
466
|
end
|
412
467
|
|
413
468
|
describe "local authorities" do
|
414
|
-
it "should
|
469
|
+
it "should raise if no local authority found" do
|
415
470
|
stub_request(:get, "#{@base_api_url}/local_authorities/does-not-exist.json").
|
416
471
|
with(:headers => GdsApi::JsonClient.default_request_headers).
|
417
472
|
to_return(:status => 404,
|
418
473
|
:body => {"_response_info" => {"status" => "ok"}}.to_json,
|
419
474
|
:headers => {})
|
420
475
|
|
421
|
-
|
476
|
+
assert_raises(GdsApi::HTTPNotFound) do
|
477
|
+
@api.local_authority("does-not-exist")
|
478
|
+
end
|
422
479
|
end
|
423
480
|
|
424
481
|
it "should produce a LocalAuthority hash for an existing snac code" do
|
@@ -602,19 +659,37 @@ describe GdsApi::ContentApi do
|
|
602
659
|
content_api_has_licence :licence_identifier => "AB1234", :title => 'Test Licence 3', :slug => 'test-licence-3',
|
603
660
|
:licence_short_description => 'A short description'
|
604
661
|
|
605
|
-
results = @api.licences_for_ids([1234, 'AB1234', 'something'])
|
662
|
+
results = @api.licences_for_ids([1234, 'AB1234', 'something'])['results']
|
606
663
|
assert_equal 2, results.size
|
607
|
-
assert_equal
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
assert_equal
|
664
|
+
assert_equal(
|
665
|
+
%w(1234 AB1234),
|
666
|
+
results.map { |r| r['details']['licence_identifier'] }
|
667
|
+
)
|
668
|
+
assert_equal(
|
669
|
+
['Test Licence 1', 'Test Licence 3'],
|
670
|
+
results.map { |item| item['title'] }.sort
|
671
|
+
)
|
672
|
+
assert_equal(
|
673
|
+
[
|
674
|
+
'http://www.test.gov.uk/test-licence-1',
|
675
|
+
'http://www.test.gov.uk/test-licence-3'
|
676
|
+
],
|
677
|
+
results.map { |item| item['web_url'] }.sort
|
678
|
+
)
|
679
|
+
assert_equal(
|
680
|
+
'A short description',
|
681
|
+
results[0]['details']['licence_short_description']
|
682
|
+
)
|
683
|
+
assert_equal(
|
684
|
+
'A short description',
|
685
|
+
results[1]['details']['licence_short_description']
|
686
|
+
)
|
612
687
|
end
|
613
688
|
|
614
689
|
it "should return empty array with no licences" do
|
615
690
|
setup_content_api_licences_stubs
|
616
691
|
|
617
|
-
assert_equal [], @api.licences_for_ids([123,124])
|
692
|
+
assert_equal [], @api.licences_for_ids([123, 124])['results']
|
618
693
|
end
|
619
694
|
|
620
695
|
it "should raise an error if publisher returns an error" do
|
@@ -622,7 +697,7 @@ describe GdsApi::ContentApi do
|
|
622
697
|
to_return(:status => [503, "Service temporarily unabailable"])
|
623
698
|
|
624
699
|
assert_raises GdsApi::HTTPServerError do
|
625
|
-
@api.licences_for_ids([123,124])
|
700
|
+
@api.licences_for_ids([123, 124])
|
626
701
|
end
|
627
702
|
end
|
628
703
|
end
|