rapidshare-ext 0.0.6 → 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/.gitignore +16 -17
- data/History.md +8 -0
- data/README.md +243 -221
- data/Rakefile +3 -3
- data/lib/rapidshare-base/api.rb +136 -6
- data/lib/rapidshare-base/utils.rb +39 -0
- data/lib/rapidshare-ext.rb +17 -11
- data/lib/rapidshare-ext/api.rb +531 -531
- data/lib/rapidshare-ext/download.rb +79 -7
- data/lib/rapidshare-ext/version.rb +5 -5
- data/rapidshare-ext.gemspec +11 -10
- data/test/fixtures/checkfiles_multi.txt +3 -0
- data/test/fixtures/checkfiles_single.txt +1 -0
- data/test/fixtures/files/upload3.txt +100 -0
- data/test/fixtures/getrapidtranslogs.txt +5 -0
- data/test/integration/rapidshare-base_test.rb +278 -0
- data/test/integration/rapidshare-ext_test.rb +176 -95
- data/test/test_helper.rb +43 -43
- data/test/unit/rapidshare-ext_test.rb +27 -27
- data/tmp/.gitignore +2 -0
- metadata +56 -29
@@ -1,30 +1,53 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require 'digest/md5'
|
3
|
-
require File.expand_path(File.dirname(__FILE__) +
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
4
3
|
|
5
4
|
class RapidshareExtTest < Test::Unit::TestCase
|
6
5
|
|
7
6
|
def setup
|
8
7
|
FakeWeb.allow_net_connect = true
|
9
8
|
@rs = Rapidshare::API.new :cookie => ENV['RAPIDSHARE_COOKIE']
|
9
|
+
|
10
|
+
account = @rs.get_account_details
|
11
|
+
|
12
|
+
# Check the account is the actually we wanted, because it will be erased in the next step
|
13
|
+
assert_equal ENV['RAPIDSHARE_USERNAME'], account[:username]
|
14
|
+
assert_equal ENV['RAPIDSHARE_EMAIL'], account[:email]
|
15
|
+
assert_equal ENV['RAPIDSHARE_ACCOUNT_ID'], account[:accountid]
|
16
|
+
|
10
17
|
@rs.erase_all_data!
|
11
18
|
|
12
|
-
@download_dir = File.expand_path(File.dirname(__FILE__) +
|
13
|
-
|
14
|
-
|
15
|
-
|
19
|
+
@download_dir = File.expand_path(File.dirname(__FILE__) + '/../../tmp')
|
20
|
+
%w{file1.txt file2.txt file3.txt upload_file_1.txt}.each do |filename|
|
21
|
+
File.delete "#@download_dir/#{filename}" if File.exist? "#@download_dir/#{filename}"
|
22
|
+
end
|
16
23
|
|
17
|
-
@upload_file_1 = File.expand_path(File.dirname(__FILE__) +
|
24
|
+
@upload_file_1 = File.expand_path(File.dirname(__FILE__) + '/../fixtures/files/upload1.txt')
|
18
25
|
@upload_file_1_md5 = Digest::MD5.hexdigest(File.read(@upload_file_1))
|
19
26
|
@upload_file_1_size = File.size @upload_file_1
|
20
27
|
|
21
|
-
@upload_file_2 = File.expand_path(File.dirname(__FILE__) +
|
28
|
+
@upload_file_2 = File.expand_path(File.dirname(__FILE__) + '/../fixtures/files/upload2.txt')
|
22
29
|
@upload_file_2_md5 = Digest::MD5.hexdigest(File.read(@upload_file_2))
|
23
30
|
@upload_file_2_size = File.size @upload_file_2
|
31
|
+
|
32
|
+
@upload_file_3 = File.expand_path(File.dirname(__FILE__) + '/../fixtures/files/upload3.txt')
|
33
|
+
@upload_file_3_md5 = Digest::MD5.hexdigest(File.read(@upload_file_3))
|
34
|
+
@upload_file_3_size = 102598 # 100 Kb
|
24
35
|
end
|
25
36
|
|
26
|
-
context
|
27
|
-
|
37
|
+
context 'Api' do
|
38
|
+
|
39
|
+
should 'initialize by login and password' do
|
40
|
+
rs = Rapidshare::API.new :login => ENV['RAPIDSHARE_USERNAME'],
|
41
|
+
:password => ENV['RAPIDSHARE_PASSWORD']
|
42
|
+
assert_equal ENV['RAPIDSHARE_COOKIE'], rs.cookie
|
43
|
+
|
44
|
+
account = rs.get_account_details
|
45
|
+
assert_equal ENV['RAPIDSHARE_USERNAME'], account[:username]
|
46
|
+
assert_equal ENV['RAPIDSHARE_EMAIL'], account[:email]
|
47
|
+
assert_equal ENV['RAPIDSHARE_ACCOUNT_ID'], account[:accountid]
|
48
|
+
end
|
49
|
+
|
50
|
+
should 'upload file' do
|
28
51
|
upload_assertion = ->(resp, size_local, digest_local, remote_filename) do
|
29
52
|
assert_instance_of Hash, resp
|
30
53
|
assert_kind_of Integer, resp[:id]
|
@@ -37,8 +60,8 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
37
60
|
assert_equal "https://rapidshare.com/files/#{resp[:id]}/#{URI::encode(remote_filename)}", resp[:url]
|
38
61
|
end
|
39
62
|
|
40
|
-
remote_filename =
|
41
|
-
remote_dir =
|
63
|
+
remote_filename = 'upload_file_1.txt'
|
64
|
+
remote_dir = 'a/b/c'
|
42
65
|
remote_path = "#{remote_dir}/#{remote_filename}"
|
43
66
|
|
44
67
|
# Initial upload
|
@@ -75,140 +98,198 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
75
98
|
upload_assertion.call response, @upload_file_2_size, @upload_file_2_md5, remote_filename
|
76
99
|
end
|
77
100
|
|
78
|
-
should
|
79
|
-
|
80
|
-
|
101
|
+
should 'download file' do
|
102
|
+
# Download file with denied access
|
103
|
+
instance = @rs.download 'https://rapidshare.com/files/829628035/HornyRhinos.jpg', :downloads_dir => @download_dir
|
104
|
+
assert_equal 'Access denied', instance.error
|
105
|
+
|
106
|
+
# Download invalid file
|
107
|
+
instance = @rs.download 'https://rapidshare.com/files/000000000/NonExistingFile.zip', :downloads_dir => @download_dir
|
108
|
+
assert_equal 'File not found', instance.error
|
81
109
|
|
82
|
-
@rs.
|
110
|
+
@rs.upload @upload_file_1, :to => '/a/b/c', :as => 'upload_file_1.txt'
|
111
|
+
assert_not_nil @rs.file_info('/a/b/c/upload_file_1.txt')
|
112
|
+
|
113
|
+
res = @rs.download '/a/b/c/upload_file_1.txt', :downloads_dir => @download_dir, :save_as => 'file1.txt'
|
114
|
+
assert_true res.downloaded?
|
115
|
+
assert_nil res.error
|
83
116
|
assert_path_exist "#@download_dir/file1.txt"
|
84
117
|
assert_equal @upload_file_1_size, File.size("#@download_dir/file1.txt")
|
85
118
|
assert_equal @upload_file_1_md5, Digest::MD5.hexdigest(File.read("#@download_dir/file1.txt"))
|
86
119
|
|
87
120
|
# Download with default :save_as
|
88
|
-
@rs.download
|
121
|
+
res = @rs.download '/a/b/c/upload_file_1.txt', :downloads_dir => @download_dir
|
122
|
+
assert_true res.downloaded?
|
123
|
+
assert_nil res.error
|
89
124
|
assert_path_exist "#@download_dir/upload_file_1.txt"
|
90
125
|
assert_equal @upload_file_1_size, File.size("#@download_dir/upload_file_1.txt")
|
91
126
|
assert_equal @upload_file_1_md5, Digest::MD5.hexdigest(File.read("#@download_dir/upload_file_1.txt"))
|
92
127
|
|
93
128
|
# Download by http url
|
94
|
-
download_url = @rs.file_info(
|
95
|
-
@rs.download download_url, :downloads_dir => @download_dir, :save_as =>
|
129
|
+
download_url = @rs.file_info('/a/b/c/upload_file_1.txt')[:url]
|
130
|
+
res = @rs.download download_url, :downloads_dir => @download_dir, :save_as => 'file2.txt'
|
131
|
+
assert_true res.downloaded?
|
132
|
+
assert_nil res.error
|
96
133
|
assert_path_exist "#@download_dir/file2.txt"
|
97
134
|
assert_equal @upload_file_1_size, File.size("#@download_dir/file2.txt")
|
98
135
|
assert_equal @upload_file_1_md5, Digest::MD5.hexdigest(File.read("#@download_dir/file2.txt"))
|
136
|
+
|
137
|
+
@rs.upload @upload_file_3, :to => '/a/b/c', :as => 'upload_3.txt'
|
138
|
+
assert_not_nil @rs.file_info('/a/b/c/upload_3.txt')
|
139
|
+
|
140
|
+
# Download file with a flow control
|
141
|
+
file = '/a/b/c/upload_3.txt'
|
142
|
+
https_url = @rs.file_info(file)[:url]
|
143
|
+
expected_metrics = [
|
144
|
+
[0, 0, @upload_file_3_size, 0],
|
145
|
+
[16384, 16384, @upload_file_3_size, 15.97],
|
146
|
+
[16384, 32768, @upload_file_3_size, 31.94],
|
147
|
+
[16384, 49152, @upload_file_3_size, 47.91],
|
148
|
+
[16384, 65536, @upload_file_3_size, 63.88],
|
149
|
+
[16384, 81920, @upload_file_3_size, 79.85],
|
150
|
+
[16384, 98304, @upload_file_3_size, 95.81],
|
151
|
+
[4294, 102598, @upload_file_3_size, 100.00],
|
152
|
+
]
|
153
|
+
|
154
|
+
# Download through HTTPS
|
155
|
+
metrics = []
|
156
|
+
res = @rs.download https_url, :downloads_dir => @download_dir, :save_as => 'file3.txt' \
|
157
|
+
do |chunk_size, downloaded, total, progress|
|
158
|
+
metrics << [chunk_size, downloaded, total, progress]
|
159
|
+
end
|
160
|
+
|
161
|
+
assert_equal expected_metrics, metrics
|
162
|
+
assert_true res.downloaded?
|
163
|
+
assert_nil res.error
|
164
|
+
assert_equal @upload_file_3_size, File.size("#@download_dir/file3.txt")
|
165
|
+
assert_equal @upload_file_3_md5, Digest::MD5.hexdigest(File.read("#@download_dir/file3.txt"))
|
166
|
+
|
167
|
+
# Download through HTTP
|
168
|
+
metrics = []
|
169
|
+
http_url = https_url.gsub /^https/, 'http'
|
170
|
+
res = @rs.download http_url, :downloads_dir => @download_dir, :save_as => 'file3.txt' \
|
171
|
+
do |chunk_size, downloaded, total, progress|
|
172
|
+
metrics << [chunk_size, downloaded, total, progress]
|
173
|
+
end
|
174
|
+
|
175
|
+
assert_equal expected_metrics, metrics
|
176
|
+
assert_true res.downloaded?
|
177
|
+
assert_nil res.error
|
178
|
+
assert_equal @upload_file_3_size, File.size("#@download_dir/file3.txt")
|
179
|
+
assert_equal @upload_file_3_md5, Digest::MD5.hexdigest(File.read("#@download_dir/file3.txt"))
|
99
180
|
end
|
100
181
|
|
101
|
-
should
|
102
|
-
@rs.upload @upload_file_1, :to =>
|
103
|
-
assert_not_nil @rs.file_info(
|
182
|
+
should 'rename file' do
|
183
|
+
@rs.upload @upload_file_1, :to => '/a/b/c', :as => 'upload_file_1.txt'
|
184
|
+
assert_not_nil @rs.file_info('/a/b/c/upload_file_1.txt')
|
104
185
|
|
105
|
-
@rs.rename_file
|
106
|
-
info = @rs.file_info
|
186
|
+
@rs.rename_file '/a/b/c/upload_file_1.txt', 'file_2.txt'
|
187
|
+
info = @rs.file_info '/a/b/c/file_2.txt'
|
107
188
|
|
108
189
|
assert_not_nil info
|
109
|
-
assert_equal info[:filename],
|
110
|
-
assert_equal info[:realfolder].to_i, @rs.folder_id(
|
190
|
+
assert_equal info[:filename], 'file_2.txt'
|
191
|
+
assert_equal info[:realfolder].to_i, @rs.folder_id('/a/b/c')
|
111
192
|
assert_equal info[:size].to_i, @upload_file_1_size
|
112
193
|
assert_equal info[:md5hex].downcase, @upload_file_1_md5
|
113
194
|
end
|
114
195
|
|
115
|
-
should
|
116
|
-
@rs.upload @upload_file_1, :to =>
|
117
|
-
assert_not_nil @rs.file_info(
|
196
|
+
should 'move file' do
|
197
|
+
@rs.upload @upload_file_1, :to => '/a/b/c', :as => 'upload_file_1.txt'
|
198
|
+
assert_not_nil @rs.file_info('/a/b/c/upload_file_1.txt')
|
118
199
|
|
119
|
-
@rs.move_file
|
120
|
-
assert_nil @rs.file_info(
|
200
|
+
@rs.move_file '/a/b/c/upload_file_1.txt', :to => '/a/b'
|
201
|
+
assert_nil @rs.file_info('/a/b/c/upload_file_1.txt')
|
121
202
|
|
122
|
-
info = @rs.file_info
|
203
|
+
info = @rs.file_info '/a/b/upload_file_1.txt'
|
123
204
|
assert_not_nil info
|
124
|
-
assert_equal info[:filename],
|
125
|
-
assert_equal info[:realfolder].to_i, @rs.folder_id(
|
205
|
+
assert_equal info[:filename], 'upload_file_1.txt'
|
206
|
+
assert_equal info[:realfolder].to_i, @rs.folder_id('/a/b')
|
126
207
|
assert_equal info[:size].to_i, @upload_file_1_size
|
127
208
|
assert_equal info[:md5hex].downcase, @upload_file_1_md5
|
128
209
|
end
|
129
210
|
|
130
|
-
should
|
131
|
-
@rs.upload @upload_file_1, :to =>
|
132
|
-
assert_not_nil @rs.file_info(
|
211
|
+
should 'delete file' do
|
212
|
+
@rs.upload @upload_file_1, :to => '/a/b/c', :as => 'upload_file_1.txt'
|
213
|
+
assert_not_nil @rs.file_info('/a/b/c/upload_file_1.txt')
|
133
214
|
|
134
|
-
@rs.remove_file
|
135
|
-
assert_nil @rs.file_info(
|
215
|
+
@rs.remove_file '/a/b/c/upload_file_1.txt'
|
216
|
+
assert_nil @rs.file_info('/a/b/c/upload_file_1.txt')
|
136
217
|
end
|
137
218
|
|
138
|
-
should
|
139
|
-
@rs.add_folder
|
140
|
-
id = @rs.folder_id(
|
141
|
-
assert_equal
|
219
|
+
should 'folder id <=> path conversions' do
|
220
|
+
@rs.add_folder '/a/b/c'
|
221
|
+
id = @rs.folder_id('/a/b/c')
|
222
|
+
assert_equal '/a/b/c', @rs.folder_path(id)
|
142
223
|
end
|
143
224
|
|
144
|
-
should
|
145
|
-
folder_id = @rs.add_folder
|
225
|
+
should 'create folder' do
|
226
|
+
folder_id = @rs.add_folder 'a/b/c'
|
146
227
|
assert_kind_of Integer, folder_id
|
147
228
|
assert_not_equal 0, folder_id
|
148
229
|
tree = @rs.folders_hierarchy
|
149
230
|
|
150
231
|
assert_equal 3, tree.count
|
151
|
-
assert_equal
|
152
|
-
assert_equal
|
153
|
-
assert_equal
|
232
|
+
assert_equal '/a/b/c', tree[folder_id][:path]
|
233
|
+
assert_equal '/a/b', tree[tree[folder_id][:parent]][:path]
|
234
|
+
assert_equal '/a', tree[tree[tree[folder_id][:parent]][:parent]][:path]
|
154
235
|
end
|
155
236
|
|
156
|
-
should
|
157
|
-
folder_id = @rs.add_folder
|
237
|
+
should 'move folder' do
|
238
|
+
folder_id = @rs.add_folder '/a/b/c'
|
158
239
|
assert_kind_of Integer, folder_id
|
159
240
|
assert_not_equal 0, folder_id
|
160
241
|
tree = @rs.folders_hierarchy
|
161
242
|
|
162
243
|
assert_equal 3, tree.count
|
163
|
-
assert_equal
|
164
|
-
assert_equal
|
165
|
-
assert_equal
|
244
|
+
assert_equal '/a/b/c', tree[folder_id][:path]
|
245
|
+
assert_equal '/a/b', tree[tree[folder_id][:parent]][:path]
|
246
|
+
assert_equal '/a', tree[tree[tree[folder_id][:parent]][:parent]][:path]
|
166
247
|
|
167
|
-
@rs.move_folder
|
248
|
+
@rs.move_folder '/a/b/c', :to => 'a'
|
168
249
|
|
169
250
|
tree = @rs.reload!
|
170
251
|
|
171
252
|
assert_equal 3, tree.count
|
172
|
-
assert_equal
|
173
|
-
assert_equal @rs.folder_id(
|
253
|
+
assert_equal '/a/c', tree[folder_id][:path]
|
254
|
+
assert_equal @rs.folder_id('/a'), tree[folder_id][:parent]
|
174
255
|
end
|
175
256
|
|
176
|
-
should
|
177
|
-
folder_id = @rs.add_folder
|
257
|
+
should 'remove folder' do
|
258
|
+
folder_id = @rs.add_folder 'a/b/c'
|
178
259
|
assert_kind_of Integer, folder_id
|
179
260
|
assert_not_equal 0, folder_id
|
180
261
|
tree = @rs.folders_hierarchy
|
181
262
|
assert_equal 3, tree.count
|
182
263
|
|
183
|
-
@rs.remove_folder
|
264
|
+
@rs.remove_folder '/a/b/c'
|
184
265
|
|
185
266
|
tree = @rs.folders_hierarchy!
|
186
267
|
assert_equal 2, tree.count
|
187
268
|
|
188
269
|
|
189
|
-
folder_id = @rs.add_folder
|
270
|
+
folder_id = @rs.add_folder '/a/b/c'
|
190
271
|
assert_kind_of Integer, folder_id
|
191
272
|
assert_not_equal 0, folder_id
|
192
273
|
tree = @rs.folders_hierarchy!
|
193
274
|
assert_equal 3, tree.count
|
194
275
|
|
195
|
-
@rs.remove_folder
|
276
|
+
@rs.remove_folder '/a'
|
196
277
|
tree = @rs.folders_hierarchy!
|
197
278
|
assert_equal 0, tree.count
|
198
279
|
end
|
199
280
|
|
200
281
|
|
201
|
-
should
|
282
|
+
should 'build folders tree' do
|
202
283
|
# Create folders
|
203
|
-
folder_a_id = @rs.add_folder
|
284
|
+
folder_a_id = @rs.add_folder '/a'
|
204
285
|
assert_kind_of Integer, folder_a_id
|
205
286
|
assert_not_equal 0, folder_a_id
|
206
287
|
|
207
|
-
folder_b_id = @rs.add_folder
|
288
|
+
folder_b_id = @rs.add_folder '/a/b'
|
208
289
|
assert_kind_of Integer, folder_b_id
|
209
290
|
assert_not_equal 0, folder_b_id
|
210
291
|
|
211
|
-
folder_c_id = @rs.add_folder
|
292
|
+
folder_c_id = @rs.add_folder '/a/b/c'
|
212
293
|
assert_kind_of Integer, folder_c_id
|
213
294
|
assert_not_equal 0, folder_c_id
|
214
295
|
|
@@ -217,28 +298,28 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
217
298
|
# Validate tree
|
218
299
|
assert_equal 3, tree.count
|
219
300
|
|
220
|
-
assert_equal
|
221
|
-
assert_equal
|
301
|
+
assert_equal 'a', tree[folder_a_id][:name]
|
302
|
+
assert_equal '/a', tree[folder_a_id][:path]
|
222
303
|
assert_equal 0, tree[folder_a_id][:parent]
|
223
304
|
|
224
|
-
assert_equal
|
225
|
-
assert_equal
|
305
|
+
assert_equal 'b', tree[folder_b_id][:name]
|
306
|
+
assert_equal '/a/b', tree[folder_b_id][:path]
|
226
307
|
assert_equal folder_a_id, tree[folder_b_id][:parent]
|
227
308
|
|
228
|
-
assert_equal
|
229
|
-
assert_equal
|
309
|
+
assert_equal 'c', tree[folder_c_id][:name]
|
310
|
+
assert_equal '/a/b/c', tree[folder_c_id][:path]
|
230
311
|
assert_equal folder_b_id, tree[folder_c_id][:parent]
|
231
312
|
|
232
313
|
# Validate subtree
|
233
314
|
sub_tree = @rs.folders_hierarchy :from => '/a/b'
|
234
315
|
assert_equal 1, sub_tree.count
|
235
|
-
assert_equal
|
236
|
-
assert_equal
|
316
|
+
assert_equal '/c', sub_tree[folder_c_id][:path]
|
317
|
+
assert_equal 'c', sub_tree[folder_c_id][:name]
|
237
318
|
assert_equal folder_b_id, sub_tree[folder_c_id][:parent]
|
238
319
|
end
|
239
320
|
|
240
|
-
should
|
241
|
-
folder_id = @rs.add_folder
|
321
|
+
should 'erase all account data' do
|
322
|
+
folder_id = @rs.add_folder '/a/b/c'
|
242
323
|
assert_kind_of Integer, folder_id
|
243
324
|
|
244
325
|
folder_ids = @rs.folders_hierarchy.keys
|
@@ -251,17 +332,17 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
251
332
|
assert_equal 0, folder_ids.count
|
252
333
|
end
|
253
334
|
|
254
|
-
should
|
335
|
+
should 'move orphans' do
|
255
336
|
# Create folders
|
256
|
-
folder_a_id = @rs.add_folder
|
337
|
+
folder_a_id = @rs.add_folder '/a'
|
257
338
|
assert_kind_of Integer, folder_a_id
|
258
339
|
assert_not_equal 0, folder_a_id
|
259
340
|
|
260
|
-
folder_b_id = @rs.add_folder
|
341
|
+
folder_b_id = @rs.add_folder '/a/b'
|
261
342
|
assert_kind_of Integer, folder_b_id
|
262
343
|
assert_not_equal 0, folder_b_id
|
263
344
|
|
264
|
-
folder_c_id = @rs.add_folder
|
345
|
+
folder_c_id = @rs.add_folder '/a/b/c'
|
265
346
|
assert_kind_of Integer, folder_c_id
|
266
347
|
assert_not_equal 0, folder_c_id
|
267
348
|
|
@@ -275,7 +356,7 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
275
356
|
assert_false @rs.orphan? folder_b_id
|
276
357
|
assert_false @rs.orphan? folder_c_id
|
277
358
|
|
278
|
-
# Delete just folder
|
359
|
+
# Delete just folder '/a' to accomplish tree inconsistency
|
279
360
|
@rs.delrealfolder :realfolder => folder_a_id
|
280
361
|
@rs.reload! :validate => false
|
281
362
|
|
@@ -290,26 +371,26 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
290
371
|
assert_true @rs.orphan? folder_c_id
|
291
372
|
|
292
373
|
# Move orphan folders to root folder
|
293
|
-
@rs.move_orphans :to =>
|
374
|
+
@rs.move_orphans :to => '/'
|
294
375
|
|
295
376
|
hierarchy_expected = {
|
296
|
-
folder_c_id => {:name=>
|
297
|
-
folder_b_id => {:name=>
|
377
|
+
folder_c_id => {:name=>'c', :parent => folder_b_id, :path => '/b/c'},
|
378
|
+
folder_b_id => {:name=>'b', :parent => 0, :path => '/b'},
|
298
379
|
}
|
299
380
|
assert_equal hierarchy_expected, @rs.folders_hierarchy!
|
300
381
|
end
|
301
382
|
|
302
|
-
should
|
383
|
+
should 'delete orphans' do
|
303
384
|
# Create folders
|
304
|
-
folder_a_id = @rs.add_folder
|
385
|
+
folder_a_id = @rs.add_folder '/a'
|
305
386
|
assert_kind_of Integer, folder_a_id
|
306
387
|
assert_not_equal 0, folder_a_id
|
307
388
|
|
308
|
-
folder_b_id = @rs.add_folder
|
389
|
+
folder_b_id = @rs.add_folder '/a/b'
|
309
390
|
assert_kind_of Integer, folder_b_id
|
310
391
|
assert_not_equal 0, folder_b_id
|
311
392
|
|
312
|
-
folder_c_id = @rs.add_folder
|
393
|
+
folder_c_id = @rs.add_folder '/a/b/c'
|
313
394
|
assert_kind_of Integer, folder_c_id
|
314
395
|
assert_not_equal 0, folder_c_id
|
315
396
|
|
@@ -323,30 +404,30 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
323
404
|
assert_false @rs.orphan? folder_b_id
|
324
405
|
assert_false @rs.orphan? folder_c_id
|
325
406
|
|
326
|
-
# Delete just folder
|
407
|
+
# Delete just folder '/a' to accomplish tree inconsistency
|
327
408
|
@rs.delrealfolder :realfolder => folder_a_id
|
328
409
|
@rs.reload! :validate => false
|
329
410
|
|
330
411
|
@rs.remove_orphans!
|
331
412
|
|
332
413
|
hierarchy_expected = {
|
333
|
-
folder_c_id => {:name=>
|
334
|
-
folder_b_id => {:name=>
|
414
|
+
folder_c_id => {:name=>'c', :parent => folder_b_id, :path => '/b/c'},
|
415
|
+
folder_b_id => {:name=>'b', :parent => 0, :path => '/b'},
|
335
416
|
}
|
336
417
|
assert_equal ({}), @rs.folders_hierarchy!
|
337
418
|
end
|
338
419
|
|
339
|
-
should
|
420
|
+
should 'work with invalid tree' do
|
340
421
|
# Create folders
|
341
|
-
folder_a_id = @rs.add_folder
|
422
|
+
folder_a_id = @rs.add_folder '/a'
|
342
423
|
assert_kind_of Integer, folder_a_id
|
343
424
|
assert_not_equal 0, folder_a_id
|
344
425
|
|
345
|
-
folder_b_id = @rs.add_folder
|
426
|
+
folder_b_id = @rs.add_folder '/a/b'
|
346
427
|
assert_kind_of Integer, folder_b_id
|
347
428
|
assert_not_equal 0, folder_b_id
|
348
429
|
|
349
|
-
folder_c_id = @rs.add_folder
|
430
|
+
folder_c_id = @rs.add_folder '/a/b/c'
|
350
431
|
assert_kind_of Integer, folder_c_id
|
351
432
|
assert_not_equal 0, folder_c_id
|
352
433
|
|
@@ -360,7 +441,7 @@ class RapidshareExtTest < Test::Unit::TestCase
|
|
360
441
|
assert_false @rs.orphan? folder_b_id
|
361
442
|
assert_false @rs.orphan? folder_c_id
|
362
443
|
|
363
|
-
# Delete just folder
|
444
|
+
# Delete just folder '/a' to accomplish tree inconsistency
|
364
445
|
@rs.delrealfolder :realfolder => folder_a_id
|
365
446
|
|
366
447
|
msg = "Directory tree consistency error. Parent folder ##{folder_a_id} for the folder \"/<undefined>/b\" [#{folder_b_id}] could not be found"
|