rev-api 2.1.0 → 2.2.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitignore +21 -21
  4. data/.ruby-gemset +1 -1
  5. data/.ruby-version +1 -1
  6. data/.travis.yml +8 -8
  7. data/Gemfile +3 -3
  8. data/LICENSE +191 -191
  9. data/README.md +132 -132
  10. data/Rakefile +13 -13
  11. data/examples/cli.rb +270 -270
  12. data/lib/rev-api.rb +25 -25
  13. data/lib/rev-api/api.rb +326 -326
  14. data/lib/rev-api/api_serializable.rb +30 -30
  15. data/lib/rev-api/exceptions.rb +100 -100
  16. data/lib/rev-api/http_client.rb +97 -97
  17. data/lib/rev-api/models/order.rb +138 -138
  18. data/lib/rev-api/models/order_request.rb +222 -228
  19. data/lib/rev-api/version.rb +3 -3
  20. data/rev-api.gemspec +34 -34
  21. data/spec/fixtures/api_cassettes/cancel_order.yml +38 -38
  22. data/spec/fixtures/api_cassettes/cancel_order_not_allowed.yml +40 -40
  23. data/spec/fixtures/api_cassettes/get_attachment_content.yml +399 -399
  24. data/spec/fixtures/api_cassettes/get_attachment_content_as_pdf.yml +399 -399
  25. data/spec/fixtures/api_cassettes/get_attachment_content_as_text.yml +65 -65
  26. data/spec/fixtures/api_cassettes/get_attachment_content_as_youtube_transcript.yml +66 -66
  27. data/spec/fixtures/api_cassettes/get_attachment_content_unacceptable_representation.yml +42 -42
  28. data/spec/fixtures/api_cassettes/get_attachment_content_with_invalid_id.yml +42 -42
  29. data/spec/fixtures/api_cassettes/get_attachment_metadata.yml +42 -42
  30. data/spec/fixtures/api_cassettes/get_attachment_with_invalid_id.yml +40 -40
  31. data/spec/fixtures/api_cassettes/get_orders.yml +122 -122
  32. data/spec/fixtures/api_cassettes/get_orders_with_clientRef.yml +41 -41
  33. data/spec/fixtures/api_cassettes/get_tc_order.yml +44 -44
  34. data/spec/fixtures/api_cassettes/get_third_page_of_orders.yml +58 -58
  35. data/spec/fixtures/api_cassettes/get_tr_order.yml +44 -44
  36. data/spec/fixtures/api_cassettes/link_input.yml +44 -44
  37. data/spec/fixtures/api_cassettes/link_input_with_all_attributes.yml +44 -44
  38. data/spec/fixtures/api_cassettes/link_input_with_spaces_in_filename.yml +45 -45
  39. data/spec/fixtures/api_cassettes/not_found_order.yml +42 -42
  40. data/spec/fixtures/api_cassettes/submit_cp_order.yml +45 -45
  41. data/spec/fixtures/api_cassettes/submit_su_order.yml +45 -45
  42. data/spec/fixtures/api_cassettes/submit_tc_order_with_account_balance.yml +45 -45
  43. data/spec/fixtures/api_cassettes/submit_tc_order_with_invalid_request.yml +45 -45
  44. data/spec/fixtures/api_cassettes/submit_tc_order_without_specifying_payment.yml +45 -45
  45. data/spec/fixtures/api_cassettes/submit_tr_order.yml +44 -44
  46. data/spec/fixtures/api_cassettes/unauthorized.yml +42 -42
  47. data/spec/fixtures/api_cassettes/upload_input.yml +90 -90
  48. data/spec/fixtures/api_cassettes/upload_input_with_invalid_content_type.yml +91 -91
  49. data/spec/lib/rev/api_spec.rb +24 -24
  50. data/spec/lib/rev/cancel_order_spec.rb +24 -24
  51. data/spec/lib/rev/exceptions_spec.rb +8 -8
  52. data/spec/lib/rev/get_attachment_content_spec.rb +79 -79
  53. data/spec/lib/rev/get_attachment_metadata_spec.rb +33 -33
  54. data/spec/lib/rev/get_order_spec.rb +67 -67
  55. data/spec/lib/rev/get_orders_spec.rb +61 -61
  56. data/spec/lib/rev/http_client_spec.rb +32 -32
  57. data/spec/lib/rev/models/order_request_spec.rb +6 -14
  58. data/spec/lib/rev/models/order_spec.rb +58 -58
  59. data/spec/lib/rev/post_inputs_spec.rb +94 -94
  60. data/spec/lib/rev/post_order_spec.rb +195 -195
  61. data/spec/spec_helper.rb +49 -49
  62. metadata +39 -82
