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,85 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Api::Request do
|
|
4
|
+
|
|
5
|
+
subject { described_class.new(method: :GET, path: '/folders') }
|
|
6
|
+
|
|
7
|
+
it { should respond_to(:resource) }
|
|
8
|
+
it { should respond_to(:response) }
|
|
9
|
+
it { should respond_to(:response=) }
|
|
10
|
+
it { should respond_to(:options) }
|
|
11
|
+
it { should respond_to(:options=) }
|
|
12
|
+
|
|
13
|
+
describe '#initialize' do
|
|
14
|
+
it 'allows passing options' do
|
|
15
|
+
options = { method: :GET, path: '/folders' }
|
|
16
|
+
request = described_class.new(options)
|
|
17
|
+
request.options.should == options
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'allows passing block to configure options' do
|
|
21
|
+
described_class.new do |request|
|
|
22
|
+
request[:access] = { client_id: 'client_id', private_key: 'private_key' }
|
|
23
|
+
request[:method] = :GET
|
|
24
|
+
request[:path] = '/folders'
|
|
25
|
+
end.options.should == { method: :GET, path: '/folders', access: { client_id: 'client_id', private_key: 'private_key' }}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'sets access hash to empty if it was not passed' do
|
|
29
|
+
access = subject.options[:access]
|
|
30
|
+
access.should be_a(Hash)
|
|
31
|
+
access.should be_empty
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'creates resource as API server' do
|
|
35
|
+
GroupDocs.stub(api_server: 'https://dev-api.groupdocs.com')
|
|
36
|
+
subject.resource.should be_a(RestClient::Resource)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe '#execute!' do
|
|
41
|
+
before(:each) do
|
|
42
|
+
GroupDocs.stub(private_key: 'private_key')
|
|
43
|
+
subject.options[:method] = :get
|
|
44
|
+
subject.options[:path] = '/folders'
|
|
45
|
+
subject.options[:headers] = {}
|
|
46
|
+
mock_api_server('{"status":"Ok"}')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'parses path' do
|
|
50
|
+
subject.should_receive(:parse_path)
|
|
51
|
+
subject.execute!
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'prepends path with version' do
|
|
55
|
+
subject.should_receive(:prepend_version)
|
|
56
|
+
subject.execute!
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'URL encodes path' do
|
|
60
|
+
subject.should_receive(:url_encode_path)
|
|
61
|
+
subject.execute!
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'signs url' do
|
|
65
|
+
subject.should_receive(:sign_url)
|
|
66
|
+
subject.execute!
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'prepares request' do
|
|
70
|
+
subject.should_receive(:prepare_request)
|
|
71
|
+
subject.execute!
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'sends request' do
|
|
75
|
+
subject.should_receive(:send_request)
|
|
76
|
+
mock_response('{"status": "Ok"}')
|
|
77
|
+
subject.execute!
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'parses response' do
|
|
81
|
+
subject.should_receive(:parse_response)
|
|
82
|
+
subject.execute!
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::DataSource::Field do
|
|
4
|
+
|
|
5
|
+
it_behaves_like GroupDocs::Api::Entity
|
|
6
|
+
|
|
7
|
+
describe 'TYPES' do
|
|
8
|
+
it 'contains hash of field types' do
|
|
9
|
+
described_class::TYPES.should == {
|
|
10
|
+
text: 0,
|
|
11
|
+
binary: 1,
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it { should respond_to(:field) }
|
|
17
|
+
it { should respond_to(:field=) }
|
|
18
|
+
it { should respond_to(:type) }
|
|
19
|
+
it { should respond_to(:type=) }
|
|
20
|
+
it { should respond_to(:values) }
|
|
21
|
+
it { should respond_to(:values=) }
|
|
22
|
+
|
|
23
|
+
it 'is compatible with response JSON' do
|
|
24
|
+
subject.should respond_to(:name=)
|
|
25
|
+
subject.method(:name=).should == subject.method(:field=)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '#type=' do
|
|
29
|
+
it 'saves type in machine readable format if symbol is passed' do
|
|
30
|
+
subject.type = :binary
|
|
31
|
+
subject.instance_variable_get(:@type).should == 1
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'does nothing if parameter is not symbol' do
|
|
35
|
+
subject.type = 1
|
|
36
|
+
subject.instance_variable_get(:@type).should == 1
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'raises error if type is unknown' do
|
|
40
|
+
-> { subject.type = :unknown }.should raise_error(ArgumentError)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe '#type' do
|
|
45
|
+
it 'returns type in human-readable format' do
|
|
46
|
+
subject.type = 1
|
|
47
|
+
subject.type.should == :binary
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::DataSource do
|
|
4
|
+
|
|
5
|
+
it_behaves_like GroupDocs::Api::Entity
|
|
6
|
+
|
|
7
|
+
describe '.get!' do
|
|
8
|
+
before(:each) do
|
|
9
|
+
mock_api_server(load_json('datasource_get'))
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'accepts access credentials hash' do
|
|
13
|
+
lambda do
|
|
14
|
+
described_class.get!(1, {}, client_id: 'client_id', private_key: 'private_key')
|
|
15
|
+
end.should_not raise_error(ArgumentError)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'accepts options hash' do
|
|
19
|
+
lambda do
|
|
20
|
+
described_class.get!(1, fields: %w(field1 field2))
|
|
21
|
+
end.should_not raise_error(ArgumentError)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'returns GroupDocs::DataSource object if datasource is found' do
|
|
25
|
+
described_class.get!(1).should be_a(GroupDocs::DataSource)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'returns nil if datasource was not found' do
|
|
29
|
+
mock_api_server('{"result": {"datasource": null}, "status": "Failed"}')
|
|
30
|
+
described_class.get!(99).should be_nil
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it { should respond_to(:id) }
|
|
35
|
+
it { should respond_to(:id=) }
|
|
36
|
+
it { should respond_to(:descr) }
|
|
37
|
+
it { should respond_to(:descr=) }
|
|
38
|
+
it { should respond_to(:questionnaire_id) }
|
|
39
|
+
it { should respond_to(:questionnaire_id=) }
|
|
40
|
+
it { should respond_to(:created_on) }
|
|
41
|
+
it { should respond_to(:created_on=) }
|
|
42
|
+
it { should respond_to(:modified_on) }
|
|
43
|
+
it { should respond_to(:modified_on=) }
|
|
44
|
+
it { should respond_to(:fields) }
|
|
45
|
+
it { should respond_to(:fields=) }
|
|
46
|
+
|
|
47
|
+
it 'has human-readable accessors' do
|
|
48
|
+
subject.should respond_to(:description)
|
|
49
|
+
subject.should respond_to(:description=)
|
|
50
|
+
subject.method(:description).should == subject.method(:descr)
|
|
51
|
+
subject.method(:description=).should == subject.method(:descr=)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe '#created_on' do
|
|
55
|
+
it 'returns converted to Time object Unix timestamp' do
|
|
56
|
+
subject.created_on = 1332950825
|
|
57
|
+
subject.created_on.should be_a(Time)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe '#modified_on' do
|
|
62
|
+
it 'returns converted to Time object Unix timestamp' do
|
|
63
|
+
subject.modified_on = 1332950825
|
|
64
|
+
subject.modified_on.should be_a(Time)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe '#fields=' do
|
|
69
|
+
it 'converts each field to GroupDocs::DataSource::Field object if hash is passed' do
|
|
70
|
+
subject.fields = [{ name: 'field1', values: %w(value1 value2), type: 1 }]
|
|
71
|
+
fields = subject.fields
|
|
72
|
+
fields.should be_an(Array)
|
|
73
|
+
fields.each do |field|
|
|
74
|
+
field.should be_a(GroupDocs::DataSource::Field)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'saves each field if it is GroupDocs::DataSource::Field object' do
|
|
79
|
+
field1 = GroupDocs::DataSource::Field.new(name: 'field1')
|
|
80
|
+
field2 = GroupDocs::DataSource::Field.new(name: 'field2')
|
|
81
|
+
subject.fields = [field1, field2]
|
|
82
|
+
subject.fields.should include(field1)
|
|
83
|
+
subject.fields.should include(field2)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'does nothing if nil is passed' do
|
|
87
|
+
lambda do
|
|
88
|
+
subject.fields = nil
|
|
89
|
+
end.should_not change(subject, :fields)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#add_field' do
|
|
94
|
+
it 'raises error if field is not GroupDocs::DataSource::Field object' do
|
|
95
|
+
-> { subject.add_field('Field') }.should raise_error(ArgumentError)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'saves field' do
|
|
99
|
+
field = GroupDocs::DataSource::Field.new
|
|
100
|
+
subject.add_field(field)
|
|
101
|
+
subject.fields.should == [field]
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#add!' do
|
|
106
|
+
before(:each) do
|
|
107
|
+
mock_api_server(load_json('datasource_add'))
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it 'accepts access credentials hash' do
|
|
111
|
+
lambda do
|
|
112
|
+
subject.add!(client_id: 'client_id', private_key: 'private_key')
|
|
113
|
+
end.should_not raise_error(ArgumentError)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'uses hashed version of self as request body' do
|
|
117
|
+
subject.should_receive(:to_hash)
|
|
118
|
+
subject.add!
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'adds ID of datasource from response to self' do
|
|
122
|
+
lambda do
|
|
123
|
+
subject.add!
|
|
124
|
+
end.should change(subject, :id)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
describe '#update!' do
|
|
129
|
+
before(:each) do
|
|
130
|
+
mock_api_server(load_json('datasource_update'))
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'accepts access credentials hash' do
|
|
134
|
+
lambda do
|
|
135
|
+
subject.update!(client_id: 'client_id', private_key: 'private_key')
|
|
136
|
+
end.should_not raise_error(ArgumentError)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'uses hashed version of self as request body' do
|
|
140
|
+
subject.should_receive(:to_hash)
|
|
141
|
+
subject.add!
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
describe '#remove!' do
|
|
146
|
+
before(:each) do
|
|
147
|
+
mock_api_server(load_json('datasource_remove'))
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it 'accepts access credentials hash' do
|
|
151
|
+
lambda do
|
|
152
|
+
subject.remove!(client_id: 'client_id', private_key: 'private_key')
|
|
153
|
+
end.should_not raise_error(ArgumentError)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GroupDocs::Document::Annotation::Reply do
|
|
4
|
+
|
|
5
|
+
it_behaves_like GroupDocs::Api::Entity
|
|
6
|
+
|
|
7
|
+
subject do
|
|
8
|
+
file = GroupDocs::Storage::File.new
|
|
9
|
+
document = GroupDocs::Document.new(file: file)
|
|
10
|
+
annotation = GroupDocs::Document::Annotation.new(document: document)
|
|
11
|
+
described_class.new(annotation: annotation)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe '.get!' do
|
|
15
|
+
before(:each) do
|
|
16
|
+
mock_api_server(load_json('annotation_replies_get'))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
let(:annotation) do
|
|
20
|
+
document = GroupDocs::Document.new(file: GroupDocs::Storage::File.new)
|
|
21
|
+
GroupDocs::Document::Annotation.new(document: document)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'accepts access credentials hash' do
|
|
25
|
+
lambda do
|
|
26
|
+
described_class.get!(annotation, {}, client_id: 'client_id', private_key: 'private_key')
|
|
27
|
+
end.should_not raise_error(ArgumentError)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'accepts options hash' do
|
|
31
|
+
lambda do
|
|
32
|
+
described_class.get!(annotation, after: Time.now)
|
|
33
|
+
end.should_not raise_error(ArgumentError)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'raises error if annotation is not an instance of GroupDocs::Document::Annotation' do
|
|
37
|
+
-> { described_class.get!('Annotation') }.should raise_error(ArgumentError)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'raises error if option :after is not an instance of Time' do
|
|
41
|
+
-> { described_class.get!(annotation, after: 'Yesterday') }.should raise_error(ArgumentError)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'converts option :after to Unix timestamp' do
|
|
45
|
+
time = Time.now
|
|
46
|
+
time.should_receive(:to_i).and_return(1334125808)
|
|
47
|
+
described_class.get!(annotation, after: time)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'returns an array of GroupDocs::Document::Annotation::Reply objects' do
|
|
51
|
+
replies = described_class.get!(annotation)
|
|
52
|
+
replies.should be_an(Array)
|
|
53
|
+
replies.each do |reply|
|
|
54
|
+
reply.should be_a(GroupDocs::Document::Annotation::Reply)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it { should respond_to(:annotation) }
|
|
60
|
+
it { should respond_to(:annotation=) }
|
|
61
|
+
it { should respond_to(:text) }
|
|
62
|
+
it { should respond_to(:text=) }
|
|
63
|
+
it { should respond_to(:guid) }
|
|
64
|
+
it { should respond_to(:guid=) }
|
|
65
|
+
it { should respond_to(:annotationGuid) }
|
|
66
|
+
it { should respond_to(:annotationGuid=) }
|
|
67
|
+
it { should respond_to(:userGuid) }
|
|
68
|
+
it { should respond_to(:userGuid=) }
|
|
69
|
+
it { should respond_to(:userName) }
|
|
70
|
+
it { should respond_to(:userName=) }
|
|
71
|
+
it { should respond_to(:text) }
|
|
72
|
+
it { should respond_to(:text=) }
|
|
73
|
+
it { should respond_to(:repliedOn) }
|
|
74
|
+
it { should respond_to(:repliedOn=) }
|
|
75
|
+
|
|
76
|
+
it 'has human-readable accessors' do
|
|
77
|
+
subject.should respond_to(:annotation_guid)
|
|
78
|
+
subject.should respond_to(:annotation_guid=)
|
|
79
|
+
subject.should respond_to(:user_guid)
|
|
80
|
+
subject.should respond_to(:user_guid=)
|
|
81
|
+
subject.should respond_to(:user_name)
|
|
82
|
+
subject.should respond_to(:user_name=)
|
|
83
|
+
subject.should respond_to(:replied_on)
|
|
84
|
+
subject.should respond_to(:replied_on=)
|
|
85
|
+
subject.method(:annotation_guid).should == subject.method(:annotationGuid)
|
|
86
|
+
subject.method(:annotation_guid=).should == subject.method(:annotationGuid=)
|
|
87
|
+
subject.method(:user_guid).should == subject.method(:userGuid)
|
|
88
|
+
subject.method(:user_guid=).should == subject.method(:userGuid=)
|
|
89
|
+
subject.method(:user_name).should == subject.method(:userName)
|
|
90
|
+
subject.method(:user_name=).should == subject.method(:userName=)
|
|
91
|
+
# Reply#replied_on is overwritten
|
|
92
|
+
subject.method(:replied_on=).should == subject.method(:repliedOn=)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe '#initialize' do
|
|
96
|
+
it 'raises error if annotation is not specified' do
|
|
97
|
+
-> { described_class.new }.should raise_error(ArgumentError)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'raises error if annotation is not an instance of GroupDocs::Document::Annotation' do
|
|
101
|
+
-> { described_class.new(annotation: '') }.should raise_error(ArgumentError)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#replied_on' do
|
|
106
|
+
it 'returns converted to Time object Unix timestamp' do
|
|
107
|
+
subject.replied_on = 1332950825
|
|
108
|
+
subject.replied_on.should be_a(Time)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'divides timestamp by 1000 because it is in milliseconds' do
|
|
112
|
+
subject.replied_on = 1332950825000
|
|
113
|
+
subject.replied_on.should == Time.at(1332950825)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
describe '#create!' do
|
|
118
|
+
before(:each) do
|
|
119
|
+
mock_api_server(load_json('annotation_replies_create'))
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'accepts access credentials hash' do
|
|
123
|
+
lambda do
|
|
124
|
+
subject.create!(client_id: 'client_id', private_key: 'private_key')
|
|
125
|
+
end.should_not raise_error(ArgumentError)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it 'gets annotation guid' do
|
|
129
|
+
subject.should_receive(:get_annotation_guid)
|
|
130
|
+
subject.create!
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'updates guid and annotation_guid with response' do
|
|
134
|
+
lambda do
|
|
135
|
+
subject.create!
|
|
136
|
+
end.should change {
|
|
137
|
+
subject.guid
|
|
138
|
+
subject.annotation_guid
|
|
139
|
+
}
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe '#edit!' do
|
|
144
|
+
before(:each) do
|
|
145
|
+
mock_api_server('{"result": {}, "status": "Ok", "error_message": null}')
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'accepts access credentials hash' do
|
|
149
|
+
lambda do
|
|
150
|
+
subject.edit!(client_id: 'client_id', private_key: 'private_key')
|
|
151
|
+
end.should_not raise_error(ArgumentError)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
describe '#remove!' do
|
|
156
|
+
before(:each) do
|
|
157
|
+
mock_api_server('{"result": {}, "status": "Ok", "error_message": null}')
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it 'accepts access credentials hash' do
|
|
161
|
+
lambda do
|
|
162
|
+
subject.remove!(client_id: 'client_id', private_key: 'private_key')
|
|
163
|
+
end.should_not raise_error(ArgumentError)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
describe '#get_annotation_guid' do
|
|
168
|
+
it 'prefers annotation_guid over annotation.guid' do
|
|
169
|
+
subject.annotation_guid = 'abc'
|
|
170
|
+
subject.annotation.guid = 'def'
|
|
171
|
+
subject.send(:get_annotation_guid).should == 'abc'
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it 'returns annotation.guid if annotation_guid is not set' do
|
|
175
|
+
subject.annotation.guid = 'def'
|
|
176
|
+
subject.send(:get_annotation_guid).should == 'def'
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|