gds-api-adapters 36.4.1 → 37.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.
- 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
|