@@ -1,62 +1,62 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe 'GET /orders' do
4
- let(:client) { Rev.new('welcome', 'AAAAAu/YjZ3phXU5FsF35yIcgiA=', 'www.revtrunk.com') }
5
-
6
- describe 'GET /orders without page number' do
7
- it 'must get first page of existing orders' do
8
- VCR.insert_cassette 'get_orders'
9
-
10
- page = client.get_orders_page
11
-
12
- assert_requested :get, /.*\/api\/v1\/orders\?page=0/, :times => 1
13
-
14
- page.orders.must_be_instance_of Array
15
- page.results_per_page.must_equal 8
16
- page.orders.size.must_equal 8
17
- page.page.must_equal 0
18
- page.total_count.must_equal 77
19
- end
20
- end
21
-
22
- describe 'GET /orders?page={pagenum}' do
23
- it 'must load any page' do
24
- VCR.insert_cassette 'get_third_page_of_orders'
25
-
26
- page = client.get_orders_page(2)
27
-
28
- assert_requested :get, /.*\/api\/v1\/orders\?page=2/, :times => 1
29
-
30
- page.orders.size.must_equal 8
31
- page.page.must_equal 2
32
- page.orders.first.order_number.must_equal 'TC0229215557'
33
- end
34
- end
35
-
36
- describe 'GET /orders without client reference raises' do
37
- it 'must raise NotAcceptableError' do
38
- assert_raises(ArgumentError) { client.get_orders_by_client_ref }
39
- end
40
- end
41
-
42
- describe 'GET /orders?page=0&clientRef={client_ref}' do
43
- it 'must load order with given reference id' do
44
- VCR.insert_cassette 'get_orders_with_clientRef'
45
-
46
- page = client.get_orders_by_client_ref('my ref')
47
-
48
- assert_requested :get, /.*\/api\/v1\/orders\?clientRef=my%20ref&page=0/, :times => 1
49
-
50
- page.orders.must_be_instance_of Array
51
- page.results_per_page.must_equal 25
52
- page.orders.size.must_equal 1
53
- page.page.must_equal 0
54
- page.total_count.must_equal 1
55
- page.orders[0].order_number.must_equal 'CP0180436196'
56
- end
57
- end
58
-
59
- after do
60
- VCR.eject_cassette
61
- end
1
+ require_relative '../../spec_helper'
2
+
3
+ describe 'GET /orders' do
4
+ let(:client) { Rev.new('welcome', 'AAAAAu/YjZ3phXU5FsF35yIcgiA=', 'www.revtrunk.com') }
5
+
6
+ describe 'GET /orders without page number' do
7
+ it 'must get first page of existing orders' do
8
+ VCR.insert_cassette 'get_orders'
9
+
10
+ page = client.get_orders_page
11
+
12
+ assert_requested :get, /.*\/api\/v1\/orders\?page=0/, :times => 1
13
+
14
+ page.orders.must_be_instance_of Array
15
+ page.results_per_page.must_equal 8
16
+ page.orders.size.must_equal 8
17
+ page.page.must_equal 0
18
+ page.total_count.must_equal 77
19
+ end
20
+ end
21
+
22
+ describe 'GET /orders?page={pagenum}' do
23
+ it 'must load any page' do
24
+ VCR.insert_cassette 'get_third_page_of_orders'
25
+
26
+ page = client.get_orders_page(2)
27
+
28
+ assert_requested :get, /.*\/api\/v1\/orders\?page=2/, :times => 1
29
+
30
+ page.orders.size.must_equal 8
31
+ page.page.must_equal 2
32
+ page.orders.first.order_number.must_equal 'TC0229215557'
33
+ end
34
+ end
35
+
36
+ describe 'GET /orders without client reference raises' do
37
+ it 'must raise NotAcceptableError' do
38
+ assert_raises(ArgumentError) { client.get_orders_by_client_ref }
39
+ end
40
+ end
41
+
42
+ describe 'GET /orders?page=0&clientRef={client_ref}' do
43
+ it 'must load order with given reference id' do
44
+ VCR.insert_cassette 'get_orders_with_clientRef'
45
+
46
+ page = client.get_orders_by_client_ref('my ref')
47
+
48
+ assert_requested :get, /.*\/api\/v1\/orders\?clientRef=my%20ref&page=0/, :times => 1
49
+
50
+ page.orders.must_be_instance_of Array
51
+ page.results_per_page.must_equal 25
52
+ page.orders.size.must_equal 1
53
+ page.page.must_equal 0
54
+ page.total_count.must_equal 1
55
+ page.orders[0].order_number.must_equal 'CP0180436196'
56
+ end
57
+ end
58
+
59
+ after do
60
+ VCR.eject_cassette
61
+ end
62
62
  end
