groupdocs 0.1.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/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/README.md +141 -0
- data/Rakefile +9 -0
- data/groupdocs.gemspec +28 -0
- data/lib/groupdocs.rb +53 -0
- data/lib/groupdocs/api.rb +3 -0
- data/lib/groupdocs/api/entity.rb +113 -0
- data/lib/groupdocs/api/helpers.rb +5 -0
- data/lib/groupdocs/api/helpers/access_helper.rb +56 -0
- data/lib/groupdocs/api/helpers/actions_helper.rb +48 -0
- data/lib/groupdocs/api/helpers/rest_helper.rb +89 -0
- data/lib/groupdocs/api/helpers/status_helper.rb +48 -0
- data/lib/groupdocs/api/helpers/url_helper.rb +89 -0
- data/lib/groupdocs/api/request.rb +73 -0
- data/lib/groupdocs/api/sugar/lookup.rb +48 -0
- data/lib/groupdocs/datasource.rb +162 -0
- data/lib/groupdocs/datasource/field.rb +44 -0
- data/lib/groupdocs/document.rb +513 -0
- data/lib/groupdocs/document/annotation.rb +215 -0
- data/lib/groupdocs/document/annotation/reply.rb +167 -0
- data/lib/groupdocs/document/change.rb +35 -0
- data/lib/groupdocs/document/field.rb +27 -0
- data/lib/groupdocs/document/metadata.rb +26 -0
- data/lib/groupdocs/document/rectangle.rb +24 -0
- data/lib/groupdocs/document/view.rb +36 -0
- data/lib/groupdocs/errors.rb +10 -0
- data/lib/groupdocs/job.rb +201 -0
- data/lib/groupdocs/questionnaire.rb +221 -0
- data/lib/groupdocs/questionnaire/execution.rb +120 -0
- data/lib/groupdocs/questionnaire/page.rb +43 -0
- data/lib/groupdocs/questionnaire/question.rb +75 -0
- data/lib/groupdocs/questionnaire/question/answer.rb +10 -0
- data/lib/groupdocs/storage.rb +37 -0
- data/lib/groupdocs/storage/file.rb +248 -0
- data/lib/groupdocs/storage/folder.rb +314 -0
- data/lib/groupdocs/storage/package.rb +42 -0
- data/lib/groupdocs/user.rb +50 -0
- data/lib/groupdocs/version.rb +3 -0
- data/spec/groupdocs/api/entity_spec.rb +54 -0
- data/spec/groupdocs/api/helpers/access_helper_spec.rb +89 -0
- data/spec/groupdocs/api/helpers/actions_helper_spec.rb +51 -0
- data/spec/groupdocs/api/helpers/rest_helper_spec.rb +187 -0
- data/spec/groupdocs/api/helpers/status_helper_spec.rb +85 -0
- data/spec/groupdocs/api/helpers/url_helper_spec.rb +93 -0
- data/spec/groupdocs/api/request_spec.rb +85 -0
- data/spec/groupdocs/datasource/field_spec.rb +50 -0
- data/spec/groupdocs/datasource_spec.rb +156 -0
- data/spec/groupdocs/document/annotation/reply_spec.rb +179 -0
- data/spec/groupdocs/document/annotation_spec.rb +226 -0
- data/spec/groupdocs/document/change_spec.rb +35 -0
- data/spec/groupdocs/document/field_spec.rb +31 -0
- data/spec/groupdocs/document/metadata_spec.rb +26 -0
- data/spec/groupdocs/document/rectangle_spec.rb +34 -0
- data/spec/groupdocs/document/view_spec.rb +36 -0
- data/spec/groupdocs/document_spec.rb +509 -0
- data/spec/groupdocs/errors_spec.rb +7 -0
- data/spec/groupdocs/job_spec.rb +196 -0
- data/spec/groupdocs/questionnaire/execution_spec.rb +136 -0
- data/spec/groupdocs/questionnaire/page_spec.rb +50 -0
- data/spec/groupdocs/questionnaire/question/answer_spec.rb +11 -0
- data/spec/groupdocs/questionnaire/question_spec.rb +84 -0
- data/spec/groupdocs/questionnaire_spec.rb +217 -0
- data/spec/groupdocs/storage/file_spec.rb +242 -0
- data/spec/groupdocs/storage/folder_spec.rb +310 -0
- data/spec/groupdocs/storage/package_spec.rb +41 -0
- data/spec/groupdocs/storage_spec.rb +27 -0
- data/spec/groupdocs/user_spec.rb +53 -0
- data/spec/groupdocs_spec.rb +56 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/support/files/resume.pdf +0 -0
- data/spec/support/json/annotation_collaborators_set.json +16 -0
- data/spec/support/json/annotation_create.json +12 -0
- data/spec/support/json/annotation_list.json +32 -0
- data/spec/support/json/annotation_remove.json +9 -0
- data/spec/support/json/annotation_replies_create.json +9 -0
- data/spec/support/json/annotation_replies_get.json +25 -0
- data/spec/support/json/comparison_changes.json +46 -0
- data/spec/support/json/comparison_compare.json +8 -0
- data/spec/support/json/comparison_document.json +10 -0
- data/spec/support/json/datasource_add.json +8 -0
- data/spec/support/json/datasource_get.json +22 -0
- data/spec/support/json/datasource_remove.json +8 -0
- data/spec/support/json/datasource_update.json +8 -0
- data/spec/support/json/document_access_info_get.json +14 -0
- data/spec/support/json/document_convert.json +8 -0
- data/spec/support/json/document_datasource.json +10 -0
- data/spec/support/json/document_fields.json +34 -0
- data/spec/support/json/document_formats.json +8 -0
- data/spec/support/json/document_metadata.json +15 -0
- data/spec/support/json/document_questionnaire_create.json +9 -0
- data/spec/support/json/document_questionnaires.json +23 -0
- data/spec/support/json/document_sharers_remove.json +8 -0
- data/spec/support/json/document_sharers_set.json +16 -0
- data/spec/support/json/document_views.json +32 -0
- data/spec/support/json/file_compress.json +8 -0
- data/spec/support/json/file_copy.json +14 -0
- data/spec/support/json/file_delete.json +5 -0
- data/spec/support/json/file_move.json +14 -0
- data/spec/support/json/file_upload.json +8 -0
- data/spec/support/json/folder_create.json +8 -0
- data/spec/support/json/folder_delete.json +5 -0
- data/spec/support/json/folder_list.json +21 -0
- data/spec/support/json/folder_move.json +8 -0
- data/spec/support/json/folder_sharers_get.json +16 -0
- data/spec/support/json/folder_sharers_remove.json +8 -0
- data/spec/support/json/folder_sharers_set.json +16 -0
- data/spec/support/json/job_add_url.json +8 -0
- data/spec/support/json/job_create.json +8 -0
- data/spec/support/json/job_documents.json +39 -0
- data/spec/support/json/job_file_add.json +8 -0
- data/spec/support/json/job_update.json +7 -0
- data/spec/support/json/jobs_get.json +52 -0
- data/spec/support/json/package_create.json +7 -0
- data/spec/support/json/questionnaire_create.json +8 -0
- data/spec/support/json/questionnaire_datasources.json +26 -0
- data/spec/support/json/questionnaire_execution_create.json +9 -0
- data/spec/support/json/questionnaire_execution_status_set.json +8 -0
- data/spec/support/json/questionnaire_execution_update.json +8 -0
- data/spec/support/json/questionnaire_executions.json +24 -0
- data/spec/support/json/questionnaire_get.json +14 -0
- data/spec/support/json/questionnaire_remove.json +8 -0
- data/spec/support/json/questionnaire_update.json +8 -0
- data/spec/support/json/questionnaires_get.json +22 -0
- data/spec/support/json/storage_info.json +10 -0
- data/spec/support/shared_examples/api/entity.rb +37 -0
- data/spec/support/shared_examples/api/helpers/status_helper.rb +12 -0
- data/spec/support/shared_examples/api/sugar/lookup.rb +57 -0
- metadata +356 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Api::Helpers::Access do
|
|
4
|
+
|
|
5
|
+
subject do
|
|
6
|
+
GroupDocs::Api::Request.new(method: :GET)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe 'MODES' do
|
|
10
|
+
it 'contains hash of access modes' do
|
|
11
|
+
described_class::MODES.should == {
|
|
12
|
+
private: 0,
|
|
13
|
+
restricted: 1,
|
|
14
|
+
public: 2,
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe '#client_id' do
|
|
20
|
+
it 'returns passed to method client ID' do
|
|
21
|
+
subject.options[:access] = { client_id: 'method_client_id' }
|
|
22
|
+
subject.options[:access].should_receive(:[]).with(:client_id).and_return('method_client_id')
|
|
23
|
+
subject.send(:client_id).should == 'method_client_id'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'returns GroupDocs.client_id if access has not been passed to method' do
|
|
27
|
+
subject.options[:access] = {}
|
|
28
|
+
GroupDocs.should_receive(:client_id).and_return('static_client_id')
|
|
29
|
+
subject.send(:client_id).should == 'static_client_id'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'raises error if client ID has not been set' do
|
|
33
|
+
subject.options[:access] = {}
|
|
34
|
+
GroupDocs.client_id = nil
|
|
35
|
+
-> { subject.send(:client_id) }.should raise_error(GroupDocs::Errors::NoClientIdError)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#private_key' do
|
|
40
|
+
it 'returns passed to method private key' do
|
|
41
|
+
subject.options[:access] = { private_key: 'method_private_key' }
|
|
42
|
+
subject.options[:access].should_receive(:[]).with(:private_key).and_return('method_private_key')
|
|
43
|
+
subject.send(:private_key).should == 'method_private_key'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'returns GroupDocs.private_key if access has not been passed to method' do
|
|
47
|
+
subject.options[:access] = {}
|
|
48
|
+
GroupDocs.should_receive(:private_key).and_return('static_private_key')
|
|
49
|
+
subject.send(:private_key).should == 'static_private_key'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'raises error if private key has not been set' do
|
|
53
|
+
subject.options[:access] = {}
|
|
54
|
+
GroupDocs.private_key = nil
|
|
55
|
+
-> { subject.send(:private_key) }.should raise_error(GroupDocs::Errors::NoPrivateKeyError)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '#parse_access_mode' do
|
|
60
|
+
it 'raise error if mode is unknown' do
|
|
61
|
+
-> { subject.send(:parse_access_mode, 3) }.should raise_error(ArgumentError)
|
|
62
|
+
-> { subject.send(:parse_access_mode, :unknown) }.should raise_error(ArgumentError)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'returns :private if passed mode is 0' do
|
|
66
|
+
subject.send(:parse_access_mode, 0).should == :private
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'returns :restricted if passed mode is 1' do
|
|
70
|
+
subject.send(:parse_access_mode, 1).should == :restricted
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns :public if passed mode is 2' do
|
|
74
|
+
subject.send(:parse_access_mode, 2).should == :public
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'returns 0 if passed mode is :private' do
|
|
78
|
+
subject.send(:parse_access_mode, :private).should == 0
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'returns 1 if passed mode is :restricted' do
|
|
82
|
+
subject.send(:parse_access_mode, :restricted).should == 1
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'returns 2 if passed mode is :public' do
|
|
86
|
+
subject.send(:parse_access_mode, :public).should == 2
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Api::Helpers::Actions do
|
|
4
|
+
|
|
5
|
+
subject do
|
|
6
|
+
Object.extend(described_class)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe 'ACTIONS' do
|
|
10
|
+
it 'contains hash of actions' do
|
|
11
|
+
described_class::ACTIONS.should == {
|
|
12
|
+
none: 0,
|
|
13
|
+
convert: 1,
|
|
14
|
+
combine: 2,
|
|
15
|
+
compress_zip: 4,
|
|
16
|
+
compress_rar: 8,
|
|
17
|
+
trace: 16,
|
|
18
|
+
convert_body: 32,
|
|
19
|
+
bind_data: 64,
|
|
20
|
+
print: 128,
|
|
21
|
+
import_annotations: 256,
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe '.convert_actions' do
|
|
27
|
+
it 'raises error if actions is not an array' do
|
|
28
|
+
-> { subject.convert_actions(:convert) }.should raise_error(ArgumentError)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'raises error if action is unknown' do
|
|
32
|
+
-> { subject.convert_actions(%w(unknown)) }.should raise_error(ArgumentError)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'converts each action to Symbol' do
|
|
36
|
+
actions = %w(none convert)
|
|
37
|
+
actions.each do |action|
|
|
38
|
+
symbol = action.to_sym
|
|
39
|
+
action.should_receive(:to_sym).and_return(symbol)
|
|
40
|
+
end
|
|
41
|
+
subject.convert_actions(actions)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'returns correct byte flag' do
|
|
45
|
+
actions = %w(none convert combine compress_zip compress_rar trace convert_body bind_data print import_annotations)
|
|
46
|
+
flag = subject.convert_actions(actions)
|
|
47
|
+
flag.should be_an(Integer)
|
|
48
|
+
flag.should == 511
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Api::Helpers::REST do
|
|
4
|
+
|
|
5
|
+
subject do
|
|
6
|
+
GroupDocs::Api::Request.new(method: :GET)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe 'DEFAULT_HEADERS' do
|
|
10
|
+
subject { described_class::DEFAULT_HEADERS }
|
|
11
|
+
|
|
12
|
+
it 'includes "Accept: application/json"' do
|
|
13
|
+
subject.should include(accept: 'application/json')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'includes "Content-length: 0"' do
|
|
17
|
+
subject.should include(content_length: 0)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#prepare_request' do
|
|
22
|
+
it 'merges default headers with passed' do
|
|
23
|
+
subject.options[:headers] = { keep_alive: 300 }
|
|
24
|
+
merged_headers = described_class::DEFAULT_HEADERS.merge(keep_alive: 300)
|
|
25
|
+
lambda do
|
|
26
|
+
subject.send(:prepare_request)
|
|
27
|
+
end.should change { subject.options[:headers] }.to(merged_headers)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'uses default headers when not passed' do
|
|
31
|
+
lambda do
|
|
32
|
+
subject.send(:prepare_request)
|
|
33
|
+
end.should change { subject.options[:headers] }.to(described_class::DEFAULT_HEADERS)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'downcases HTTP method' do
|
|
37
|
+
lambda do
|
|
38
|
+
subject.send(:prepare_request)
|
|
39
|
+
end.should change { subject.options[:method] }.to(:get)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'coverts request body to JSON' do
|
|
43
|
+
subject.options[:method] = :POST
|
|
44
|
+
subject.options[:request_body] = { body: 'test' }
|
|
45
|
+
lambda do
|
|
46
|
+
subject.send(:prepare_request)
|
|
47
|
+
end.should change { subject.options[:request_body] }.to('{"body":"test"}')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'does not convert request body to JSON if payload is file' do
|
|
51
|
+
file = Object::File.new(__FILE__, 'rb')
|
|
52
|
+
subject.options[:method] = :POST
|
|
53
|
+
subject.options[:request_body] = file
|
|
54
|
+
subject.send(:prepare_request)
|
|
55
|
+
subject.options[:request_body].should == file
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'calculates and sets Content-length' do
|
|
59
|
+
subject.options[:method] = :POST
|
|
60
|
+
subject.options[:headers] = {}
|
|
61
|
+
subject.options[:request_body] = { body: 'test' }
|
|
62
|
+
lambda do
|
|
63
|
+
subject.send(:prepare_request)
|
|
64
|
+
end.should change { subject.options[:headers][:content_length] }.to(15)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'sets Content-Type header if necessary' do
|
|
68
|
+
subject.options[:method] = :POST
|
|
69
|
+
subject.options[:headers] = {}
|
|
70
|
+
subject.options[:request_body] = { body: 'test' }
|
|
71
|
+
lambda do
|
|
72
|
+
subject.send(:prepare_request)
|
|
73
|
+
end.should change { subject.options[:headers][:content_type] }.to('application/json')
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe '#send_request' do
|
|
78
|
+
%w(GET DOWNLOAD POST PUT DELETE).each do |method|
|
|
79
|
+
it "sends HTTP #{method} request" do
|
|
80
|
+
mock_api_server('{"status": "Ok"}')
|
|
81
|
+
method = method.downcase.to_sym
|
|
82
|
+
subject.options[:method] = method
|
|
83
|
+
subject.options[:path] = '/folders'
|
|
84
|
+
subject.options[:headers] = {}
|
|
85
|
+
subject.send(:send_request)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'raises error if incorrect method has been passed' do
|
|
90
|
+
subject.options[:method] = :TEST
|
|
91
|
+
-> { subject.send(:send_request) }.should raise_error(GroupDocs::Errors::UnsupportedMethodError)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'saves response' do
|
|
95
|
+
mock_api_server('{"status": "Ok"}')
|
|
96
|
+
subject.options[:method] = :get
|
|
97
|
+
subject.options[:path] = '/folders'
|
|
98
|
+
subject.options[:headers] = {}
|
|
99
|
+
lambda do
|
|
100
|
+
subject.send(:send_request)
|
|
101
|
+
end.should change(subject, :response).to('{"status": "Ok"}')
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#parse_response' do
|
|
106
|
+
it 'does not parse body if request method was DOWNLOAD' do
|
|
107
|
+
subject.options[:method] = :download
|
|
108
|
+
JSON.should_not_receive(:parse)
|
|
109
|
+
lambda do
|
|
110
|
+
subject.send(:parse_response)
|
|
111
|
+
end.should_not change(subject, :response)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'returns JSON result key value' do
|
|
115
|
+
mock_response('{"status": "Ok", "result": { "entities": [] }}')
|
|
116
|
+
parsed_json = { status: 'Ok', result: { entities: [] } }
|
|
117
|
+
JSON.should_receive(:parse).with(subject.response, symbolize_names: true).and_return(parsed_json)
|
|
118
|
+
subject.send(:parse_response).should == { entities: [] }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'raises error if response status is not "Ok"' do
|
|
122
|
+
unparsed_json = '{"status": "Failed", "error_message": "The source path is not found."}'
|
|
123
|
+
parsed_json = { status: "Failed", error_message: "The source path is not found." }
|
|
124
|
+
mock_response(unparsed_json)
|
|
125
|
+
subject.should_receive(:raise_bad_request_error).with(parsed_json)
|
|
126
|
+
subject.send(:parse_response)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
describe '#raise_bad_request_error' do
|
|
131
|
+
let(:json) do
|
|
132
|
+
{ status: 'Failed', error_message: 'The source path is not found.' }
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it 'raises error' do
|
|
136
|
+
lambda do
|
|
137
|
+
subject.send(:raise_bad_request_error, json)
|
|
138
|
+
end.should raise_error(GroupDocs::Errors::BadResponseError)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'shows "Bad response!" message' do
|
|
142
|
+
lambda do
|
|
143
|
+
subject.send(:raise_bad_request_error, json)
|
|
144
|
+
end.should raise_error(message = /Bad response!/)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it 'contains information about request method' do
|
|
148
|
+
subject.options[:method] = :get
|
|
149
|
+
lambda do
|
|
150
|
+
subject.send(:raise_bad_request_error, json)
|
|
151
|
+
end.should raise_error(message = /Request method: GET/)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'contains information about request URL' do
|
|
155
|
+
subject.options[:path] = '/folders'
|
|
156
|
+
lambda do
|
|
157
|
+
subject.send(:raise_bad_request_error, json)
|
|
158
|
+
end.should raise_error(message = %r(Request URL: https?://(.+)/folders))
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it 'contains information about request body' do
|
|
162
|
+
subject.options[:request_body] = '{"test": 123}'
|
|
163
|
+
lambda do
|
|
164
|
+
subject.send(:raise_bad_request_error, json)
|
|
165
|
+
end.should raise_error(message = /Request body: {"test": 123}/)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it 'contains information about response status' do
|
|
169
|
+
lambda do
|
|
170
|
+
subject.send(:raise_bad_request_error, json)
|
|
171
|
+
end.should raise_error(message = /Status: Failed/)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it 'contains information about error message' do
|
|
175
|
+
lambda do
|
|
176
|
+
subject.send(:raise_bad_request_error, json)
|
|
177
|
+
end.should raise_error(message = /Error message: The source path is not found./)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it 'contains information about response body' do
|
|
181
|
+
mock_response('{"status": "Failed", "error_message": "The source path is not found."}')
|
|
182
|
+
lambda do
|
|
183
|
+
subject.send(:raise_bad_request_error, json)
|
|
184
|
+
end.should raise_error(message = /Response body: {"status": "Failed", "error_message": "The source path is not found."}/)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Api::Helpers::Status do
|
|
4
|
+
|
|
5
|
+
subject do
|
|
6
|
+
Object.extend(described_class)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe 'STATUSES' do
|
|
10
|
+
it 'contains hash of entity statuses' do
|
|
11
|
+
described_class::STATUSES.should == {
|
|
12
|
+
draft: -1,
|
|
13
|
+
pending: 0,
|
|
14
|
+
scheduled: 1,
|
|
15
|
+
in_progress: 2,
|
|
16
|
+
completed: 3,
|
|
17
|
+
postponed: 4,
|
|
18
|
+
archived: 5,
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe '#parse_status' do
|
|
24
|
+
it 'raise error if status is unknown' do
|
|
25
|
+
-> { subject.send(:parse_status, 8) }.should raise_error(ArgumentError)
|
|
26
|
+
-> { subject.send(:parse_status, :unknown) }.should raise_error(ArgumentError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'returns :draft if passed status is -1' do
|
|
30
|
+
subject.send(:parse_status, -1).should == :draft
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'returns :pending if passed status is 0' do
|
|
34
|
+
subject.send(:parse_status, 0).should == :pending
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns :scheduled if passed status is 1' do
|
|
38
|
+
subject.send(:parse_status, 1).should == :scheduled
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'returns :in_progress if passed status is 2' do
|
|
42
|
+
subject.send(:parse_status, 2).should == :in_progress
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'returns :completed if passed status is 3' do
|
|
46
|
+
subject.send(:parse_status, 3).should == :completed
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'returns :postponed if passed status is 4' do
|
|
50
|
+
subject.send(:parse_status, 4).should == :postponed
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'returns :archived if passed status is 5' do
|
|
54
|
+
subject.send(:parse_status, 5).should == :archived
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'returns -1 if passed status is :draft' do
|
|
58
|
+
subject.send(:parse_status, :draft).should == -1
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'returns 0 if passed status is :pending' do
|
|
62
|
+
subject.send(:parse_status, :pending).should == 0
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'returns 1 if passed status is :scheduled' do
|
|
66
|
+
subject.send(:parse_status, :scheduled).should == 1
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'returns 2 if passed status is :in_progress' do
|
|
70
|
+
subject.send(:parse_status, :in_progress).should == 2
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns 3 if passed status is :completed' do
|
|
74
|
+
subject.send(:parse_status, :completed).should == 3
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'returns 4 if passed status is :postponed' do
|
|
78
|
+
subject.send(:parse_status, :postponed).should == 4
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'returns 5 if passed status is :archived' do
|
|
82
|
+
subject.send(:parse_status, :archived).should == 5
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Api::Helpers::URL do
|
|
4
|
+
|
|
5
|
+
subject do
|
|
6
|
+
GroupDocs::Api::Request.new(path: '/1/files/2?new_name=invoice.docx')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe '#add_params' do
|
|
10
|
+
it 'adds parameters to query' do
|
|
11
|
+
subject.options[:path].should_receive(:<<).with('¶m=value')
|
|
12
|
+
subject.add_params({ param: 'value' })
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'joins values with comma if it is array' do
|
|
16
|
+
subject.options[:path] = '/1/files/2'
|
|
17
|
+
value = [1, 2]
|
|
18
|
+
value.should_receive(:join).with(?,).and_return('1,2')
|
|
19
|
+
subject.add_params({ param: value })
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'determines correct URL separator' do
|
|
23
|
+
subject.options[:path] = '/1/files/2'
|
|
24
|
+
subject.should_receive(:separator)
|
|
25
|
+
subject.add_params({ param: 'value' })
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#parse_path' do
|
|
30
|
+
it 'replaces {{client_id}} with real client ID' do
|
|
31
|
+
subject.options[:path] = '/doc/{{client_id}}/files/123'
|
|
32
|
+
subject.should_receive(:client_id).and_return('real_client_id')
|
|
33
|
+
lambda do
|
|
34
|
+
subject.send(:parse_path)
|
|
35
|
+
end.should change { subject.options[:path] }.to('/doc/real_client_id/files/123')
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#url_encode_path' do
|
|
40
|
+
it 'URL encodes path' do
|
|
41
|
+
subject.options[:path] = '/folder/Test 123'
|
|
42
|
+
subject.options.should_receive(:[]=).with(:path, '/folder/Test%20123')
|
|
43
|
+
subject.send(:url_encode_path)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe '#sign_url' do
|
|
48
|
+
it 'uses defined private key' do
|
|
49
|
+
subject.should_receive(:private_key).and_return('e98ea443354183fd1fb434047232c687')
|
|
50
|
+
subject.send(:sign_url)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'adds signature to path' do
|
|
54
|
+
subject.options[:access] = { private_key: 'e98ea443354183fd1fb434047232c687' }
|
|
55
|
+
GroupDocs.stub(api_version: nil)
|
|
56
|
+
subject.send(:sign_url)
|
|
57
|
+
subject.options[:path].should == '/1/files/2?new_name=invoice.docx&signature=gw%2BLupOB3krtliSSM0dvUBSznJY'
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'determines correct URL separator' do
|
|
61
|
+
subject.options[:access] = { private_key: 'e98ea443354183fd1fb434047232c687' }
|
|
62
|
+
subject.should_receive(:separator)
|
|
63
|
+
subject.send(:sign_url)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe '#separator' do
|
|
68
|
+
it 'returns ? if URL has no parameters' do
|
|
69
|
+
subject.options[:path] = '/1/files/2'
|
|
70
|
+
subject.send(:separator).should == '?'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'returns & if URL has parameters' do
|
|
74
|
+
subject.send(:separator).should == '&'
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe '#prepend_version' do
|
|
79
|
+
it 'does not modify URL if API version is not specified' do
|
|
80
|
+
GroupDocs.stub(api_version: nil)
|
|
81
|
+
subject.options.should_not_receive(:[]=).with(:path, '/v2.0/1/files/2?new_name=invoice.docx')
|
|
82
|
+
subject.send(:prepend_version)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'prepends API version number' do
|
|
86
|
+
GroupDocs.stub(api_version: '2.0')
|
|
87
|
+
path = '/1/files/2?new_name=invoice.docx'
|
|
88
|
+
subject = GroupDocs::Api::Request.new(path: path)
|
|
89
|
+
subject.options.should_receive(:[]=).with(:path, "/v2.0#{path}").and_return("/v2.0#{path}")
|
|
90
|
+
subject.send(:prepend_version)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|