cloud_door 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/Guardfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +204 -0
- data/Rakefile +11 -0
- data/bin/dropbox +133 -0
- data/bin/onedrive +133 -0
- data/cloud_door.gemspec +38 -0
- data/cloud_door_config.yml +12 -0
- data/data/.gitkeep +0 -0
- data/data/testlist +0 -0
- data/lib/cloud_door.rb +114 -0
- data/lib/cloud_door/account.rb +27 -0
- data/lib/cloud_door/cloud_storage.rb +294 -0
- data/lib/cloud_door/cloud_yaml.rb +45 -0
- data/lib/cloud_door/config.rb +61 -0
- data/lib/cloud_door/console.rb +334 -0
- data/lib/cloud_door/dropbox.rb +166 -0
- data/lib/cloud_door/exceptions.rb +153 -0
- data/lib/cloud_door/file_list.rb +164 -0
- data/lib/cloud_door/onedrive.rb +180 -0
- data/lib/cloud_door/onedrive_api.rb +169 -0
- data/lib/cloud_door/token.rb +67 -0
- data/lib/cloud_door/version.rb +3 -0
- data/log/.gitkeep +0 -0
- data/spec/cloud_door/account_spec.rb +96 -0
- data/spec/cloud_door/cloud_storage_spec.rb +10 -0
- data/spec/cloud_door/cloud_yaml_spec.rb +32 -0
- data/spec/cloud_door/config_spec.rb +95 -0
- data/spec/cloud_door/console_spec.rb +633 -0
- data/spec/cloud_door/dropbox_spec.rb +625 -0
- data/spec/cloud_door/file_list_spec.rb +451 -0
- data/spec/cloud_door/onedrive_api_spec.rb +256 -0
- data/spec/cloud_door/onedrive_spec.rb +652 -0
- data/spec/cloud_door/token_spec.rb +81 -0
- data/spec/fabricators/account_fabricator.rb +5 -0
- data/spec/fabricators/cloud_yaml_fabricator.rb +5 -0
- data/spec/fabricators/config_fabrication.rb +5 -0
- data/spec/fabricators/token_fabricator.rb +10 -0
- data/spec/spec_helper.rb +55 -0
- metadata +380 -0
@@ -0,0 +1,451 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
def create_file_list
|
4
|
+
file_list = CloudDoor::FileList.new('test_list', './data/')
|
5
|
+
file_list
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'FileList' do
|
9
|
+
describe 'load_list' do
|
10
|
+
subject { file_list.load_list }
|
11
|
+
let(:file_list) { create_file_list }
|
12
|
+
let(:list_file) { './data/test_list' }
|
13
|
+
let(:list) do
|
14
|
+
items = {'id' => 'folder.1234', 'type' => 'folder'}
|
15
|
+
[{'id' => 'top', 'name' => 'top', 'items' => items}]
|
16
|
+
end
|
17
|
+
context 'list file not exists' do
|
18
|
+
it { is_expected.to be_truthy }
|
19
|
+
it do
|
20
|
+
subject
|
21
|
+
expect(file_list.list).to eq []
|
22
|
+
end
|
23
|
+
end
|
24
|
+
context 'list file is array' do
|
25
|
+
before(:each) do
|
26
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
27
|
+
end
|
28
|
+
it { is_expected.to be_truthy }
|
29
|
+
it do
|
30
|
+
subject
|
31
|
+
expect(file_list.list).to eq list
|
32
|
+
end
|
33
|
+
end
|
34
|
+
context 'list file is not array' do
|
35
|
+
let(:list) { '' }
|
36
|
+
before(:each) do
|
37
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
38
|
+
end
|
39
|
+
it { is_expected.to be_falsey }
|
40
|
+
it do
|
41
|
+
subject
|
42
|
+
expect(file_list.list).to eq nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
after(:each) do
|
46
|
+
File.delete(list_file) if File.exist?(list_file)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'add_list_top' do
|
51
|
+
subject { file_list.add_list_top(items) }
|
52
|
+
let(:file_list) { create_file_list }
|
53
|
+
let(:list_file) { './data/test_list' }
|
54
|
+
before(:each) do
|
55
|
+
File.delete(list_file) if File.exist?(list_file)
|
56
|
+
end
|
57
|
+
context 'success' do
|
58
|
+
let(:items) { {'folder' => {'id' => 'folder.1234', 'type' => 'folder'}} }
|
59
|
+
let(:added_list) do
|
60
|
+
[{'id' => 'top', 'name' => 'top', 'items' => items}]
|
61
|
+
end
|
62
|
+
it { is_expected.to be_truthy }
|
63
|
+
it do
|
64
|
+
subject
|
65
|
+
file_list.load_list
|
66
|
+
expect(file_list.list).to eq added_list
|
67
|
+
end
|
68
|
+
end
|
69
|
+
context 'fail' do
|
70
|
+
context 'items is nil' do
|
71
|
+
let(:items) { nil }
|
72
|
+
it { is_expected.to be_falsey }
|
73
|
+
end
|
74
|
+
context 'items is not hash' do
|
75
|
+
let(:items) { [] }
|
76
|
+
it { is_expected.to be_falsey }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
after(:each) do
|
80
|
+
File.delete(list_file) if File.exist?(list_file)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'add_list' do
|
85
|
+
subject { file_list.add_list(items, file_id, file_name) }
|
86
|
+
let(:file_list) { create_file_list }
|
87
|
+
let(:list_file) { './data/test_list' }
|
88
|
+
let(:list) do
|
89
|
+
[{'id' => 'top', 'name' => 'top', 'items' => top_items}]
|
90
|
+
end
|
91
|
+
let(:file_id) { 'folder.1234' }
|
92
|
+
let(:file_name) { 'folder1' }
|
93
|
+
let(:items) { {'test2' => {'id' => 'file.5678', 'type' => 'file'}} }
|
94
|
+
let(:top_items) { {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}} }
|
95
|
+
before(:each) do
|
96
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
97
|
+
end
|
98
|
+
context 'success' do
|
99
|
+
let(:added_list) do
|
100
|
+
[
|
101
|
+
{'id' => 'top', 'name' => 'top', 'items' => top_items},
|
102
|
+
{'id' => file_id, 'name' => file_name, 'items' => items}
|
103
|
+
]
|
104
|
+
end
|
105
|
+
it { is_expected.to be_truthy }
|
106
|
+
it do
|
107
|
+
subject
|
108
|
+
file_list.load_list
|
109
|
+
expect(file_list.list).to eq added_list
|
110
|
+
end
|
111
|
+
end
|
112
|
+
context 'fail' do
|
113
|
+
context 'file_id is nil' do
|
114
|
+
let(:file_id) { nil }
|
115
|
+
it { is_expected.to be_falsey }
|
116
|
+
end
|
117
|
+
context 'file_id is empty' do
|
118
|
+
let(:file_id) { '' }
|
119
|
+
it { is_expected.to be_falsey }
|
120
|
+
end
|
121
|
+
context 'file_name is nil' do
|
122
|
+
let(:file_name) { nil }
|
123
|
+
it { is_expected.to be_falsey }
|
124
|
+
end
|
125
|
+
context 'file_name is empty' do
|
126
|
+
let(:file_name) { '' }
|
127
|
+
it { is_expected.to be_falsey }
|
128
|
+
end
|
129
|
+
context 'items is nil' do
|
130
|
+
let(:items) { nil }
|
131
|
+
it { is_expected.to be_falsey }
|
132
|
+
end
|
133
|
+
context 'items is not hash' do
|
134
|
+
let(:items) { [] }
|
135
|
+
it { is_expected.to be_falsey }
|
136
|
+
end
|
137
|
+
context 'list file is not array' do
|
138
|
+
let(:list) do
|
139
|
+
{'id' => 'top', 'name' => 'top', 'items' => top_items}
|
140
|
+
end
|
141
|
+
it { is_expected.to be_falsey }
|
142
|
+
end
|
143
|
+
end
|
144
|
+
after(:each) do
|
145
|
+
File.delete(list_file) if File.exist?(list_file)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe 'update_list' do
|
150
|
+
subject { file_list.update_list(items) }
|
151
|
+
let(:file_list) { create_file_list }
|
152
|
+
let(:list_file) { './data/test_list' }
|
153
|
+
let(:list) do
|
154
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
155
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
156
|
+
items3 = {'file3' => {'id' => 'file.3456', 'type' => 'file'}}
|
157
|
+
[
|
158
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
159
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
160
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items3}
|
161
|
+
]
|
162
|
+
end
|
163
|
+
let(:items) { {'file4' => {'id' => 'file.7890', 'type' => 'file'}} }
|
164
|
+
before(:each) do
|
165
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
166
|
+
end
|
167
|
+
context 'success' do
|
168
|
+
let(:updated_list) do
|
169
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
170
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
171
|
+
[
|
172
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
173
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
174
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items}
|
175
|
+
]
|
176
|
+
end
|
177
|
+
it { is_expected.to be_truthy }
|
178
|
+
it do
|
179
|
+
subject
|
180
|
+
file_list.load_list
|
181
|
+
expect(file_list.list).to eq updated_list
|
182
|
+
end
|
183
|
+
end
|
184
|
+
context 'fail' do
|
185
|
+
context 'items is nil' do
|
186
|
+
let(:items) { nil }
|
187
|
+
it { is_expected.to be_falsey }
|
188
|
+
end
|
189
|
+
context 'items is not hash' do
|
190
|
+
let(:items) { [] }
|
191
|
+
it { is_expected.to be_falsey }
|
192
|
+
end
|
193
|
+
end
|
194
|
+
after(:each) do
|
195
|
+
File.delete(list_file) if File.exist?(list_file)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe 'remove_list' do
|
200
|
+
subject { file_list.remove_list(back) }
|
201
|
+
let(:file_list) { create_file_list }
|
202
|
+
let(:list_file) { './data/test_list' }
|
203
|
+
let(:list) do
|
204
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
205
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
206
|
+
items3 = {'file3' => {'id' => 'file.3456', 'type' => 'file'}}
|
207
|
+
[
|
208
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
209
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
210
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items3}
|
211
|
+
]
|
212
|
+
end
|
213
|
+
before(:each) do
|
214
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
215
|
+
end
|
216
|
+
context 'success' do
|
217
|
+
context 'remove last 1' do
|
218
|
+
let(:back) { 2 }
|
219
|
+
it { is_expected.to be_truthy }
|
220
|
+
it do
|
221
|
+
subject
|
222
|
+
file_list.load_list
|
223
|
+
expect(file_list.list).to eq list[0..1]
|
224
|
+
end
|
225
|
+
end
|
226
|
+
context 'remove last 2' do
|
227
|
+
let(:back) { 3 }
|
228
|
+
it { is_expected.to be_truthy }
|
229
|
+
it do
|
230
|
+
subject
|
231
|
+
file_list.load_list
|
232
|
+
expect(file_list.list).to eq list[0..0]
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
context 'fail' do
|
237
|
+
context 'remove all' do
|
238
|
+
let(:back) { 4 }
|
239
|
+
it { is_expected.to be_falsey }
|
240
|
+
end
|
241
|
+
context 'list file is not array' do
|
242
|
+
let(:list) do
|
243
|
+
items = {'test' => {'id' => 'file.1234', 'type' => 'file'}}
|
244
|
+
{'id' => 'top', 'name' => 'top', 'items' => items}
|
245
|
+
end
|
246
|
+
let(:back) { 1 }
|
247
|
+
it { is_expected.to be_falsey }
|
248
|
+
end
|
249
|
+
end
|
250
|
+
after(:each) do
|
251
|
+
File.delete(list_file) if File.exist?(list_file)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
describe 'delete_list' do
|
256
|
+
subject { file_list.delete_file }
|
257
|
+
let(:file_list) { create_file_list }
|
258
|
+
let(:list_file) { './data/test_list' }
|
259
|
+
let(:list) do
|
260
|
+
items = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
261
|
+
[{'id' => 'top', 'name' => 'top', 'items' => items}]
|
262
|
+
end
|
263
|
+
context 'file not exists' do
|
264
|
+
it { is_expected.to be_truthy }
|
265
|
+
it do
|
266
|
+
subject
|
267
|
+
expect(File.exist?(file_list.list_file)).to be_falsey
|
268
|
+
end
|
269
|
+
end
|
270
|
+
context 'file exists' do
|
271
|
+
before(:each) do
|
272
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
273
|
+
end
|
274
|
+
it { is_expected.to be_truthy }
|
275
|
+
it do
|
276
|
+
subject
|
277
|
+
expect(File.exist?(file_list.list_file)).to be_falsey
|
278
|
+
end
|
279
|
+
end
|
280
|
+
after(:each) do
|
281
|
+
File.delete(list_file) if File.exist?(list_file)
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
describe 'pull_parent_id' do
|
286
|
+
subject { file_list.pull_parent_id }
|
287
|
+
let(:file_list) { create_file_list }
|
288
|
+
let(:list_file) { './data/test_list' }
|
289
|
+
let(:list) do
|
290
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
291
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
292
|
+
items3 = {'file3' => {'id' => 'file.3456', 'type' => 'file'}}
|
293
|
+
[
|
294
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
295
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
296
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items3}
|
297
|
+
]
|
298
|
+
end
|
299
|
+
before(:each) do
|
300
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
301
|
+
end
|
302
|
+
it { is_expected.to eq 'folder.5678' }
|
303
|
+
after(:each) do
|
304
|
+
File.delete(list_file) if File.exist?(list_file)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
describe 'pull_current_dir' do
|
309
|
+
subject { file_list.pull_current_dir }
|
310
|
+
let(:file_list) { create_file_list }
|
311
|
+
let(:list_file) { './data/test_list' }
|
312
|
+
before(:each) do
|
313
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
314
|
+
end
|
315
|
+
context 'top' do
|
316
|
+
let(:list) do
|
317
|
+
items = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
318
|
+
[{'id' => 'top', 'name' => 'top', 'items' => items}]
|
319
|
+
end
|
320
|
+
it { is_expected.to eq '/top' }
|
321
|
+
end
|
322
|
+
context 'directory' do
|
323
|
+
let(:list) do
|
324
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
325
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
326
|
+
items3 = {'file3' => {'id' => 'file.3456', 'type' => 'file'}}
|
327
|
+
[
|
328
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
329
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
330
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items3}
|
331
|
+
]
|
332
|
+
end
|
333
|
+
it { is_expected.to eq '/top/folder1/folder2' }
|
334
|
+
end
|
335
|
+
after(:each) do
|
336
|
+
File.delete(list_file) if File.exist?(list_file)
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
describe 'pull_file_properties' do
|
341
|
+
subject { file_list.pull_file_properties(file_name) }
|
342
|
+
let(:file_list) { create_file_list }
|
343
|
+
let(:list_file) { './data/test_list' }
|
344
|
+
let(:file_name) { 'file3' }
|
345
|
+
let(:list) do
|
346
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
347
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
348
|
+
items3 = {'file3' => {'id' => 'file.3456', 'type' => 'file'}}
|
349
|
+
[
|
350
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
351
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
352
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items3}
|
353
|
+
]
|
354
|
+
end
|
355
|
+
before(:each) do
|
356
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
357
|
+
end
|
358
|
+
context 'target found' do
|
359
|
+
it { is_expected.to eq({'id' => 'file.3456', 'type' => 'file'}) }
|
360
|
+
end
|
361
|
+
context 'target not found' do
|
362
|
+
let(:file_name) { 'file4' }
|
363
|
+
it { is_expected.to be_falsey }
|
364
|
+
end
|
365
|
+
context 'list is empty' do
|
366
|
+
let(:list) { [] }
|
367
|
+
it { is_expected.to be_falsey }
|
368
|
+
end
|
369
|
+
context 'items is empty' do
|
370
|
+
let(:list) { [{'id' => 'top', 'name' => 'top', 'items' => {}}] }
|
371
|
+
it { is_expected.to be_falsey }
|
372
|
+
end
|
373
|
+
after(:each) do
|
374
|
+
File.delete(list_file) if File.exist?(list_file)
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
describe 'convert_name_to_id' do
|
379
|
+
subject { file_list.convert_name_to_id(mode, file_name) }
|
380
|
+
let(:file_list) { create_file_list }
|
381
|
+
let(:list_file) { './data/test_list' }
|
382
|
+
let(:list) do
|
383
|
+
items1 = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
384
|
+
items2 = {'folder2' => {'id' => 'folder.5678', 'type' => 'folder'}}
|
385
|
+
items3 = {'file3' => {'id' => 'file.3456', 'type' => 'file'}}
|
386
|
+
[
|
387
|
+
{'id' => 'top', 'name' => 'top', 'items' => items1},
|
388
|
+
{'id' => 'folder.1234', 'name' => 'folder1', 'items' => items2},
|
389
|
+
{'id' => 'folder.5678', 'name' => 'folder2', 'items' => items3}
|
390
|
+
]
|
391
|
+
end
|
392
|
+
before(:each) do
|
393
|
+
open(list_file, 'wb') { |file| file << Marshal.dump(list) }
|
394
|
+
end
|
395
|
+
context 'mode == current' do
|
396
|
+
let(:mode) { 'current' }
|
397
|
+
let(:file_name) { nil }
|
398
|
+
context 'top' do
|
399
|
+
let(:list) do
|
400
|
+
items = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
401
|
+
[{'id' => 'top', 'name' => 'top', 'items' => items}]
|
402
|
+
end
|
403
|
+
it { is_expected.to be_nil }
|
404
|
+
end
|
405
|
+
context 'directory' do
|
406
|
+
it { is_expected.to eq 'folder.5678' }
|
407
|
+
end
|
408
|
+
end
|
409
|
+
context 'mode == parent' do
|
410
|
+
let(:mode) { 'parent' }
|
411
|
+
context 'top' do
|
412
|
+
let(:file_name) { '../' }
|
413
|
+
let(:list) do
|
414
|
+
items = {'folder1' => {'id' => 'folder.1234', 'type' => 'folder'}}
|
415
|
+
[{'id' => 'top', 'name' => 'top', 'items' => items}]
|
416
|
+
end
|
417
|
+
it { is_expected.to be_falsey }
|
418
|
+
end
|
419
|
+
context 'back to folder' do
|
420
|
+
let(:file_name) { '../' }
|
421
|
+
it { is_expected.to eq 'folder.1234' }
|
422
|
+
end
|
423
|
+
context 'back to top' do
|
424
|
+
let(:file_name) { '../../' }
|
425
|
+
it { is_expected.to be_nil }
|
426
|
+
end
|
427
|
+
end
|
428
|
+
context 'mode == target' do
|
429
|
+
let(:mode) { 'target' }
|
430
|
+
let(:file_name) { 'file3' }
|
431
|
+
context 'target found' do
|
432
|
+
it { is_expected.to eq 'file.3456' }
|
433
|
+
end
|
434
|
+
context 'target not found' do
|
435
|
+
let(:file_name) { 'file4' }
|
436
|
+
it { is_expected.to be_falsey }
|
437
|
+
end
|
438
|
+
context 'list is empty' do
|
439
|
+
let(:list) { [] }
|
440
|
+
it { is_expected.to be_falsey }
|
441
|
+
end
|
442
|
+
context 'items is empty' do
|
443
|
+
let(:list) { [{'id' => 'top', 'name' => 'top', 'items' => {}}] }
|
444
|
+
it { is_expected.to be_falsey }
|
445
|
+
end
|
446
|
+
end
|
447
|
+
after(:each) do
|
448
|
+
File.delete(list_file) if File.exist?(list_file)
|
449
|
+
end
|
450
|
+
end
|
451
|
+
end
|
@@ -0,0 +1,256 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.shared_examples 'http request fail' do
|
4
|
+
context 'http request fail' do
|
5
|
+
let(:status) { 401 }
|
6
|
+
let(:body) { nil }
|
7
|
+
it { expect { subject }.to raise_error(CloudDoor::UnauthorizedException) }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'OneDriveApi' do
|
12
|
+
describe 'request_get_token' do
|
13
|
+
subject { storage.request_get_token(code, client_id, client_secret, redirect_url) }
|
14
|
+
let(:access_token) { 'token' }
|
15
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
16
|
+
let(:code) { '5678' }
|
17
|
+
let(:client_id) { '1234' }
|
18
|
+
let(:client_secret) { 'abcd' }
|
19
|
+
let(:redirect_url) { 'redirect' }
|
20
|
+
before(:each) do
|
21
|
+
WebMock.stub_request(:post, CloudDoor::OneDriveApi::TOKEN_URL)
|
22
|
+
.with(
|
23
|
+
body: {
|
24
|
+
'client_id' => client_id,
|
25
|
+
'client_secret' => client_secret,
|
26
|
+
'redirect_uri' => redirect_url,
|
27
|
+
'code' => code,
|
28
|
+
'grant_type' => 'authorization_code'
|
29
|
+
},
|
30
|
+
headers: {
|
31
|
+
'Content-Type' => 'application/x-www-form-urlencoded'
|
32
|
+
}
|
33
|
+
)
|
34
|
+
.to_return(status: status, body: body)
|
35
|
+
end
|
36
|
+
context 'success' do
|
37
|
+
let(:status) { 200 }
|
38
|
+
let(:body) { JSON('access_token' => 'mock') }
|
39
|
+
it { is_expected.to eq JSON.parse(body) }
|
40
|
+
end
|
41
|
+
context 'fail' do
|
42
|
+
it_behaves_like 'http request fail'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'request_refresh_token' do
|
47
|
+
subject { storage.request_refresh_token(refresh_token, client_id, client_secret, redirect_url) }
|
48
|
+
let(:access_token) { 'token' }
|
49
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
50
|
+
let(:client_id) { '1234' }
|
51
|
+
let(:client_secret) { 'abcd' }
|
52
|
+
let(:redirect_url) { 'redirect' }
|
53
|
+
let(:refresh_token) { 'refresh' }
|
54
|
+
before(:each) do
|
55
|
+
WebMock.stub_request(:post, CloudDoor::OneDriveApi::TOKEN_URL)
|
56
|
+
.with(
|
57
|
+
body: {
|
58
|
+
'client_id' => client_id,
|
59
|
+
'client_secret' => client_secret,
|
60
|
+
'redirect_uri' => redirect_url,
|
61
|
+
'grant_type' => 'refresh_token',
|
62
|
+
'refresh_token' => refresh_token
|
63
|
+
},
|
64
|
+
headers: {
|
65
|
+
'Content-Type' => 'application/x-www-form-urlencoded'
|
66
|
+
}
|
67
|
+
)
|
68
|
+
.to_return(status: status, body: body)
|
69
|
+
end
|
70
|
+
context 'success' do
|
71
|
+
let(:status) { 200 }
|
72
|
+
let(:body) { JSON('access_token' => 'mock') }
|
73
|
+
it { is_expected.to eq JSON.parse(body) }
|
74
|
+
end
|
75
|
+
context 'fail' do
|
76
|
+
it_behaves_like 'http request fail'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'request_user' do
|
81
|
+
subject { storage.request_user }
|
82
|
+
let(:access_token) { 'token' }
|
83
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
84
|
+
let(:url) { CloudDoor::OneDriveApi::USER_FORMAT % access_token }
|
85
|
+
before(:each) do
|
86
|
+
WebMock.stub_request(:get, url).to_return(status: status, body: body)
|
87
|
+
end
|
88
|
+
context 'success' do
|
89
|
+
let(:status) { 200 }
|
90
|
+
let(:info) { {'name' => 'onedrive'} }
|
91
|
+
let(:body) { JSON(info) }
|
92
|
+
it { is_expected.to eq info }
|
93
|
+
end
|
94
|
+
context 'fail' do
|
95
|
+
it_behaves_like 'http request fail'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'request_dir' do
|
100
|
+
subject { storage.request_dir(file_id) }
|
101
|
+
let(:access_token) { 'token' }
|
102
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
103
|
+
let(:file_id) { 'folder.1234' }
|
104
|
+
let(:url) { CloudDoor::OneDriveApi::DIR_FORMAT % [file_id, access_token] }
|
105
|
+
before(:each) do
|
106
|
+
WebMock.stub_request(:get, url).to_return(status: status, body: body)
|
107
|
+
end
|
108
|
+
context 'success' do
|
109
|
+
let(:status) { 200 }
|
110
|
+
let(:info) { {'data' => ['file1', 'file2']} }
|
111
|
+
let(:body) { JSON(info) }
|
112
|
+
it { is_expected.to eq info }
|
113
|
+
end
|
114
|
+
context 'fail' do
|
115
|
+
it_behaves_like 'http request fail'
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe 'request_file' do
|
120
|
+
subject { storage.request_file(file_id) }
|
121
|
+
let(:access_token) { 'token' }
|
122
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
123
|
+
let(:file_id) { 'file.1234' }
|
124
|
+
let(:url) { CloudDoor::OneDriveApi::FILE_FORMAT % [file_id, access_token] }
|
125
|
+
before(:each) do
|
126
|
+
WebMock.stub_request(:get, url).to_return(status: status, body: body)
|
127
|
+
end
|
128
|
+
context 'success' do
|
129
|
+
let(:status) { 200 }
|
130
|
+
let(:info) { {'id' => 'file.1234', 'name' => 'file1'} }
|
131
|
+
let(:body) { JSON(info) }
|
132
|
+
it { is_expected.to eq info }
|
133
|
+
end
|
134
|
+
context 'fail' do
|
135
|
+
it_behaves_like 'http request fail'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe 'request_download' do
|
140
|
+
subject { storage.request_download(file_id) }
|
141
|
+
let(:access_token) { 'token' }
|
142
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
143
|
+
let(:file_id) { 'file.1234' }
|
144
|
+
let(:url) { CloudDoor::OneDriveApi::DOWNLOAD_FORMAT % [file_id, access_token] }
|
145
|
+
before(:each) do
|
146
|
+
WebMock.stub_request(:get, url).to_return(status: status, body: body)
|
147
|
+
WebMock.stub_request(:get, 'http://localhost').to_return(status: status, body: file_body)
|
148
|
+
end
|
149
|
+
context 'success' do
|
150
|
+
let(:status) { 200 }
|
151
|
+
let(:info) { {'location' => 'http://localhost'} }
|
152
|
+
let(:body) { JSON(info) }
|
153
|
+
let(:file_body) { 'Onedrive' }
|
154
|
+
it { is_expected.to eq file_body }
|
155
|
+
end
|
156
|
+
context 'fail' do
|
157
|
+
context 'file not exists' do
|
158
|
+
let(:status) { 200 }
|
159
|
+
let(:body) { nil }
|
160
|
+
let(:file_body) { nil }
|
161
|
+
it { expect { subject }.to raise_error(CloudDoor::NoDataException) }
|
162
|
+
end
|
163
|
+
context 'http request fail' do
|
164
|
+
let(:status) { 401 }
|
165
|
+
let(:body) { nil }
|
166
|
+
let(:file_body) { nil }
|
167
|
+
it { expect { subject }.to raise_error(CloudDoor::UnauthorizedException) }
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe 'request_upload' do
|
173
|
+
subject { storage.request_upload(file_path, parent_id) }
|
174
|
+
let(:access_token) { 'token' }
|
175
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
176
|
+
let(:file_path) { 'upload_test' }
|
177
|
+
let(:parent_id) { 'folder.1234' }
|
178
|
+
let(:url) { CloudDoor::OneDriveApi::UPLOAD_FORMAT % [parent_id, access_token] }
|
179
|
+
before(:each) do
|
180
|
+
WebMock.stub_request(:post, url).to_return(status: status, body: body)
|
181
|
+
open(file_path, 'wb') { |file| file << 'upload_test' }
|
182
|
+
end
|
183
|
+
context 'success' do
|
184
|
+
let(:status) { 200 }
|
185
|
+
let(:info) { {'id' => 'file.1234', 'name' => file_path} }
|
186
|
+
let(:body) { JSON(info) }
|
187
|
+
it { is_expected.to eq info }
|
188
|
+
end
|
189
|
+
context 'fail' do
|
190
|
+
it_behaves_like 'http request fail'
|
191
|
+
end
|
192
|
+
after(:each) do
|
193
|
+
File.delete(file_path) if File.exist?(file_path)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe 'request_delete' do
|
198
|
+
subject { storage.request_delete(file_id) }
|
199
|
+
let(:access_token) { 'token' }
|
200
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
201
|
+
let(:file_id) { 'file.1234' }
|
202
|
+
let(:url) { CloudDoor::OneDriveApi::DELETE_FORMAT % [file_id, access_token] }
|
203
|
+
before(:each) do
|
204
|
+
WebMock.stub_request(:delete, url).to_return(status: status, body: body)
|
205
|
+
end
|
206
|
+
context 'success' do
|
207
|
+
let(:status) { 200 }
|
208
|
+
let(:info) { {'id' => 'file.1234', 'name' => 'file1'} }
|
209
|
+
let(:body) { JSON(info) }
|
210
|
+
it { is_expected.to eq info }
|
211
|
+
end
|
212
|
+
context 'fail' do
|
213
|
+
it_behaves_like 'http request fail'
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
describe 'request_mkdir' do
|
218
|
+
subject { storage.request_mkdir(mkdir_name, parent_id) }
|
219
|
+
let(:access_token) { 'token' }
|
220
|
+
let(:storage) { CloudDoor::OneDriveApi.new(access_token) }
|
221
|
+
let(:mkdir_name) { 'folder2' }
|
222
|
+
let(:parent_id) { 'folder.1234' }
|
223
|
+
let(:url) { CloudDoor::OneDriveApi::MKDIR_FORMAT % parent_id }
|
224
|
+
before(:each) do
|
225
|
+
WebMock.stub_request(:post, url)
|
226
|
+
.with(
|
227
|
+
body: JSON('name' => mkdir_name),
|
228
|
+
headers: {
|
229
|
+
'Authorization' => "Bearer #{access_token}",
|
230
|
+
'Content-Type' => 'application/json'
|
231
|
+
}
|
232
|
+
)
|
233
|
+
.to_return(status: status, body: body)
|
234
|
+
end
|
235
|
+
context 'success' do
|
236
|
+
let(:status) { 200 }
|
237
|
+
let(:info) { {'id' => 'folder.5678', 'name' => mkdir_name} }
|
238
|
+
let(:body) { JSON(info) }
|
239
|
+
it { is_expected.to eq info }
|
240
|
+
end
|
241
|
+
context 'fail' do
|
242
|
+
it_behaves_like 'http request fail'
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe 'make_auth_url' do
|
247
|
+
subject { CloudDoor::OneDriveApi.make_auth_url(client_id, redirect_url) }
|
248
|
+
let(:client_id) { '1234' }
|
249
|
+
let(:redirect_url) { 'redirect' }
|
250
|
+
let(:auth_url) do
|
251
|
+
CloudDoor::OneDriveApi::AUTH_FORMAT %
|
252
|
+
[client_id, CloudDoor::OneDriveApi::UPDATE_SCOPE, redirect_url]
|
253
|
+
end
|
254
|
+
it { is_expected.to eq auth_url }
|
255
|
+
end
|
256
|
+
end
|