@@ -1,32 +1,32 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe Rev::HttpClient do
4
- it 'must support predefined production host' do
5
- client = Rev::HttpClient.new('foo', 'bar', Rev::Api::PRODUCTION_HOST)
6
- Rev::HttpClient.base_uri.must_equal 'https://www.rev.com/api/v1'
7
- end
8
-
9
- it 'must support predefined sandbox host' do
10
- client = Rev::HttpClient.new('foo', 'bar', Rev::Api::SANDBOX_HOST)
11
- Rev::HttpClient.base_uri.must_equal 'https://api-sandbox.rev.com/api/v1'
12
- end
13
-
14
- it 'must support custom host for development purposes' do
15
- client = Rev::HttpClient.new('foo', 'bar', 'localhost')
16
- Rev::HttpClient.base_uri.must_equal 'https://localhost/api/v1'
17
- end
18
-
19
- it 'must include authorization and User-Agent headers for any request' do
20
- host = 'www.example.com'
21
- stub_request(:any, /www\.example\.com\/.*/)
22
-
23
- client = Rev::HttpClient.new('foo', 'bar', host)
24
- response = client.get('/orders')
25
-
26
- assert_requested :get, "https://#{host}/api/v1/orders", :headers => {
27
- 'Authorization' => "Rev foo:bar",
28
- 'User-Agent' => Rev::HttpClient::USER_AGENT
29
- }
30
- end
31
- end
32
-
1
+ require_relative '../../spec_helper'
2
+
3
+ describe Rev::HttpClient do
4
+ it 'must support predefined production host' do
5
+ client = Rev::HttpClient.new('foo', 'bar', Rev::Api::PRODUCTION_HOST)
6
+ Rev::HttpClient.base_uri.must_equal 'https://www.rev.com/api/v1'
7
+ end
8
+
9
+ it 'must support predefined sandbox host' do
10
+ client = Rev::HttpClient.new('foo', 'bar', Rev::Api::SANDBOX_HOST)
11
+ Rev::HttpClient.base_uri.must_equal 'https://api-sandbox.rev.com/api/v1'
12
+ end
13
+
14
+ it 'must support custom host for development purposes' do
15
+ client = Rev::HttpClient.new('foo', 'bar', 'localhost')
16
+ Rev::HttpClient.base_uri.must_equal 'https://localhost/api/v1'
17
+ end
18
+
19
+ it 'must include authorization and User-Agent headers for any request' do
20
+ host = 'www.example.com'
21
+ stub_request(:any, /www\.example\.com\/.*/)
22
+
23
+ client = Rev::HttpClient.new('foo', 'bar', host)
24
+ response = client.get('/orders')
25
+
26
+ assert_requested :get, "https://#{host}/api/v1/orders", :headers => {
27
+ 'Authorization' => "Rev foo:bar",
28
+ 'User-Agent' => Rev::HttpClient::USER_AGENT
29
+ }
30
+ end
31
+ end
32
+
@@ -2,23 +2,15 @@ require_relative '../../../spec_helper'
2
2
 
3
3
  describe 'OrderRequest' do
4
4
 
