gds-api-adapters 10.8.0 → 10.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gds_api/asset_manager.rb +16 -0
- data/lib/gds_api/base.rb +1 -0
- data/lib/gds_api/json_client.rb +7 -0
- data/lib/gds_api/version.rb +1 -1
- data/test/asset_manager_test.rb +52 -19
- data/test/json_client_test.rb +29 -0
- metadata +4 -4
@@ -19,6 +19,22 @@ class GdsApi::AssetManager < GdsApi::Base
|
|
19
19
|
post_multipart("#{base_url}/assets", { :asset => asset })
|
20
20
|
end
|
21
21
|
|
22
|
+
# Updates an asset given attributes
|
23
|
+
#
|
24
|
+
# Makes a `PUT` request to the asset manager api to update an asset.
|
25
|
+
# The api accepts the following attributes:
|
26
|
+
#
|
27
|
+
# * `file` - a File object
|
28
|
+
#
|
29
|
+
# @param id [String] The asset identifier
|
30
|
+
# @param asset [Hash] The attributes for the asset to send to the api.
|
31
|
+
# @return [Net::HTTPResponse] The raw http response from the api.
|
32
|
+
#
|
33
|
+
# @raise [HTTPErrorResponse] if the request returns an error
|
34
|
+
def update_asset(id, asset)
|
35
|
+
put_multipart("#{base_url}/assets/#{id}", { :asset => asset })
|
36
|
+
end
|
37
|
+
|
22
38
|
# Fetches an asset given the id
|
23
39
|
#
|
24
40
|
# @param id [String] The asset identifier
|
data/lib/gds_api/base.rb
CHANGED
data/lib/gds_api/json_client.rb
CHANGED
@@ -99,6 +99,13 @@ module GdsApi
|
|
99
99
|
Response.new(r)
|
100
100
|
end
|
101
101
|
|
102
|
+
def put_multipart(url, params)
|
103
|
+
r = do_raw_request(:put, url, params.merge({
|
104
|
+
:multipart => true
|
105
|
+
}))
|
106
|
+
Response.new(r)
|
107
|
+
end
|
108
|
+
|
102
109
|
private
|
103
110
|
def do_raw_request(method, url, params = nil)
|
104
111
|
response = do_request(method, url, params)
|
data/lib/gds_api/version.rb
CHANGED
data/test/asset_manager_test.rb
CHANGED
@@ -1,39 +1,72 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'gds_api/asset_manager'
|
3
3
|
require 'gds_api/test_helpers/asset_manager'
|
4
|
+
require 'json'
|
4
5
|
|
5
6
|
describe GdsApi::AssetManager do
|
6
7
|
include GdsApi::TestHelpers::AssetManager
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
@api = GdsApi::AssetManager.new(@base_api_url)
|
11
|
-
end
|
9
|
+
let(:base_api_url) { Plek.current.find('asset-manager') }
|
10
|
+
let(:api) { GdsApi::AssetManager.new(base_api_url) }
|
12
11
|
|
13
|
-
|
14
|
-
stub_request(:post, "#{@base_api_url}/assets").
|
15
|
-
with(:body => %r{Content\-Disposition: form\-data; name="asset\[file\]"; filename="hello\.txt"\r\nContent\-Type: text/plain}).
|
16
|
-
to_return(:body => '{"asset":{"id":"http://asset-manager.dev.gov.uk/assets/51278b2b686c82076c000003"}}', :status => 201)
|
12
|
+
let(:file_fixture) { load_fixture_file("hello.txt") }
|
17
13
|
|
18
|
-
|
19
|
-
|
14
|
+
let(:asset_url) { [base_api_url, "assets", asset_id].join("/") }
|
15
|
+
let(:asset_id) { "new-asset-id" }
|
20
16
|
|
21
|
-
|
22
|
-
|
17
|
+
let(:asset_manager_response) {
|
18
|
+
{
|
19
|
+
asset: {
|
20
|
+
id: asset_url,
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
23
24
|
|
24
|
-
it "
|
25
|
-
|
25
|
+
it "creates an asset with a file" do
|
26
|
+
req = stub_request(:post, "#{base_api_url}/assets").
|
27
|
+
with(:body => %r{Content\-Disposition: form\-data; name="asset\[file\]"; filename="hello\.txt"\r\nContent\-Type: text/plain}).
|
28
|
+
to_return(:body => JSON.dump(asset_manager_response), :status => 201)
|
26
29
|
|
27
|
-
|
30
|
+
response = api.create_asset(:file => file_fixture)
|
28
31
|
|
29
|
-
assert_equal
|
30
|
-
|
31
|
-
assert_equal "http://fooey.gov.uk/media/photo.jpg", asset.file_url
|
32
|
+
assert_equal asset_url, response.asset.id
|
33
|
+
assert_requested(req)
|
32
34
|
end
|
33
35
|
|
34
36
|
it "returns nil when an asset does not exist" do
|
35
37
|
asset_manager_does_not_have_an_asset("not-really-here")
|
36
38
|
|
37
|
-
assert_nil
|
39
|
+
assert_nil api.asset("not-really-here")
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "an asset exists" do
|
43
|
+
before do
|
44
|
+
asset_manager_has_an_asset(
|
45
|
+
asset_id,
|
46
|
+
"name" => "photo.jpg",
|
47
|
+
"content_type" => "image/jpeg",
|
48
|
+
"file_url" => "http://fooey.gov.uk/media/photo.jpg",
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
let(:asset_id) { "test-id" }
|
53
|
+
|
54
|
+
it "updates an asset with a file" do
|
55
|
+
req = stub_request(:put, "http://asset-manager.dev.gov.uk/assets/test-id").
|
56
|
+
to_return(:body => JSON.dump(asset_manager_response), :status => 200)
|
57
|
+
|
58
|
+
response = api.update_asset(asset_id, :file => file_fixture)
|
59
|
+
|
60
|
+
assert_equal "#{base_api_url}/assets/#{asset_id}", response.asset.id
|
61
|
+
assert_requested(req)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "retrieves an asset" do
|
65
|
+
asset = api.asset(asset_id)
|
66
|
+
|
67
|
+
assert_equal "photo.jpg", asset.name
|
68
|
+
assert_equal "image/jpeg", asset.content_type
|
69
|
+
assert_equal "http://fooey.gov.uk/media/photo.jpg", asset.file_url
|
70
|
+
end
|
38
71
|
end
|
39
72
|
end
|
data/test/json_client_test.rb
CHANGED
@@ -695,6 +695,35 @@ class JsonClientTest < MiniTest::Spec
|
|
695
695
|
end
|
696
696
|
end
|
697
697
|
|
698
|
+
# EXACTLY the same as the post_multipart tests
|
699
|
+
def test_client_can_put_multipart_responses
|
700
|
+
url = "http://some.endpoint/some.json"
|
701
|
+
stub_request(:put, url).
|
702
|
+
with(:body => %r{Content\-Disposition: form\-data; name="a"\r\n\r\n123}, :headers => {'Content-Type' => %r{multipart/form-data; boundary=\d+}}).
|
703
|
+
to_return(:body => '{"b": "1"}', :status => 200)
|
704
|
+
|
705
|
+
response = @client.put_multipart("http://some.endpoint/some.json", {"a" => "123"})
|
706
|
+
assert_equal "1", response["b"]
|
707
|
+
end
|
708
|
+
|
709
|
+
def test_put_multipart_should_raise_exception_if_not_found
|
710
|
+
url = "http://some.endpoint/some.json"
|
711
|
+
stub_request(:put, url).to_return(:body => '', :status => 404)
|
712
|
+
|
713
|
+
assert_raises GdsApi::HTTPNotFound do
|
714
|
+
@client.put_multipart("http://some.endpoint/some.json", {"a" => "123"})
|
715
|
+
end
|
716
|
+
end
|
717
|
+
|
718
|
+
def test_put_multipart_should_raise_error_responses
|
719
|
+
url = "http://some.endpoint/some.json"
|
720
|
+
stub_request(:put, url).to_return(:body => '', :status => 500)
|
721
|
+
|
722
|
+
assert_raises GdsApi::HTTPErrorResponse do
|
723
|
+
@client.put_multipart("http://some.endpoint/some.json", {"a" => "123"})
|
724
|
+
end
|
725
|
+
end
|
726
|
+
|
698
727
|
def test_should_raise_error_if_attempting_to_disable_timeout
|
699
728
|
assert_raises RuntimeError do
|
700
729
|
GdsApi::JsonClient.new(:disable_timeout => true)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gds-api-adapters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.
|
4
|
+
version: 10.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: plek
|
@@ -376,7 +376,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
376
376
|
version: '0'
|
377
377
|
segments:
|
378
378
|
- 0
|
379
|
-
hash:
|
379
|
+
hash: -553660564906139153
|
380
380
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
381
381
|
none: false
|
382
382
|
requirements:
|
@@ -385,7 +385,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
385
385
|
version: '0'
|
386
386
|
segments:
|
387
387
|
- 0
|
388
|
-
hash:
|
388
|
+
hash: -553660564906139153
|
389
389
|
requirements: []
|
390
390
|
rubyforge_project:
|
391
391
|
rubygems_version: 1.8.23
|