ruby-box-updated 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ {
2
+ "total_count": 2,
3
+ "entries": [
4
+ {
5
+ "type": "user",
6
+ "id": "181216415",
7
+ "name": "sean rose",
8
+ "login": "sean+awesome@box.com",
9
+ "created_at": "2012-05-03T21:39:11-07:00",
10
+ "modified_at": "2012-08-23T14:57:48-07:00",
11
+ "language": "en",
12
+ "space_amount": 5368709120,
13
+ "space_used": 52947,
14
+ "max_upload_size": 104857600,
15
+ "status": "active",
16
+ "job_title": "",
17
+ "phone": "5555551374",
18
+ "address": "10 Cloud Way Los Altos CA",
19
+ "avatar_url": "https://api.box.com/api/avatar/large/181216415"
20
+ },
21
+ {
22
+ "type": "user",
23
+ "id": "181216416",
24
+ "name": "sean rose",
25
+ "login": "sean+awesomer@box.com",
26
+ "created_at": "2012-05-03T21:39:11-07:00",
27
+ "modified_at": "2012-08-23T14:57:48-07:00",
28
+ "language": "en",
29
+ "space_amount": 5368709120,
30
+ "space_used": 52947,
31
+ "max_upload_size": 104857600,
32
+ "status": "active",
33
+ "job_title": "",
34
+ "phone": "5555551374",
35
+ "address": "10 Cloud Way Los Altos CA",
36
+ "avatar_url": "https://api.box.com/api/avatar/large/181216416"
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,181 @@
1
+ #encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'helper/account'
5
+ require 'ruby-box'
6
+ require 'webmock/rspec'
7
+
8
+ describe RubyBox::Folder do
9
+ before do
10
+ @session = RubyBox::Session.new
11
+ @full_folder = JSON.parse('{ "type": "folder", "id": "11446498", "sequence_id": "1", "etag": "1", "name": "Pictures", "created_at": "2012-12-12T10:53:43-08:00", "modified_at": "2012-12-12T11:15:04-08:00", "description": "Some pictures I took", "size": 629644, "path_collection": { "total_count": 1, "entries": [ { "type": "folder", "id": "0", "sequence_id": null, "etag": null, "name": "All Files" } ] }, "created_by": { "type": "user", "id": "17738362", "name": "sean rose", "login": "sean@box.com" }, "modified_by": { "type": "user", "id": "17738362", "name": "sean rose", "login": "sean@box.com" }, "owned_by": { "type": "user", "id": "17738362", "name": "sean rose", "login": "sean@box.com" }, "shared_link": { "url": "https://www.box.com/s/vspke7y05sb214wjokpk", "download_url": "https://www.box.com/shared/static/vspke7y05sb214wjokpk", "vanity_url": null, "is_password_enabled": false, "unshared_at": null, "download_count": 0, "preview_count": 0, "access": "open", "permissions": { "can_download": true, "can_preview": true } }, "folder_upload_email": { "access": "open", "email": "upload.Picture.k13sdz1@u.box.com" }, "parent": { "type": "folder", "id": "0", "sequence_id": null, "etag": null, "name": "All Files" }, "item_status": "active", "item_collection": { "total_count": 1, "entries": [ { "type": "file", "id": "5000948880", "sequence_id": "3", "etag": "3", "sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc", "name": "tigers.jpeg" } ], "offset": 0, "limit": 100 }}')
12
+ @mini_folder = JSON.parse('{ "type":"folder", "id":"301415432", "sequence_id":"0", "name":"my first sub-folder"}')
13
+ @items = [
14
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047867", "sequence_id": "1", "etag": "1", "name": "Here\'s your folder" }, { "type": "file", "id": "409042867", "sequence_id": "1", "etag": "1", "name": "A choice file" }, { "type": "collaboration", "id": "409042000", "status": "accepted" } ], "offset": "0", "limit": "3"}'),
15
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047868", "sequence_id": "1", "etag": "1", "name": "Here\'s another folder" }, { "type": "file", "id": "409042810", "sequence_id": "1", "etag": "1", "name": "A choice file" }, { "type": "collaboration", "id": "409042001", "status": "accepted" } ], "offset": "2", "limit": "3"}')
16
+ ]
17
+ end
18
+
19
+ it "#root returns full root folder object" do
20
+ RubyBox::Session.any_instance.stub(:request).and_return(@full_folder)
21
+ session = RubyBox::Session.new
22
+ root = RubyBox::Client.new(session).root_folder
23
+ root.name.should == 'Pictures'
24
+ end
25
+
26
+ it "returns iso8601 format keys as a time object" do
27
+ RubyBox::Session.any_instance.stub(:request).and_return(@full_folder)
28
+ session = RubyBox::Session.new
29
+ root = RubyBox::Client.new(session).root_folder
30
+ root.created_at.year.should == 2012
31
+ end
32
+
33
+ describe "#find_by_type" do
34
+ it "compares name in a case insensitive manner" do
35
+ items = [
36
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047867", "sequence_id": "1", "etag": "1", "name": "Here\'s your folder" }, { "type": "file", "id": "409042867", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "0", "limit": "2"}'),
37
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047868", "sequence_id": "1", "etag": "1", "name": "Here\'s another folder" }, { "type": "file", "id": "409042810", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "2", "limit": "2"}')
38
+ ]
39
+
40
+ RubyBox::Session.any_instance.stub(:request) { items.pop }
41
+ session = RubyBox::Session.new
42
+
43
+ # should return one file.
44
+ files = RubyBox::Folder.new(session, {'id' => 1}).files('A CHOICE file')
45
+ files.count.should == 1
46
+ end
47
+ end
48
+
49
+ describe '#items' do
50
+ it "should return a folder object for folder items" do
51
+ item = JSON.parse('{ "id": "0000001", "total_count": 1, "entries": [ { "type": "folder", "id": "409047867", "sequence_id": "1", "etag": "1", "name": "Here\'s your folder" } ], "offset": "0", "limit": "1"}')
52
+ RubyBox::Session.any_instance.stub(:request).and_return(item)
53
+ session = RubyBox::Session.new
54
+ item = RubyBox::Client.new(session).root_folder.items.first
55
+ item.kind_of?(RubyBox::Folder).should == true
56
+ end
57
+
58
+ it "should return a file object for file items" do
59
+ item = JSON.parse('{ "id": "0000001", "total_count": 1, "entries": [ { "type": "file", "id": "409042867", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "0", "limit": "1"}')
60
+ RubyBox::Session.any_instance.stub(:request).and_return(item)
61
+ session = RubyBox::Session.new
62
+ item = RubyBox::Client.new(session).root_folder.items.first
63
+ item.kind_of?(RubyBox::File).should == true
64
+ end
65
+
66
+ it "it should return an iterator that lazy loads all entries" do
67
+ RubyBox::Session.any_instance.stub(:request) { @items.pop }
68
+ session = RubyBox::Session.new
69
+ items = RubyBox::Folder.new(session, {'id' => 1}).items(1).to_a
70
+ items[0].kind_of?(RubyBox::Folder).should == true
71
+ items[1].kind_of?(RubyBox::File).should == true
72
+ end
73
+
74
+ it "should allow a fields parameter to be set" do
75
+ RubyBox::Session.any_instance.should_receive(:get).with('https://api.box.com/2.0/folders/1/items?limit=100&offset=0&fields=size').and_return({'entries' => []})
76
+ session = RubyBox::Session.new
77
+ RubyBox::Folder.new(session, {'id' => 1}).items(100, 0, [:size]).to_a
78
+ end
79
+
80
+ it "should not have the fields parameter set by default" do
81
+ RubyBox::Session.any_instance.should_receive(:get).with('https://api.box.com/2.0/folders/1/items?limit=100&offset=0').and_return({'entries' => []})
82
+ session = RubyBox::Session.new
83
+ RubyBox::Folder.new(session, {'id' => 1}).items.to_a
84
+ end
85
+ end
86
+
87
+ describe '#files' do
88
+ it "should only return items of type file" do
89
+ RubyBox::Session.any_instance.stub(:request) { @items.pop }
90
+ session = RubyBox::Session.new
91
+ files = RubyBox::Folder.new(session, {'id' => 1}).files
92
+ files.count.should == 1
93
+ files.first.kind_of?(RubyBox::File).should == true
94
+ end
95
+
96
+ it "should allow you to filter files by name" do
97
+ items = [
98
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047867", "sequence_id": "1", "etag": "1", "name": "Here\'s your folder" }, { "type": "file", "id": "409042867", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "0", "limit": "2"}'),
99
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047868", "sequence_id": "1", "etag": "1", "name": "Here\'s another folder" }, { "type": "file", "id": "409042810", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "2", "limit": "2"}')
100
+ ]
101
+
102
+ RubyBox::Session.any_instance.stub(:request) { items.pop }
103
+ session = RubyBox::Session.new
104
+
105
+ # should return one file.
106
+ files = RubyBox::Folder.new(session, {'id' => 1}).files('A choice file')
107
+ files.count.should == 1
108
+
109
+ items = [
110
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047867", "sequence_id": "1", "etag": "1", "name": "Here\'s your folder" }, { "type": "file", "id": "409042867", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "0", "limit": "2"}'),
111
+ JSON.parse('{ "total_count": 4, "entries": [ { "type": "folder", "id": "409047868", "sequence_id": "1", "etag": "1", "name": "Here\'s another folder" }, { "type": "file", "id": "409042810", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "2", "limit": "2"}')
112
+ ]
113
+
114
+ # should return no files.
115
+ files = RubyBox::Folder.new(session, {'id' => 1}).files('foobar')
116
+ files.count.should == 0
117
+ end
118
+ end
119
+
120
+ describe '#discussions' do
121
+ it "should return all the discussions surrounding a folder" do
122
+ item = JSON.parse('{ "id": "0000001", "total_count": 1, "entries": [ { "type": "discussion", "id": "409042867", "sequence_id": "1", "etag": "1", "name": "A choice file" } ], "offset": "0", "limit": "1"}')
123
+ RubyBox::Session.any_instance.stub(:request).and_return(item)
124
+ session = RubyBox::Session.new
125
+ item = RubyBox::Client.new(session).root_folder.discussions.first
126
+ item.kind_of?(RubyBox::Discussion).should == true
127
+ end
128
+ end
129
+
130
+ describe '#folders' do
131
+ it "should only return items of type folder" do
132
+ RubyBox::Session.any_instance.stub(:request) { @items.pop }
133
+ session = RubyBox::Session.new
134
+ files = RubyBox::Folder.new(session, {'id' => 1}).folders
135
+ files.count.should == 1
136
+ files.first.kind_of?(RubyBox::Folder).should == true
137
+ end
138
+ end
139
+
140
+ context '#copy_to' do
141
+ let(:source_folder) { RubyBox::Folder.new(@session, {'id' => 1}) }
142
+ let(:destination) { RubyBox::Folder.new(@session, {'id' => 100}) }
143
+ let(:last_request) { JSON.parse(@request.body) }
144
+ let(:last_uri) { @uri.to_s }
145
+
146
+ before(:each) do
147
+ @session.stub(:request).with do |uri, request, _, _|
148
+ @uri, @request = uri, request
149
+ end
150
+ end
151
+
152
+ it 'uses itself for the copy uri' do
153
+ source_folder.copy_to destination
154
+ last_uri.should match /folders\/#{source_folder.id}\/copy/
155
+ end
156
+
157
+ it 'uses the destination as the parent' do
158
+ source_folder.copy_to destination
159
+ last_request['parent']['id'].should eq(destination.id)
160
+ end
161
+
162
+ it 'uses the source as the name by default' do
163
+ source_folder.copy_to destination
164
+ last_request.should_not have_key 'name'
165
+ end
166
+
167
+ it 'can provide a new name if desired' do
168
+ source_folder.copy_to destination, 'renamed-folder'
169
+ last_request['name'].should eq('renamed-folder')
170
+ end
171
+
172
+ it 'returns the newly created folder' do
173
+ @session.should_receive(:request).and_return('type' => 'folder', 'id' => '123')
174
+ copied_folder = source_folder.copy_to(destination)
175
+
176
+ copied_folder.should be_a(RubyBox::Folder)
177
+ copied_folder.id.should eq("123")
178
+ end
179
+ end
180
+
181
+ end
@@ -0,0 +1,3 @@
1
+ ---
2
+ api_key: "YOUR_API_TOKEN"
3
+ auth_token: "YOUR_AUTH_TOKEN"
@@ -0,0 +1,8 @@
1
+ require 'yaml'
2
+
3
+ ACCOUNT = {}
4
+ begin
5
+ ACCOUNT = YAML.load_file(File.dirname(__FILE__) + '/account.yml')
6
+ rescue
7
+ p "create an account.yml file with your credentials to run integration tests."
8
+ end
@@ -0,0 +1,387 @@
1
+ #encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'helper/account'
5
+ require 'ruby-box'
6
+ require 'webmock/rspec'
7
+
8
+ describe RubyBox, :skip => true do
9
+ before do
10
+
11
+ WebMock.allow_net_connect!
12
+
13
+ @session = RubyBox::Session.new({
14
+ api_key: ACCOUNT['api_key'],
15
+ auth_token: ACCOUNT['auth_token']
16
+ })
17
+
18
+ @client = RubyBox::Client.new(@session)
19
+
20
+ # Create a file with a UTF-8 name for testing.
21
+ # This is not checked in, as UTF-8 causes issues with
22
+ # Windows (lame).
23
+ f = File.new('./spec/fixtures/遠志教授.jpg', 'w')
24
+ f.puts('Hello World!')
25
+ f.close()
26
+ end
27
+
28
+ after do
29
+ File.delete('./spec/fixtures/遠志教授.jpg')
30
+ end
31
+
32
+ it "raises an AuthError if not client auth fails" do
33
+ session = RubyBox::Session.new({
34
+ api_key: 'bad-key',
35
+ auth_token: 'bad-token'
36
+ })
37
+
38
+ @bad_client = RubyBox::Client.new(session)
39
+
40
+ lambda {@bad_client.root_folder}.should raise_error( RubyBox::AuthError )
41
+ end
42
+
43
+ it "raises a RequestError if a badly formed request detected by the server" do
44
+ stub_request(:get, "https://api.box.com/2.0/folders/0").to_return(:status => 401, :body => '{"type": "error", "status": 401, "message": "baddd req"}', :headers => {})
45
+ lambda {@client.root_folder}.should raise_error( RubyBox::AuthError )
46
+
47
+ # make sure status and body is
48
+ # set on error object.
49
+ begin
50
+ @client.root_folder
51
+ rescue Exception => e
52
+ e.body.should == '{"type": "error", "status": 401, "message": "baddd req"}'
53
+ e.status.should == 401
54
+ end
55
+ end
56
+
57
+ it "raises a ServerError if the server raises a 500 error" do
58
+ stub_request(:get, "https://api.box.com/2.0/folders/0").to_return(:status => 503, :body => '{"type": "error", "status": 503, "message": "We messed up! - Box.com"}', :headers => {})
59
+ lambda {@client.root_folder}.should raise_error( RubyBox::ServerError )
60
+
61
+ # make sure status and body is
62
+ # set on error object.
63
+ begin
64
+ @client.root_folder
65
+ rescue Exception => e
66
+ e.body.should == '{"type": "error", "status": 503, "message": "We messed up! - Box.com"}'
67
+ e.status.should == 503
68
+ end
69
+
70
+ end
71
+
72
+ describe RubyBox::Folder do
73
+ describe '#root_folder' do
74
+ it "#items returns a lits of items in the root folder" do
75
+ items = @client.root_folder.items.to_a
76
+ items.count.should == 6
77
+ items.any? do |item|
78
+ item.type == "folder" &&
79
+ item.id == "318810303" &&
80
+ item.name == "ruby-box_gem_testing"
81
+ end.should == true
82
+ end
83
+
84
+ it "returns list of items in the folder id passed in" do
85
+ folder = RubyBox::Folder.new(@session, {'id' => '318810303'})
86
+ items = folder.items.to_a
87
+ items.count.should == 2
88
+ items.any? do |item|
89
+ item.type == "file" &&
90
+ item.id == "2550686921" &&
91
+ item.name == "2513582219_03fb9b67db_b.jpg"
92
+ end.should == true
93
+ end
94
+ end
95
+
96
+ describe '#file' do
97
+ it "finds the id of a file" do
98
+ folder = RubyBox::Folder.new(@session, {'id' => '318810303'})
99
+ file = folder.files( '2513582219_03fb9b67db_b.jpg' ).first
100
+ file.id.should == "2550686921"
101
+ end
102
+ end
103
+
104
+ describe '#files' do
105
+ it "allows additional fields to be requested in file listing" do
106
+ folder = RubyBox::Folder.new(@session, {'id' => '318810303'})
107
+ file = folder.files({fields: [:name, :size]}).first
108
+ file.id.should == "2550686921"
109
+ file.name.should == "2513582219_03fb9b67db_b.jpg"
110
+ file.size.should == 593978
111
+ end
112
+ end
113
+
114
+ describe '#create' do
115
+ it "creates a folder" do
116
+ folder = @client.folder('/ruby-box_gem_testing')
117
+ subfolder = folder.create_subfolder( 'new_folder_created' )
118
+ subfolder.id.should_not == nil
119
+
120
+ subfolder.delete
121
+ end
122
+
123
+ it "creates a folder with special chars in the name" do
124
+ folder = @client.folder('/ruby-box_gem_testing')
125
+ subfolder = folder.create_subfolder( '!@#$%^&$$()' )
126
+ subfolder.id.should_not == nil
127
+
128
+ subfolder.delete
129
+ end
130
+ end
131
+
132
+ end
133
+
134
+ describe RubyBox::Client do
135
+
136
+ describe RubyBox::Client do
137
+ describe '#item' do
138
+ it "item method can lookup generic items, e.g., files or folders" do
139
+ file = @client.item( '/ruby-box_gem_testing/cool stuff/кузнецкий_105_а_№2.test' )
140
+ file.size.should == 14
141
+ file.name.should == 'кузнецкий_105_а_№2.test'
142
+
143
+ folder = @client.item( 'ruby-box_gem_testing' )
144
+ folder.name.should == 'ruby-box_gem_testing'
145
+ end
146
+ end
147
+ end
148
+
149
+ context 'uploading files' do
150
+ it "should update an existing file" do
151
+ utf8_file_name = '遠志教授.jpg'
152
+ fdata = File.open( 'spec/fixtures/' + utf8_file_name, 'rb' )
153
+ response = @client.upload_data('/ruby-box_gem_testing/cool stuff/遠志教授.jpg', fdata)
154
+ fdata = File.open( 'spec/fixtures/' + utf8_file_name, 'rb' )
155
+
156
+ file = @client.upload_data('/ruby-box_gem_testing/cool stuff/遠志教授.jpg', fdata)
157
+ file.name.should == '遠志教授.jpg'
158
+ file.delete
159
+ end
160
+
161
+ it 'should raise an exception if files collide and overwrite is false' do
162
+ fdata = File.open( 'spec/fixtures/遠志教授.jpg', 'rb' )
163
+ file = @client.upload_data('/ruby-box_gem_testing/cool stuff/遠志教授.jpg', fdata)
164
+ fdata = File.open( 'spec/fixtures/遠志教授.jpg', 'rb' )
165
+
166
+ expect{ @client.upload_data('/ruby-box_gem_testing/cool stuff/遠志教授.jpg', fdata, false) }.to raise_error(RubyBox::ItemNameInUse)
167
+ file.delete
168
+ end
169
+
170
+ it "should upload a new file" do
171
+ utf8_file_name = '遠志教授.jpg'
172
+ file = @client.upload_file('spec/fixtures/' + utf8_file_name, '/ruby-box_gem_testing/cool stuff/')
173
+ file.name.should == '遠志教授.jpg'
174
+ file.delete
175
+ end
176
+
177
+ it "should allow a file to be uploaded by a folder id" do
178
+ utf8_file_name = '遠志教授.jpg'
179
+ folder = @client.folder('/ruby-box_gem_testing/cool stuff/')
180
+ file = @client.upload_file_by_folder_id('spec/fixtures/' + utf8_file_name, folder.id)
181
+ file.name.should == '遠志教授.jpg'
182
+ file.delete
183
+ end
184
+ end
185
+
186
+ describe '#create_folder' do
187
+ it "creates a path that doesnt exist" do
188
+ folder = @client.create_folder('/ruby-box_gem_testing/cool stuff/екузц/path1/path2')
189
+ folder.id.should_not == nil
190
+ folder.delete if folder
191
+ end
192
+ end
193
+
194
+ describe '#folder_by_id' do
195
+ it "allows a folder to be retrieved by its id" do
196
+ folder = @client.folder('/ruby-box_gem_testing')
197
+ folder_by_id = @client.folder_by_id(folder.id)
198
+ folder_by_id.name.should == folder.name
199
+ end
200
+ end
201
+
202
+ describe '#delete folder' do
203
+ it "should be able to recursively delete the contents of a folder" do
204
+ folder = @client.create_folder('/ruby-box_gem_testing/delete_test')
205
+ @client.create_folder('/ruby-box_gem_testing/delete_test/subfolder')
206
+ folder.delete(recursive: 'true')
207
+ end
208
+ end
209
+
210
+ context 'retrieving a file' do
211
+ it "returns meta information for a file" do
212
+ file = @client.file( '/ruby-box_gem_testing/cool stuff/кузнецкий_105_а_№2.test' )
213
+ file.size.should == 14
214
+ end
215
+
216
+ it "a file can be retrieved by its id" do
217
+ file = @client.file( '/ruby-box_gem_testing/cool stuff/кузнецкий_105_а_№2.test' )
218
+ file_by_id = @client.file_by_id( file.id )
219
+ file_by_id.size.should == 14
220
+ end
221
+ end
222
+
223
+ describe '#stream' do
224
+ it "should download file contents" do
225
+ stream = @client.stream( '/ruby-box_gem_testing/cool stuff/кузнецкий_105_а_№2.test' )
226
+ stream.read.should eq "Test more data"
227
+ end
228
+
229
+ it "should execute content_length_proc lambda with filesize" do
230
+ stream = @client.stream(
231
+ '/ruby-box_gem_testing/cool stuff/кузнецкий_105_а_№2.test',
232
+ :content_length_proc => lambda {|filesize|
233
+ filesize.should == 14
234
+ }
235
+ )
236
+ stream.read.should eq "Test more data"
237
+ end
238
+ end
239
+
240
+ describe '#download' do
241
+ it "finds the id of a file" do
242
+ data = @client.download( '/ruby-box_gem_testing/cool stuff/кузнецкий_105_а_№2.test' )
243
+ data.should eq "Test more data"
244
+ end
245
+
246
+ it "returns nil for a nonexistent file" do
247
+ data = @client.download( '/ruby-box_gem_testing/doesntexist' )
248
+ data.should eq nil
249
+ end
250
+ end
251
+
252
+ describe '#collaborations' do
253
+ it 'should be able to create and list collaborations on a folder' do
254
+ folder = @client.create_folder('/ruby-box_gem_testing/collaboration_folder')
255
+ folder.create_collaboration('bencoe@gmail.com')
256
+ folder.create_collaboration('ben@attachments.me', 'editor')
257
+ collaborations = folder.collaborations.to_a
258
+
259
+ collaborations[0].role.should == 'viewer'
260
+ collaborations[1].role.should == 'editor'
261
+ collaborations.count.should == 2
262
+
263
+ folder.delete if folder
264
+ end
265
+ end
266
+
267
+ describe '#shared_link' do
268
+ it 'should allow a share link to be created for a folder' do
269
+ folder = @client.create_folder('/ruby-box_gem_testing/shared_folder').create_shared_link
270
+
271
+ # share link was successfully created.
272
+ folder.shared_link.url.should match /https?:\/\/[\S]+/
273
+ folder.shared_link.is_a?(RubyBox::SharedLink).should == true
274
+
275
+ # share link can be disabled.
276
+ folder.disable_shared_link
277
+ folder.shared_link.should == nil
278
+
279
+ folder.delete if folder
280
+ end
281
+
282
+ it 'should allow a share link to be created for a file' do
283
+ utf8_file_name = '遠志教授.jpg'
284
+ file = @client.upload_file('spec/fixtures/' + utf8_file_name, '/ruby-box_gem_testing/cool stuff/').create_shared_link
285
+
286
+ # share link was successfully created.
287
+ file.shared_link.url.should match /https?:\/\/[\S]+/
288
+
289
+ # share link can be disabled.
290
+ file.disable_shared_link
291
+ file.shared_link.should == nil
292
+
293
+ file.delete
294
+ end
295
+ end
296
+
297
+ describe "#create_comment" do
298
+ it "allows a comment to be created on a file" do
299
+ file = @client.upload_file('spec/fixtures/遠志教授.jpg', '/ruby-box_gem_testing/cool stuff/')
300
+ file.create_comment('Hello world!')
301
+ file.comments.first.message.should == 'Hello world!'
302
+ file.delete
303
+ end
304
+ end
305
+
306
+ describe "#copy_to" do
307
+ it "it copies a file to a folder when a folder id is passed in" do
308
+ file = @client.upload_file('spec/fixtures/遠志教授.jpg', '/ruby-box_gem_testing/')
309
+ folder = @client.folder('/ruby-box_gem_testing/cool stuff/')
310
+
311
+ file.copy_to(folder.id)
312
+
313
+ copied_file = @client.file('/ruby-box_gem_testing/cool stuff/遠志教授.jpg')
314
+
315
+ copied_file.name.should == file.name
316
+ copied_file.size.should == file.size
317
+
318
+ file.delete
319
+ copied_file.delete
320
+ end
321
+
322
+ it "it copies a file to a folder when a folder is passed in" do
323
+ file = @client.upload_file('spec/fixtures/遠志教授.jpg', '/ruby-box_gem_testing/')
324
+ folder = @client.folder('/ruby-box_gem_testing/cool stuff/')
325
+
326
+ file.copy_to(folder)
327
+
328
+ copied_file = @client.file('/ruby-box_gem_testing/cool stuff/遠志教授.jpg')
329
+
330
+ copied_file.name.should == file.name
331
+ copied_file.size.should == file.size
332
+
333
+ file.delete
334
+ copied_file.delete
335
+ end
336
+
337
+ it "allows file to be renamed when copied" do
338
+ file = @client.upload_file('spec/fixtures/遠志教授.jpg', '/ruby-box_gem_testing/')
339
+ folder = @client.folder('/ruby-box_gem_testing/cool stuff/')
340
+
341
+ file.copy_to(folder, 'banana.jpg')
342
+
343
+ copied_file = @client.file('/ruby-box_gem_testing/cool stuff/banana.jpg')
344
+
345
+ copied_file.name.should == 'banana.jpg'
346
+ copied_file.size.should == file.size
347
+
348
+ file.delete
349
+ copied_file.delete
350
+ end
351
+ end
352
+
353
+ describe "#move_to" do
354
+ it "it moves a file to a folder, the original no longer exists" do
355
+ file = @client.upload_file('spec/fixtures/遠志教授.jpg', '/ruby-box_gem_testing/')
356
+ folder = @client.folder('/ruby-box_gem_testing/cool stuff/')
357
+
358
+ file.move_to(folder.id)
359
+ original_file = @client.file('/ruby-box_gem_testing/遠志教授.jpg')
360
+ original_file.should == nil # the original should no longer exist.
361
+
362
+ moved_file = @client.file('/ruby-box_gem_testing/cool stuff/遠志教授.jpg')
363
+ moved_file.name.should == file.name # the file should exist in the new location.
364
+ moved_file.size.should == file.size
365
+
366
+ moved_file.delete
367
+ end
368
+
369
+ it "allows file to be renamed when moved" do
370
+ file = @client.upload_file('spec/fixtures/遠志教授.jpg', '/ruby-box_gem_testing/')
371
+ folder = @client.folder('/ruby-box_gem_testing/cool stuff/')
372
+
373
+ file.move_to(folder, 'banana.jpg')
374
+ original_file = @client.file('/ruby-box_gem_testing/遠志教授.jpg')
375
+ original_file.should == nil # the original should no longer exist.
376
+
377
+ moved_file = @client.file('/ruby-box_gem_testing/cool stuff/banana.jpg')
378
+ moved_file.name.should == 'banana.jpg' # the file should exist in the new location.
379
+ moved_file.size.should == file.size
380
+
381
+ moved_file.delete
382
+ end
383
+
384
+ end
385
+
386
+ end
387
+ end