5
- it 'has normal priority' do
6
- Rev::OrderRequest::PRIORITY[:normal].must_equal 'Normal'
7
- end
8
-
9
- it 'has time insensitivie priority' do
10
- Rev::OrderRequest::PRIORITY[:time_insensitivie].must_equal 'TimeInsensitivie'
11
- end
12
-
13
- it 'defaults to normal priority' do
5
+ it 'defaults to standard TAT guarantee' do
14
6
  order = Rev::OrderRequest.new({})
15
- order.priority.must_equal Rev::OrderRequest::PRIORITY[:normal]
7
+ order.non_standard_tat_guarantee.must_equal false
16
8
  end
17
9
 
18
- it 'accepts priority during init' do
19
- priority = Rev::OrderRequest::PRIORITY[:time_insensitivie]
20
- order = Rev::OrderRequest.new({ 'priority' => priority })
21
- order.priority.must_equal priority
10
+ it 'accepts non standard TAT guarantee flag during init' do
11
+ non_standard_tat_guarantee = true
12
+ order = Rev::OrderRequest.new({ 'non_standard_tat_guarantee' => non_standard_tat_guarantee })
13
+ order.non_standard_tat_guarantee.must_equal non_standard_tat_guarantee
22
14
  end
23
15
 
24
16
  it 'has caption options' do
