cloud_door 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +7 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +204 -0
  8. data/Rakefile +11 -0
  9. data/bin/dropbox +133 -0
  10. data/bin/onedrive +133 -0
  11. data/cloud_door.gemspec +38 -0
  12. data/cloud_door_config.yml +12 -0
  13. data/data/.gitkeep +0 -0
  14. data/data/testlist +0 -0
  15. data/lib/cloud_door.rb +114 -0
  16. data/lib/cloud_door/account.rb +27 -0
  17. data/lib/cloud_door/cloud_storage.rb +294 -0
  18. data/lib/cloud_door/cloud_yaml.rb +45 -0
  19. data/lib/cloud_door/config.rb +61 -0
  20. data/lib/cloud_door/console.rb +334 -0
  21. data/lib/cloud_door/dropbox.rb +166 -0
  22. data/lib/cloud_door/exceptions.rb +153 -0
  23. data/lib/cloud_door/file_list.rb +164 -0
  24. data/lib/cloud_door/onedrive.rb +180 -0
  25. data/lib/cloud_door/onedrive_api.rb +169 -0
  26. data/lib/cloud_door/token.rb +67 -0
  27. data/lib/cloud_door/version.rb +3 -0
  28. data/log/.gitkeep +0 -0
  29. data/spec/cloud_door/account_spec.rb +96 -0
  30. data/spec/cloud_door/cloud_storage_spec.rb +10 -0
  31. data/spec/cloud_door/cloud_yaml_spec.rb +32 -0
  32. data/spec/cloud_door/config_spec.rb +95 -0
  33. data/spec/cloud_door/console_spec.rb +633 -0
  34. data/spec/cloud_door/dropbox_spec.rb +625 -0
  35. data/spec/cloud_door/file_list_spec.rb +451 -0
  36. data/spec/cloud_door/onedrive_api_spec.rb +256 -0
  37. data/spec/cloud_door/onedrive_spec.rb +652 -0
  38. data/spec/cloud_door/token_spec.rb +81 -0
  39. data/spec/fabricators/account_fabricator.rb +5 -0
  40. data/spec/fabricators/cloud_yaml_fabricator.rb +5 -0
  41. data/spec/fabricators/config_fabrication.rb +5 -0
  42. data/spec/fabricators/token_fabricator.rb +10 -0
  43. data/spec/spec_helper.rb +55 -0
  44. metadata +380 -0