@@ -1,58 +1,58 @@
1
- require_relative '../../../spec_helper'
2
-
3
- describe 'Order' do
4
- let(:cp_order) {
5
- Rev::Order.new (
6
- { 'attachments' => { },
7
- 'comments' => {},
8
- 'caption' => { 'total_length_seconds' => 300 }
9
- }
10
- )
11
- }
12
-
13
- it 'has caption info' do
14
- assert_respond_to cp_order, 'caption'
15
- end
16
-
17
- it 'parses caption info' do
18
- assert_kind_of Rev::CaptionInfo, cp_order.caption
19
- end
20
-
21
- it 'has captions attachments' do
22
- assert_respond_to cp_order, 'captions'
23
- end
24
-
25
- describe 'Attachments' do
26
- describe 'REPRESENTATIONS' do
27
- it 'has srt' do
28
- Rev::Attachment::REPRESENTATIONS[:srt].must_equal 'application/x-subrip'
29
- end
30
-
31
- it 'has scc' do
32
- Rev::Attachment::REPRESENTATIONS[:scc].must_equal 'text/x-scc'
33
- end
34
-
35
- it 'has ttml' do
36
- Rev::Attachment::REPRESENTATIONS[:ttml].must_equal 'application/ttml+xml'
37
- end
38
-
39
- it 'has qt' do
40
- Rev::Attachment::REPRESENTATIONS[:qt].must_equal 'application/x-quicktime-timedtext'
41
- end
42
- end
43
-
44
- describe 'KINDS' do
45
- it 'has caption' do
46
- Rev::Attachment::KINDS[:caption].must_equal 'caption'
47
- end
48
- end
49
- end # Attachments
50
-
51
- describe 'CaptionInfo' do
52
- it 'has total_length_seconds' do
53
- info = Rev::CaptionInfo.new({})
54
- assert_respond_to info, 'total_length_seconds'
55
- end
56
- end # CaptionInfo
57
- end
58
-
1
+ require_relative '../../../spec_helper'
2
+
3
+ describe 'Order' do
4
+ let(:cp_order) {
5
+ Rev::Order.new (
6
+ { 'attachments' => { },
7
+ 'comments' => {},
8
+ 'caption' => { 'total_length_seconds' => 300 }
9
+ }
10
+ )
11
+ }
12
+
13
+ it 'has caption info' do
14
+ assert_respond_to cp_order, 'caption'
15
+ end
16
+
17
+ it 'parses caption info' do
18
+ assert_kind_of Rev::CaptionInfo, cp_order.caption
19
+ end
20
+
21
+ it 'has captions attachments' do
22
+ assert_respond_to cp_order, 'captions'
23
+ end
24
+
25
+ describe 'Attachments' do
26
+ describe 'REPRESENTATIONS' do
27
+ it 'has srt' do
28
+ Rev::Attachment::REPRESENTATIONS[:srt].must_equal 'application/x-subrip'
29
+ end
30
+
31
+ it 'has scc' do
32
+ Rev::Attachment::REPRESENTATIONS[:scc].must_equal 'text/x-scc'
33
+ end
34
+
35
+ it 'has ttml' do
36
+ Rev::Attachment::REPRESENTATIONS[:ttml].must_equal 'application/ttml+xml'
37
+ end
38
+
39
+ it 'has qt' do
40
+ Rev::Attachment::REPRESENTATIONS[:qt].must_equal 'application/x-quicktime-timedtext'
41
+ end
42
+ end
43
+
44
+ describe 'KINDS' do
45
+ it 'has caption' do
46
+ Rev::Attachment::KINDS[:caption].must_equal 'caption'
47
+ end
48
+ end
49
+ end # Attachments
50
+
51
+ describe 'CaptionInfo' do
52
+ it 'has total_length_seconds' do
53
+ info = Rev::CaptionInfo.new({})
54
+ assert_respond_to info, 'total_length_seconds'
55
+ end
56
+ end # CaptionInfo
57
+ end
58
+
@@ -1,94 +1,94 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe 'POST /inputs' do
4
- let(:client) { Rev.new('welcome', 'AAAAAu/YjZ3phXU5FsF35yIcgiA=', 'www.revtrunk.com') }
5
-
6
- it 'must link external file with explicit content-type and file' do
7
- VCR.insert_cassette 'link_input_with_all_attributes'
8
-
9
- link = 'https://www.rev.com/content/img/rev/rev_logo_colored_top.png'
10
- filename = 'sourcedocument.png'
11
- content_type = 'image/png'
12
- new_input_location = client.create_input_from_link(link, filename, content_type)
13
-
14
- new_input_location.must_match 'urn:rev:inputmedia:'
15
- expected_body = {
16
- 'url' => link,
17
- 'filename' => filename,
18
- 'content_type' => content_type
19
- }
20
- assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
21
- req.headers['Content-Type'].must_equal 'application/json'
22
- actual_body = JSON.load req.body
23
- actual_body.must_equal expected_body
24
- end
25
- end
26
-
27
- it 'must quote the filename' do
28
- VCR.insert_cassette 'link_input_with_spaces_in_filename'
29
-
30
- link = 'https://s3-us-west-2.amazonaws.com/public-rev/translation/Rev Certified Template (2014-06-11).docx'
31
- filename = 'Rev Certified Template (2014-06-11).docx'
32
- content_type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
33
- new_input_location = client.create_input_from_link(link, filename, content_type)
34
-
35
- new_input_location.must_match 'urn:rev:inputmedia:'
36
- expected_body = {
37
- 'url' => link,
38
- 'filename' => filename,
39
- 'content_type' => content_type
40
- }
41
- assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
42
- actual_body = JSON.load req.body
43
- actual_body.must_equal expected_body
44
- end
45
- end
46
-
47
- it 'must link external file without content-type and filename' do
48
- VCR.insert_cassette 'link_input'
49
-
50
- link = 'https://www.rev.com/content/img/rev/rev_logo_colored_top.png'
51
- new_input_location = client.create_input_from_link(link)
52
-
53
- new_input_location.must_match 'urn:rev:inputmedia:'
54
- expected_body = { 'url' => link }
55
- assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
56
- req.headers['Content-Type'].must_equal 'application/json'
57
- actual_body = JSON.load req.body
58
- actual_body.must_equal expected_body
59
- end
60
- end
61
-
62
- it 'must upload source file directly' do
63
- VCR.insert_cassette 'upload_input'
64
-
65
- filename = './spec/fixtures/sourcedocument.png'
66
- content_type = 'image/png'
67
-
68
- new_input_location = client.upload_input(filename, content_type)
69
-
70
- new_input_location.must_match 'urn:rev:inputmedia:'
71
- expected_body = File.read(filename)
72
- assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
73
- req.headers['Content-Type'].must_equal content_type
74
- req.headers['Content-Disposition'].must_equal 'attachment; filename="sourcedocument.png"'
75
- req.body.must_equal expected_body
76
- end
77
- end
78
-
79
- it 'must raise BadRequestError on failure' do
80
- VCR.insert_cassette 'upload_input_with_invalid_content_type'
81
-
82
- filename = './spec/fixtures/sourcedocument.png'
83
- content_type = 'trololo'
84
-
85
- action = lambda { client.upload_input(filename, content_type) }
86
- exception = action.must_raise Rev::BadRequestError
87
- exception.message.must_match '10001: The content-type explicitly specified in the request is not supported for input media'
88
- exception.code.must_equal Rev::InputRequestErrorCodes::UNSUPPORTED_CONTENT_TYPE
89
- end
90
-
91
- after do
92
- VCR.eject_cassette
93
- end
94
- end
1
+ require_relative '../../spec_helper'
2
+
3
+ describe 'POST /inputs' do
4
+ let(:client) { Rev.new('welcome', 'AAAAAu/YjZ3phXU5FsF35yIcgiA=', 'www.revtrunk.com') }
5
+
6
+ it 'must link external file with explicit content-type and file' do
7
+ VCR.insert_cassette 'link_input_with_all_attributes'
8
+
9
+ link = 'https://www.rev.com/content/img/rev/rev_logo_colored_top.png'
10
+ filename = 'sourcedocument.png'
11
+ content_type = 'image/png'
12
+ new_input_location = client.create_input_from_link(link, filename, content_type)
13
+
14
+ new_input_location.must_match 'urn:rev:inputmedia:'
15
+ expected_body = {
16
+ 'url' => link,
17
+ 'filename' => filename,
18
+ 'content_type' => content_type
19
+ }
20
+ assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
21
+ req.headers['Content-Type'].must_equal 'application/json'
22
+ actual_body = JSON.load req.body
23
+ actual_body.must_equal expected_body
24
+ end
25
+ end
26
+
27
+ it 'must quote the filename' do
28
+ VCR.insert_cassette 'link_input_with_spaces_in_filename'
29
+
30
+ link = 'https://s3-us-west-2.amazonaws.com/public-rev/translation/Rev Certified Template (2014-06-11).docx'
31
+ filename = 'Rev Certified Template (2014-06-11).docx'
32
+ content_type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
33
+ new_input_location = client.create_input_from_link(link, filename, content_type)
34
+
35
+ new_input_location.must_match 'urn:rev:inputmedia:'
36
+ expected_body = {
37
+ 'url' => link,
38
+ 'filename' => filename,
39
+ 'content_type' => content_type
40
+ }
41
+ assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
42
+ actual_body = JSON.load req.body
43
+ actual_body.must_equal expected_body
44
+ end
45
+ end
46
+
47
+ it 'must link external file without content-type and filename' do
48
+ VCR.insert_cassette 'link_input'
49
+
50
+ link = 'https://www.rev.com/content/img/rev/rev_logo_colored_top.png'
51
+ new_input_location = client.create_input_from_link(link)
52
+
53
+ new_input_location.must_match 'urn:rev:inputmedia:'
54
+ expected_body = { 'url' => link }
55
+ assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
56
+ req.headers['Content-Type'].must_equal 'application/json'
57
+ actual_body = JSON.load req.body
58
+ actual_body.must_equal expected_body
59
+ end
60
+ end
61
+
62
+ it 'must upload source file directly' do
63
+ VCR.insert_cassette 'upload_input'
64
+
65
+ filename = './spec/fixtures/sourcedocument.png'
66
+ content_type = 'image/png'
67
+
68
+ new_input_location = client.upload_input(filename, content_type)
69
+
70
+ new_input_location.must_match 'urn:rev:inputmedia:'
71
+ expected_body = File.read(filename)
72
+ assert_requested(:post, /.*\/inputs/, :times => 1) do |req|
73
+ req.headers['Content-Type'].must_equal content_type
74
+ req.headers['Content-Disposition'].must_equal 'attachment; filename="sourcedocument.png"'
75
+ req.body.must_equal expected_body
76
+ end
77
+ end
78
+
79
+ it 'must raise BadRequestError on failure' do
80
+ VCR.insert_cassette 'upload_input_with_invalid_content_type'
81
+
82
+ filename = './spec/fixtures/sourcedocument.png'
83
+ content_type = 'trololo'
84
+
85
+ action = lambda { client.upload_input(filename, content_type) }
86
+ exception = action.must_raise Rev::BadRequestError
87
+ exception.message.must_match '10001: The content-type explicitly specified in the request is not supported for input media'
88
+ exception.code.must_equal Rev::InputRequestErrorCodes::UNSUPPORTED_CONTENT_TYPE
89
+ end
90
+
91
+ after do
92
+ VCR.eject_cassette
93
+ end
94
+ end