@@ -0,0 +1,625 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Dropbox' do
4
+ describe 'reset_token' do
5
+ subject { storage.reset_token(token_value) }
6
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
7
+ let(:token_value) { {'access_token' => 'token2'} }
8
+ context 'success' do
9
+ it do
10
+ subject
11
+ expect(storage.token.access_token).to eq 'token2'
12
+ end
13
+ end
14
+ context 'fail' do
15
+ context 'not Token class' do
16
+ before(:each) do
17
+ storage.token = 'token'
18
+ end
19
+ it { expect { subject }.to raise_error(CloudDoor::TokenClassException) }
20
+ end
21
+ end
22
+ end
23
+
24
+ describe 'show_user' do
25
+ subject { storage.show_user }
26
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
27
+ context 'success' do
28
+ let(:posit) { {'name' => 'dropbox'} }
29
+ it do
30
+ expect_any_instance_of(DropboxClient).to receive(:account_info)
31
+ .and_return(posit)
32
+ is_expected.to eq posit
33
+ end
34
+ end
35
+ end
36
+
37
+ describe 'show_files' do
38
+ subject { storage.show_files(file_name) }
39
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
40
+ let(:list_file) { storage.file_list.list_file }
41
+ context 'success' do
42
+ let(:file_name) { nil }
43
+ context 'data exists' do
44
+ let(:posit) do
45
+ {'contents' => [
46
+ {'path' => '/file1', 'name' => 'file1', 'is_dir' => false},
47
+ {'path' => '/folder1', 'name' => 'folder1', 'is_dir' => true},
48
+ ]}
49
+ end
50
+ let(:result) do
51
+ {
52
+ 'file1' => {'id' => '/file1', 'type' => 'file'},
53
+ 'folder1' => {'id' => '/folder1', 'type' => 'folder'}
54
+ }
55
+ end
56
+ it do
57
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
58
+ .with(CloudDoor::Dropbox::ROOT_ID)
59
+ .and_return(posit)
60
+ is_expected.to eq result
61
+ end
62
+ end
63
+ context 'data not exists' do
64
+ let(:posit) { {'contents' => []} }
65
+ it do
66
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
67
+ .with(CloudDoor::Dropbox::ROOT_ID)
68
+ .and_return(posit)
69
+ is_expected.to eq({})
70
+ end
71
+ end
72
+ end
73
+ context 'fail' do
74
+ let(:file_name) { 'file9' }
75
+ context 'file id not exits' do
76
+ it { expect { subject }.to raise_error(CloudDoor::SetIDException) }
77
+ end
78
+ context 'not directory' do
79
+ before(:each) do
80
+ list = [{'items' => {'file9' => {'id' => '/file9', 'type' => 'file'}}}]
81
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
82
+ end
83
+ it { expect { subject }.to raise_error(CloudDoor::NotDirectoryException) }
84
+ end
85
+ end
86
+ after(:each) do
87
+ File.delete(list_file) if File.exist?(list_file)
88
+ end
89
+ end
90
+
91
+ describe 'change_directory' do
92
+ subject { storage.change_directory(file_name) }
93
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
94
+ let(:list_file) { storage.file_list.list_file }
95
+ context 'success' do
96
+ let(:file_name) { 'folder1' }
97
+ before(:each) do
98
+ list = [{'items' => {'folder1' => {'id' => '/folder1', 'type' => 'folder'}}}]
99
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
100
+ end
101
+ context 'data exists' do
102
+ let(:posit) do
103
+ {'contents' => [
104
+ {'path' => '/file1', 'name' => 'file1', 'is_dir' => false},
105
+ {'path' => '/folder1', 'name' => 'folder1', 'is_dir' => true},
106
+ ]}
107
+ end
108
+ let(:result) do
109
+ {
110
+ 'file1' => {'id' => '/file1', 'type' => 'file'},
111
+ 'folder1' => {'id' => '/folder1', 'type' => 'folder'}
112
+ }
113
+ end
114
+ it do
115
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
116
+ .with('/folder1')
117
+ .and_return(posit)
118
+ is_expected.to eq result
119
+ end
120
+ end
121
+ context 'data not exists' do
122
+ let(:posit) { {'contents' => []} }
123
+ it do
124
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
125
+ .with('/folder1')
126
+ .and_return(posit)
127
+ is_expected.to eq({})
128
+ end
129
+ end
130
+ end
131
+ context 'fail' do
132
+ context 'file name not input' do
133
+ let(:file_name) { '' }
134
+ it { expect { subject }.to raise_error(CloudDoor::FileNameEmptyException) }
135
+ end
136
+ context 'file id not exits' do
137
+ let(:file_name) { 'file9' }
138
+ it { expect { subject }.to raise_error(CloudDoor::SetIDException) }
139
+ end
140
+ context 'not directory' do
141
+ let(:file_name) { 'file9' }
142
+ before(:each) do
143
+ list = [{'items' => {'file9' => {'id' => '/file9', 'type' => 'file'}}}]
144
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
145
+ end
146
+ it { expect { subject }.to raise_error(CloudDoor::NotDirectoryException) }
147
+ end
148
+ end
149
+ after(:each) do
150
+ File.delete(list_file) if File.exist?(list_file)
151
+ end
152
+ end
153
+
154
+ describe 'show_current_directory' do
155
+ subject { storage.show_current_directory }
156
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
157
+ it { is_expected.to eq('/top') }
158
+ end
159
+
160
+ describe 'show_property' do
161
+ subject { storage.show_property(file_name) }
162
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
163
+ let(:list_file) { storage.file_list.list_file }
164
+ before(:each) do
165
+ list = [{'items' => {'file1' => {'id' => '/file1', 'type' => 'file'}}}]
166
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
167
+ end
168
+ context 'success' do
169
+ context 'file exists' do
170
+ let(:file_name) { 'file1' }
171
+ let(:posit) do
172
+ {
173
+ 'name' => 'file1',
174
+ 'bytes' => 38,
175
+ 'modified' => '2014-06-01 12:20:30',
176
+ 'client_mtime' => '2014-06-05 13:30:40',
177
+ 'path' => '/file1',
178
+ 'is_dir' => false
179
+ }
180
+ end
181
+ before(:each) do
182
+ storage.stub(:file_exist?)
183
+ .with(file_name)
184
+ .and_return(true)
185
+ end
186
+ it do
187
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
188
+ .with('/file1')
189
+ .and_return(posit)
190
+ is_expected.to eq posit
191
+ end
192
+ end
193
+ end
194
+ context 'fail' do
195
+ context 'file name not input' do
196
+ let(:file_name) { '' }
197
+ it { expect { subject }.to raise_error(CloudDoor::FileNameEmptyException) }
198
+ end
199
+ context 'file id not exits' do
200
+ let(:file_name) { 'test' }
201
+ it { expect { subject }.to raise_error(CloudDoor::SetIDException) }
202
+ end
203
+ context 'file not exits on cloud' do
204
+ let(:file_name) { 'file1' }
205
+ before(:each) do
206
+ storage.stub(:file_exist?)
207
+ .with(file_name)
208
+ .and_return(false)
209
+ end
210
+ it { expect { subject }.to raise_error(CloudDoor::FileNotExistsException) }
211
+ end
212
+ context 'no data' do
213
+ let(:file_name) { 'file1' }
214
+ let(:posit) { nil }
215
+ before(:each) do
216
+ storage.stub(:file_exist?)
217
+ .with(file_name)
218
+ .and_return(true)
219
+ DropboxClient.any_instance.stub(:metadata)
220
+ .and_return(posit)
221
+ end
222
+ it { expect { subject }.to raise_error(CloudDoor::NoDataException) }
223
+ end
224
+ end
225
+ after(:each) do
226
+ File.delete(list_file) if File.exist?(list_file)
227
+ end
228
+ end
229
+
230
+ =begin
231
+ describe 'pick_cloud_info' do
232
+ subject { storage.pick_cloud_info(method, key) }
233
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
234
+ context 'user' do
235
+ let(:method) { 'request_user' }
236
+ let(:key) { 'name' }
237
+ let(:posit) { {'name' => 'dropbox'} }
238
+ it do
239
+ expect_any_instance_of(DropboxClient).to receive(:account_info)
240
+ .and_return(posit)
241
+ is_expected.to eq 'dropbox'
242
+ end
243
+ end
244
+ context 'dir' do
245
+ let(:method) { 'request_dir' }
246
+ let(:key) { 'contents' }
247
+ let(:posit) { {'contents' => ['file1']} }
248
+ it do
249
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
250
+ .with(CloudDoor::Dropbox::ROOT_ID)
251
+ .and_return(posit)
252
+ is_expected.to eq ['file1']
253
+ end
254
+ end
255
+ context 'file' do
256
+ let(:storage) { create_storage(CloudDoor::Dropbox, '/file1') }
257
+ let(:method) { 'request_file' }
258
+ let(:key) { 'name' }
259
+ let(:posit) { {'path' => '/file1', 'name' => 'file1', 'is_dir' => false} }
260
+ it do
261
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
262
+ .with(storage.file_id)
263
+ .and_return(posit)
264
+ is_expected.to eq 'file1'
265
+ end
266
+ end
267
+ context 'fail' do
268
+ let(:method) { 'request_user' }
269
+ let(:key) { 'name' }
270
+ let(:posit) { {'name' => 'onedrive'} }
271
+ before(:each) do
272
+ DropboxClient.any_instance.stub(:account_info)
273
+ .and_return(posit)
274
+ end
275
+ context 'method not exists' do
276
+ let(:method) { 'request_member' }
277
+ it { expect { subject }.to raise_error(CloudDoor::RequestMethodNotFoundException) }
278
+ end
279
+ context 'data not exists' do
280
+ let(:posit) { nil }
281
+ it { expect { subject }.to raise_error(CloudDoor::NoDataException) }
282
+ end
283
+ context 'key not exists' do
284
+ let(:key) { 'firstname' }
285
+ it { expect { subject }.to raise_error(CloudDoor::RequestPropertyNotFoundException) }
286
+ end
287
+ end
288
+ end
289
+ =end
290
+
291
+ describe 'download_file' do
292
+ subject { storage.download_file(file_name) }
293
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
294
+ let(:list_file) { storage.file_list.list_file }
295
+ context 'success' do
296
+ let(:file_name) { 'file1' }
297
+ let(:posit) { ['test', {'path' => '/test', 'name' => 'test'}] }
298
+ before(:each) do
299
+ list = [{'items' => {'file1' => {'id' => '/file1', 'type' => 'file'}}}]
300
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
301
+ end
302
+ it do
303
+ expect_any_instance_of(DropboxClient).to receive(:get_file_and_metadata)
304
+ .with('/file1')
305
+ .and_return(posit)
306
+ is_expected.to be_truthy
307
+ end
308
+ after(:each) do
309
+ File.delete('file1') if File.exist?('file1')
310
+ end
311
+ end
312
+ context 'fail' do
313
+ context 'file name not input' do
314
+ let(:file_name) { '' }
315
+ it { expect { subject }.to raise_error(CloudDoor::FileNameEmptyException) }
316
+ end
317
+ context 'file id not exits' do
318
+ let(:file_name) { 'test' }
319
+ it { expect { subject }.to raise_error(CloudDoor::SetIDException) }
320
+ end
321
+ context 'not file' do
322
+ let(:file_name) { 'folder1' }
323
+ before(:each) do
324
+ list = [{'items' => {'folder1' => {'id' => '/folder1', 'type' => 'folder'}}}]
325
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
326
+ end
327
+ it { expect { subject }.to raise_error(CloudDoor::NotFileException) }
328
+ end
329
+ end
330
+ after(:each) do
331
+ File.delete(list_file) if File.exist?(list_file)
332
+ end
333
+ end
334
+
335
+ describe 'upload_file' do
336
+ subject { storage.upload_file(file_name) }
337
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
338
+ let(:list_file) { storage.file_list.list_file }
339
+ let(:up_file) { 'upload' }
340
+ context 'success' do
341
+ let(:file_name) { up_file }
342
+ let(:posit) { {'path' => '/upload', 'name' => 'upload', 'is_dir' => false} }
343
+ let(:posit_dir) do
344
+ {'contents' => [{'path' => '/file1', 'name' => 'file1', 'is_dir' => false}]}
345
+ end
346
+ before(:each) do
347
+ open(up_file, 'wb') { |file| file << 'upload' }
348
+ end
349
+ it do
350
+ expect_any_instance_of(DropboxClient).to receive(:put_file)
351
+ .and_return(posit)
352
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
353
+ .with(CloudDoor::Dropbox::ROOT_ID)
354
+ .and_return(posit_dir)
355
+ is_expected.to be_truthy
356
+ end
357
+ end
358
+ context 'fail' do
359
+ context 'upload file name not input' do
360
+ let(:file_name) { '' }
361
+ it { expect { subject }.to raise_error(CloudDoor::FileNameEmptyException) }
362
+ end
363
+ context 'file not exits' do
364
+ let(:file_name) { up_file }
365
+ it { expect { subject }.to raise_error(CloudDoor::FileNotExistsException) }
366
+ end
367
+ end
368
+ after(:each) do
369
+ File.delete(up_file) if File.exist?(up_file)
370
+ File.delete(list_file) if File.exist?(list_file)
371
+ end
372
+ end
373
+
374
+ describe 'delete_file' do
375
+ subject { storage.delete_file(file_name) }
376
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
377
+ let(:list_file) { storage.file_list.list_file }
378
+ context 'success' do
379
+ let(:file_name) { 'file1' }
380
+ let(:posit) { {'path' => '/file1', 'name' => 'file1', 'is_dir' => false} }
381
+ let(:posit_dir) do
382
+ {'contents' => [{'path' => '/file2', 'name' => 'file2', 'is_dir' => false}]}
383
+ end
384
+ before(:each) do
385
+ list = [{'items' => {'file1' => {'id' => '/file1', 'type' => 'file'}}}]
386
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
387
+ end
388
+ it do
389
+ expect_any_instance_of(DropboxClient).to receive(:file_delete)
390
+ .with('/file1')
391
+ .and_return(posit_dir)
392
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
393
+ .with(CloudDoor::Dropbox::ROOT_ID)
394
+ .and_return(posit_dir)
395
+ is_expected.to be_truthy
396
+ end
397
+ end
398
+ context 'fail' do
399
+ context 'file name not input' do
400
+ let(:file_name) { '' }
401
+ it { expect { subject }.to raise_error(CloudDoor::FileNameEmptyException) }
402
+ end
403
+ context 'file id not exits' do
404
+ let(:file_name) { 'test' }
405
+ it { expect { subject }.to raise_error(CloudDoor::SetIDException) }
406
+ end
407
+ end
408
+ after(:each) do
409
+ File.delete(list_file) if File.exist?(list_file)
410
+ end
411
+ end
412
+
413
+ describe 'make_directory' do
414
+ subject { storage.make_directory(mkdir_name) }
415
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
416
+ let(:list_file) { storage.file_list.list_file }
417
+ context 'success' do
418
+ let(:mkdir_name) { 'folder1' }
419
+ let(:posit) { {'path' => '/folder1', 'name' => 'folder1', 'is_dir' => true} }
420
+ let(:posit_dir) do
421
+ {'contents' => [{'path' => '/folder1', 'name' => 'folder1', 'is_dir' => true}]}
422
+ end
423
+ it do
424
+ expect_any_instance_of(DropboxClient).to receive(:file_create_folder)
425
+ .with('/folder1')
426
+ .and_return(posit_dir)
427
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
428
+ .with(CloudDoor::Dropbox::ROOT_ID)
429
+ .and_return(posit_dir)
430
+ is_expected.to be_truthy
431
+ end
432
+ end
433
+ context 'fail' do
434
+ context 'file name not input' do
435
+ let(:mkdir_name) { '' }
436
+ it { expect { subject }.to raise_error(CloudDoor::DirectoryNameEmptyException) }
437
+ end
438
+ end
439
+ after(:each) do
440
+ File.delete(list_file) if File.exist?(list_file)
441
+ end
442
+ end
443
+
444
+ describe 'assign_upload_file_name' do
445
+ subject { storage.assign_upload_file_name(file_name) }
446
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
447
+ context 'file' do
448
+ let(:file_name) { 'testfile' }
449
+ it { is_expected.to eq file_name }
450
+ end
451
+ context 'directory' do
452
+ let(:file_name) { 'testdir' }
453
+ before(:each) do
454
+ Dir.mkdir(file_name)
455
+ end
456
+ it { is_expected.to eq "#{file_name}.zip" }
457
+ after(:each) do
458
+ Dir.rmdir(file_name) if File.exist?(file_name)
459
+ end
460
+ end
461
+ end
462
+
463
+ describe 'file_exist?' do
464
+ subject { storage.file_exist?(file_name) }
465
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
466
+ let(:list_file) { storage.file_list.list_file }
467
+ before(:each) do
468
+ list = [{'items' => {'file1' => {'id' => '/file1', 'type' => 'file'}}}]
469
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
470
+ end
471
+ context 'return true' do
472
+ let(:posit) do
473
+ {'contents' => [{'path' => '/file1', 'name' => 'file1', 'is_dir' => false}]}
474
+ end
475
+ context 'file exists' do
476
+ let(:file_name) { 'file1' }
477
+ it do
478
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
479
+ .with(CloudDoor::Dropbox::ROOT_ID)
480
+ .and_return(posit)
481
+ is_expected.to be_truthy
482
+ end
483
+ end
484
+ end
485
+ context 'return false' do
486
+ let(:posit) do
487
+ {'contents' => [{'path' => '/file2', 'name' => 'file2', 'is_dir' => false}]}
488
+ end
489
+ context 'file not found' do
490
+ let(:file_name) { 'file1' }
491
+ before(:each) do
492
+ DropboxClient.any_instance.stub(:metadata)
493
+ .and_return(posit)
494
+ end
495
+ it { is_expected.to be_falsey }
496
+ end
497
+ end
498
+ after(:each) do
499
+ File.delete(list_file) if File.exist?(list_file)
500
+ end
501
+ end
502
+
503
+ describe 'has_file?' do
504
+ subject { storage.has_file?(file_name) }
505
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
506
+ let(:list_file) { storage.file_list.list_file }
507
+ before(:each) do
508
+ file1 = {'id' => '/file1', 'type' => 'file'}
509
+ folder1 = {'id' => '/folder1', 'type' => 'folder'}
510
+ list = [
511
+ {'items' => {'file1' => file1, 'folder1' => folder1}}
512
+ ]
513
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
514
+ end
515
+ context 'return true' do
516
+ context 'count > 0' do
517
+ let(:file_name) { 'folder1' }
518
+ let(:posit) { {'path' => '/foler1', 'count' => 5} }
519
+ before(:each) do
520
+ storage.stub(:file_exist?)
521
+ .with(file_name)
522
+ .and_return(true)
523
+ end
524
+ it do
525
+ expect_any_instance_of(DropboxClient).to receive(:metadata)
526
+ .with('/folder1')
527
+ .and_return(posit)
528
+ is_expected.to be_truthy
529
+ end
530
+ end
531
+ end
532
+ context 'return false' do
533
+ context 'target is file' do
534
+ let(:file_name) { 'file1' }
535
+ it { is_expected.to be_falsey }
536
+ end
537
+ context 'count == 0' do
538
+ let(:file_name) { 'folder1' }
539
+ let(:posit) { {'path' => '/foler1', 'count' => 0} }
540
+ before(:each) do
541
+ storage.stub(:file_exist?)
542
+ .with(file_name)
543
+ .and_return(true)
544
+ DropboxClient.any_instance.stub(:metadata).and_return(posit)
545
+ end
546
+ it { is_expected.to be_falsey }
547
+ end
548
+ end
549
+ context 'fail' do
550
+ context 'file name not input' do
551
+ let(:file_name) { '' }
552
+ it { expect { subject }.to raise_error(CloudDoor::FileNameEmptyException) }
553
+ end
554
+ context 'file id not exits' do
555
+ let(:file_name) { 'test' }
556
+ it { expect { subject }.to raise_error(CloudDoor::SetIDException) }
557
+ end
558
+ context 'data not found' do
559
+ let(:file_name) { 'folder1' }
560
+ let(:posit) { nil }
561
+ before(:each) do
562
+ storage.stub(:file_exist?)
563
+ .with(file_name)
564
+ .and_return(true)
565
+ DropboxClient.any_instance.stub(:metadata).and_return(posit)
566
+ end
567
+ it { expect { subject }.to raise_error(CloudDoor::NoDataException) }
568
+ end
569
+ end
570
+ after(:each) do
571
+ File.delete(list_file) if File.exist?(list_file)
572
+ end
573
+ end
574
+
575
+ describe 'file?' do
576
+ subject { storage.file?(file_name) }
577
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
578
+ let(:list_file) { storage.file_list.list_file }
579
+ let(:access_token) { storage.token.access_token }
580
+ before(:each) do
581
+ file1 = {'id' => '/file1', 'name' => 'file1', 'type' => 'file'}
582
+ folder1 = {'id' => '/folder1', 'name' => 'folder1', 'type' => 'folder'}
583
+ list = [
584
+ {'items' => {'file1' => file1, 'folder1' => folder1}}
585
+ ]
586
+ open(list_file, 'wb') { |file| file << Marshal.dump(list) }
587
+ end
588
+ context 'return true' do
589
+ context 'file' do
590
+ let(:file_name) { 'file1' }
591
+ it { is_expected.to be_truthy }
592
+ end
593
+ end
594
+ context 'return false' do
595
+ context 'file name not input' do
596
+ let(:file_name) { '' }
597
+ it { is_expected.to be_falsey }
598
+ end
599
+ context 'parent' do
600
+ let(:file_name) { '../' }
601
+ it { is_expected.to be_falsey }
602
+ end
603
+ context 'folder' do
604
+ let(:file_name) { 'folder1' }
605
+ it { is_expected.to be_falsey }
606
+ end
607
+ end
608
+ end
609
+
610
+ describe 'load_token' do
611
+ let(:token) { Fabricate.build(:token) }
612
+ let(:storage) { create_storage(CloudDoor::Dropbox) }
613
+ let(:token_file) { storage.token.token_file }
614
+ before(:each) do
615
+ open(token_file, 'wb') { |file| file << Marshal.dump(token) }
616
+ end
617
+ it do
618
+ result = storage.load_token
619
+ expect(result.is_a?(CloudDoor::Token)).to be_truthy
620
+ end
621
+ after(:each) do
622
+ File.delete(token_file) if File.exist?(token_file)
623
+ end
624
+ end
625
+ end