Passed
Pull Request — master (#335)
by Jaisen
02:05
created

test_import_with_full_path()   A

Complexity

Conditions 4

Size

Total Lines 27
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 16
nop 0
dl 0
loc 27
rs 9.6
c 0
b 0
f 0
1
# Project imports
2
from imp import load_source
3
import mock
4
import os
5
import sys
6
import shutil
7
8
from click.testing import CliRunner
9
from nose.plugins.skip import SkipTest
10
from nose.tools import assert_raises
11
from six import text_type, unichr as six_unichr
12
from tempfile import gettempdir
13
14
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
15
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))))
16
17
import helper
18
elodie = load_source('elodie', os.path.abspath('{}/../../elodie.py'.format(os.path.dirname(os.path.realpath(__file__)))))
19
20
from elodie.config import load_config
21
from elodie.localstorage import Db
22
from elodie.media.audio import Audio
23
from elodie.media.photo import Photo
24
from elodie.media.text import Text
25
from elodie.media.video import Video
26
from elodie.plugins.plugins import Plugins
27
from elodie.plugins.googlephotos.googlephotos import GooglePhotos
28
29
os.environ['TZ'] = 'GMT'
30
31
def test_import_file_text():
32
    temporary_folder, folder = helper.create_working_folder()
33
    temporary_folder_destination, folder_destination = helper.create_working_folder()
34
35
    origin = '%s/valid.txt' % folder
36
    shutil.copyfile(helper.get_file('valid.txt'), origin)
37
38
    helper.reset_dbs()
39
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
40
    helper.restore_dbs()
41
42
    shutil.rmtree(folder)
43
    shutil.rmtree(folder_destination)
44
45
    assert helper.path_tz_fix(os.path.join('2016-04-Apr','London','2016-04-07_11-15-26-valid-sample-title.txt')) in dest_path, dest_path
46
47
def test_import_file_audio():
48
    temporary_folder, folder = helper.create_working_folder()
49
    temporary_folder_destination, folder_destination = helper.create_working_folder()
50
51
    origin = '%s/audio.m4a' % folder
52
    shutil.copyfile(helper.get_file('audio.m4a'), origin)
53
54
    helper.reset_dbs()
55
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
56
    helper.restore_dbs()
57
58
    shutil.rmtree(folder)
59
    shutil.rmtree(folder_destination)
60
61
    assert helper.path_tz_fix(os.path.join('2016-01-Jan','Houston','2016-01-04_05-28-15-audio.m4a')) in dest_path, dest_path
62
63
def test_import_file_photo():
64
    temporary_folder, folder = helper.create_working_folder()
65
    temporary_folder_destination, folder_destination = helper.create_working_folder()
66
67
    origin = '%s/plain.jpg' % folder
68
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
69
70
    helper.reset_dbs()
71
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
72
    helper.restore_dbs()
73
74
    shutil.rmtree(folder)
75
    shutil.rmtree(folder_destination)
76
77
    assert helper.path_tz_fix(os.path.join('2015-12-Dec','Unknown Location','2015-12-05_00-59-26-plain.jpg')) in dest_path, dest_path
78
79
def test_import_file_video():
80
    temporary_folder, folder = helper.create_working_folder()
81
    temporary_folder_destination, folder_destination = helper.create_working_folder()
82
83
    origin = '%s/video.mov' % folder
84
    shutil.copyfile(helper.get_file('video.mov'), origin)
85
86
    helper.reset_dbs()
87
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
88
    helper.restore_dbs()
89
90
    shutil.rmtree(folder)
91
    shutil.rmtree(folder_destination)
92
93
    assert helper.path_tz_fix(os.path.join('2015-01-Jan','California','2015-01-19_12-45-11-video.mov')) in dest_path, dest_path
94
95 View Code Duplication
def test_import_file_path_utf8_encoded_ascii_checkmark():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
96
    temporary_folder, folder = helper.create_working_folder()
97
    temporary_folder_destination, folder_destination = helper.create_working_folder()
98
99
    origin = text_type(folder)+u'/unicode\u2713filename.txt'
100
    # encode the unicode string to ascii
101
    origin = origin.encode('utf-8')
102
103
    shutil.copyfile(helper.get_file('valid.txt'), origin)
104
105
    helper.reset_dbs()
106
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
107
    helper.restore_dbs()
108
109
    shutil.rmtree(folder)
110
    shutil.rmtree(folder_destination)
111
112
    assert helper.path_tz_fix(os.path.join('2016-04-Apr','London',u'2016-04-07_11-15-26-unicode\u2713filename-sample-title.txt')) in dest_path, dest_path
113
114 View Code Duplication
def test_import_file_path_unicode_checkmark():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
115
    temporary_folder, folder = helper.create_working_folder()
116
    temporary_folder_destination, folder_destination = helper.create_working_folder()
117
118
    origin = text_type(folder)+u'/unicode\u2713filename.txt'
119
120
    shutil.copyfile(helper.get_file('valid.txt'), origin)
121
122
    helper.reset_dbs()
123
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
124
    helper.restore_dbs()
125
126
    shutil.rmtree(folder)
127
    shutil.rmtree(folder_destination)
128
129
    assert helper.path_tz_fix(os.path.join('2016-04-Apr','London',u'2016-04-07_11-15-26-unicode\u2713filename-sample-title.txt')) in dest_path, dest_path
130
131 View Code Duplication
def test_import_file_path_utf8_encoded_ascii_latin_nbsp():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
132
    temporary_folder, folder = helper.create_working_folder()
133
    temporary_folder_destination, folder_destination = helper.create_working_folder()
134
135
    origin = text_type(folder)+u'/unicode'+six_unichr(160)+u'filename.txt'
136
    # encode the unicode string to ascii
137
    origin = origin.encode('utf-8')
138
139
    shutil.copyfile(helper.get_file('valid.txt'), origin)
140
141
    helper.reset_dbs()
142
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
143
    helper.restore_dbs()
144
145
    shutil.rmtree(folder)
146
    shutil.rmtree(folder_destination)
147
148
    assert helper.path_tz_fix(os.path.join('2016-04-Apr','London',u'2016-04-07_11-15-26-unicode\xa0filename-sample-title.txt')) in dest_path, dest_path
149
150 View Code Duplication
def test_import_file_path_unicode_latin_nbsp():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
151
    temporary_folder, folder = helper.create_working_folder()
152
    temporary_folder_destination, folder_destination = helper.create_working_folder()
153
154
    origin = text_type(folder)+u'/unicode'+six_unichr(160)+u'filename.txt'
155
156
    shutil.copyfile(helper.get_file('valid.txt'), origin)
157
158
    helper.reset_dbs()
159
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
160
    helper.restore_dbs()
161
162
    shutil.rmtree(folder)
163
    shutil.rmtree(folder_destination)
164
165
    assert helper.path_tz_fix(os.path.join('2016-04-Apr','London',u'2016-04-07_11-15-26-unicode\xa0filename-sample-title.txt')) in dest_path, dest_path
166
    
167 View Code Duplication
def test_import_file_allow_duplicate_false():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
168
    temporary_folder, folder = helper.create_working_folder()
169
    temporary_folder_destination, folder_destination = helper.create_working_folder()
170
171
    origin = '%s/valid.txt' % folder
172
    shutil.copyfile(helper.get_file('valid.txt'), origin)
173
174
    helper.reset_dbs()
175
    dest_path1 = elodie.import_file(origin, folder_destination, False, False, False)
176
    dest_path2 = elodie.import_file(origin, folder_destination, False, False, False)
177
    helper.restore_dbs()
178
179
    shutil.rmtree(folder)
180
    shutil.rmtree(folder_destination)
181
182
    assert dest_path1 is not None
183
    assert dest_path2 is None
184
185 View Code Duplication
def test_import_file_allow_duplicate_true():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
186
    temporary_folder, folder = helper.create_working_folder()
187
    temporary_folder_destination, folder_destination = helper.create_working_folder()
188
189
    origin = '%s/valid.txt' % folder
190
    shutil.copyfile(helper.get_file('valid.txt'), origin)
191
192
    helper.reset_dbs()
193
    dest_path1 = elodie.import_file(origin, folder_destination, False, False, True)
194
    dest_path2 = elodie.import_file(origin, folder_destination, False, False, True)
195
    helper.restore_dbs()
196
197
    shutil.rmtree(folder)
198
    shutil.rmtree(folder_destination)
199
200
    assert dest_path1 is not None
201
    assert dest_path2 is not None
202
    assert dest_path1 == dest_path2
203
204 View Code Duplication
def test_import_file_send_to_trash_false():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
205
    temporary_folder, folder = helper.create_working_folder()
206
    temporary_folder_destination, folder_destination = helper.create_working_folder()
207
208
    origin = '%s/valid.txt' % folder
209
    shutil.copyfile(helper.get_file('valid.txt'), origin)
210
211
    helper.reset_dbs()
212
    dest_path1 = elodie.import_file(origin, folder_destination, False, False, False)
213
    assert os.path.isfile(origin), origin
214
    helper.restore_dbs()
215
216
    shutil.rmtree(folder)
217
    shutil.rmtree(folder_destination)
218
219
    assert dest_path1 is not None
220
221 View Code Duplication
def test_import_file_send_to_trash_true():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
222
    raise SkipTest("Temporarily disable send2trash test gh-230")
223
224
    temporary_folder, folder = helper.create_working_folder()
225
    temporary_folder_destination, folder_destination = helper.create_working_folder()
226
227
    origin = '%s/valid.txt' % folder
228
    shutil.copyfile(helper.get_file('valid.txt'), origin)
229
230
    helper.reset_dbs()
231
    dest_path1 = elodie.import_file(origin, folder_destination, False, True, False)
232
    assert not os.path.isfile(origin), origin
233
    helper.restore_dbs()
234
235
    shutil.rmtree(folder)
236
    shutil.rmtree(folder_destination)
237
238
    assert dest_path1 is not None
239
240
@mock.patch('elodie.config.config_file', '%s/config.ini-import-with-full-path' % gettempdir())
241
def test_import_with_full_path():
242
    with open('%s/config.ini-import-with-full-path' % gettempdir(), 'w') as f:
243
        f.write("""
244
[Directory]
245
location=%city
246
date=%Y-%m
247
full_path=%year/%location
248
        """)
249
    if hasattr(load_config, 'config'):
250
        del load_config.config
251
252
    temporary_folder, folder = helper.create_working_folder()
253
    temporary_folder_destination, folder_destination = helper.create_working_folder()
254
255
    origin = '%s/plain.jpg' % folder
256
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
257
258
    dest_path = elodie.import_file(origin, folder_destination, False, True, False)
259
260
    shutil.rmtree(folder)
261
    shutil.rmtree(folder_destination)
262
263
    if hasattr(load_config, 'config'):
264
        del load_config.config
265
266
    assert '2015-12/Unknown Location/2015-12-05_00-59-26-plain.jpg' in dest_path, dest_path
267
268 View Code Duplication
def test_import_destination_in_source():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
269
    temporary_folder, folder = helper.create_working_folder()
270
    folder_destination = '{}/destination'.format(folder)
271
    os.mkdir(folder_destination)
272
273
    origin = '%s/plain.jpg' % folder
274
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
275
276
    helper.reset_dbs()
277
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
278
    helper.restore_dbs()
279
280
    shutil.rmtree(folder)
281
282
    assert dest_path is None, dest_path
283
284 View Code Duplication
def test_import_destination_in_source_gh_287():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
285
    temporary_folder, folder = helper.create_working_folder()
286
    folder_destination = '{}-destination'.format(folder)
287
    os.mkdir(folder_destination)
288
289
    origin = '%s/video.mov' % folder
290
    shutil.copyfile(helper.get_file('video.mov'), origin)
291
292
    helper.reset_dbs()
293
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
294
    helper.restore_dbs()
295
296
    shutil.rmtree(folder)
297
298
    assert dest_path is not None, dest_path
299
300 View Code Duplication
def test_import_invalid_file_exit_code():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
301
    temporary_folder, folder = helper.create_working_folder()
302
    temporary_folder_destination, folder_destination = helper.create_working_folder()
303
304
    # use a good and bad
305
    origin_invalid = '%s/invalid.jpg' % folder
306
    shutil.copyfile(helper.get_file('invalid.jpg'), origin_invalid)
307
308
    origin_valid = '%s/valid.jpg' % folder
309
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
310
311
    helper.reset_dbs()
312
    runner = CliRunner()
313
    result = runner.invoke(elodie._import, ['--destination', folder_destination, origin_invalid, origin_valid])
314
    helper.restore_dbs()
315
316
    shutil.rmtree(folder)
317
    shutil.rmtree(folder_destination)
318
319
    assert result.exit_code == 1, result.exit_code
320
321 View Code Duplication
def test_update_location_on_audio():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
322
    temporary_folder, folder = helper.create_working_folder()
323
    temporary_folder_destination, folder_destination = helper.create_working_folder()
324
325
    origin = '%s/audio.m4a' % folder
326
    shutil.copyfile(helper.get_file('audio.m4a'), origin)
327
328
    audio = Audio(origin)
329
    metadata = audio.get_metadata()
330
331
    helper.reset_dbs()
332
    status = elodie.update_location(audio, origin, 'Sunnyvale, CA')
333
    helper.restore_dbs()
334
335
    audio_processed = Audio(origin)
336
    metadata_processed = audio_processed.get_metadata()
337
338
    shutil.rmtree(folder)
339
    shutil.rmtree(folder_destination)
340
341
    assert status == True, status
342
    assert metadata['latitude'] != metadata_processed['latitude'], metadata_processed['latitude']
343
    assert helper.isclose(metadata_processed['latitude'], 37.36883), metadata_processed['latitude']
344
    assert helper.isclose(metadata_processed['longitude'], -122.03635), metadata_processed['longitude']
345
346 View Code Duplication
def test_update_location_on_photo():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
347
    temporary_folder, folder = helper.create_working_folder()
348
    temporary_folder_destination, folder_destination = helper.create_working_folder()
349
350
    origin = '%s/plain.jpg' % folder
351
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
352
353
    photo = Photo(origin)
354
    metadata = photo.get_metadata()
355
356
    helper.reset_dbs()
357
    status = elodie.update_location(photo, origin, 'Sunnyvale, CA')
358
    helper.restore_dbs()
359
360
    photo_processed = Photo(origin)
361
    metadata_processed = photo_processed.get_metadata()
362
363
    shutil.rmtree(folder)
364
    shutil.rmtree(folder_destination)
365
366
    assert status == True, status
367
    assert metadata['latitude'] != metadata_processed['latitude']
368
    assert helper.isclose(metadata_processed['latitude'], 37.36883), metadata_processed['latitude']
369
    assert helper.isclose(metadata_processed['longitude'], -122.03635), metadata_processed['longitude']
370
371 View Code Duplication
def test_update_location_on_text():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
372
    temporary_folder, folder = helper.create_working_folder()
373
    temporary_folder_destination, folder_destination = helper.create_working_folder()
374
375
    origin = '%s/text.txt' % folder
376
    shutil.copyfile(helper.get_file('text.txt'), origin)
377
378
    text = Text(origin)
379
    metadata = text.get_metadata()
380
381
    helper.reset_dbs()
382
    status = elodie.update_location(text, origin, 'Sunnyvale, CA')
383
    helper.restore_dbs()
384
385
    text_processed = Text(origin)
386
    metadata_processed = text_processed.get_metadata()
387
388
    shutil.rmtree(folder)
389
    shutil.rmtree(folder_destination)
390
391
    assert status == True, status
392
    assert metadata['latitude'] != metadata_processed['latitude']
393
    assert helper.isclose(metadata_processed['latitude'], 37.36883), metadata_processed['latitude']
394
    assert helper.isclose(metadata_processed['longitude'], -122.03635), metadata_processed['longitude']
395
396 View Code Duplication
def test_update_location_on_video():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
397
    temporary_folder, folder = helper.create_working_folder()
398
    temporary_folder_destination, folder_destination = helper.create_working_folder()
399
400
    origin = '%s/video.mov' % folder
401
    shutil.copyfile(helper.get_file('video.mov'), origin)
402
403
    video = Video(origin)
404
    metadata = video.get_metadata()
405
406
    helper.reset_dbs()
407
    status = elodie.update_location(video, origin, 'Sunnyvale, CA')
408
    helper.restore_dbs()
409
410
    video_processed = Video(origin)
411
    metadata_processed = video_processed.get_metadata()
412
413
    shutil.rmtree(folder)
414
    shutil.rmtree(folder_destination)
415
416
    assert status == True, status
417
    assert metadata['latitude'] != metadata_processed['latitude']
418
    assert helper.isclose(metadata_processed['latitude'], 37.36883), metadata_processed['latitude']
419
    assert helper.isclose(metadata_processed['longitude'], -122.03635), metadata_processed['longitude']
420
421 View Code Duplication
def test_update_time_on_audio():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
422
    temporary_folder, folder = helper.create_working_folder()
423
    temporary_folder_destination, folder_destination = helper.create_working_folder()
424
425
    origin = '%s/audio.m4a' % folder
426
    shutil.copyfile(helper.get_file('audio.m4a'), origin)
427
428
    audio = Audio(origin)
429
    metadata = audio.get_metadata()
430
431
    helper.reset_dbs()
432
    status = elodie.update_time(audio, origin, '2000-01-01 12:00:00')
433
    helper.restore_dbs()
434
435
    audio_processed = Audio(origin)
436
    metadata_processed = audio_processed.get_metadata()
437
438
    shutil.rmtree(folder)
439
    shutil.rmtree(folder_destination)
440
441
    assert status == True, status
442
    assert metadata['date_taken'] != metadata_processed['date_taken']
443
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
444
445 View Code Duplication
def test_update_time_on_photo():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
446
    temporary_folder, folder = helper.create_working_folder()
447
    temporary_folder_destination, folder_destination = helper.create_working_folder()
448
449
    origin = '%s/plain.jpg' % folder
450
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
451
452
    photo = Photo(origin)
453
    metadata = photo.get_metadata()
454
455
    helper.reset_dbs()
456
    status = elodie.update_time(photo, origin, '2000-01-01 12:00:00')
457
    helper.restore_dbs()
458
459
    photo_processed = Photo(origin)
460
    metadata_processed = photo_processed.get_metadata()
461
462
    shutil.rmtree(folder)
463
    shutil.rmtree(folder_destination)
464
465
    assert status == True, status
466
    assert metadata['date_taken'] != metadata_processed['date_taken']
467
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
468
469 View Code Duplication
def test_update_time_on_text():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
470
    temporary_folder, folder = helper.create_working_folder()
471
    temporary_folder_destination, folder_destination = helper.create_working_folder()
472
473
    origin = '%s/text.txt' % folder
474
    shutil.copyfile(helper.get_file('text.txt'), origin)
475
476
    text = Text(origin)
477
    metadata = text.get_metadata()
478
479
    helper.reset_dbs()
480
    status = elodie.update_time(text, origin, '2000-01-01 12:00:00')
481
    helper.restore_dbs()
482
483
    text_processed = Text(origin)
484
    metadata_processed = text_processed.get_metadata()
485
486
    shutil.rmtree(folder)
487
    shutil.rmtree(folder_destination)
488
489
    assert status == True, status
490
    assert metadata['date_taken'] != metadata_processed['date_taken']
491
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
492
493 View Code Duplication
def test_update_time_on_video():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
494
    temporary_folder, folder = helper.create_working_folder()
495
    temporary_folder_destination, folder_destination = helper.create_working_folder()
496
497
    origin = '%s/video.mov' % folder
498
    shutil.copyfile(helper.get_file('video.mov'), origin)
499
500
    video = Video(origin)
501
    metadata = video.get_metadata()
502
503
    helper.reset_dbs()
504
    status = elodie.update_time(video, origin, '2000-01-01 12:00:00')
505
    helper.restore_dbs()
506
507
    video_processed = Video(origin)
508
    metadata_processed = video_processed.get_metadata()
509
510
    shutil.rmtree(folder)
511
    shutil.rmtree(folder_destination)
512
513
    assert status == True, status
514
    assert metadata['date_taken'] != metadata_processed['date_taken']
515
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
516
517
def test_update_with_directory_passed_in():
518
    temporary_folder, folder = helper.create_working_folder()
519
    temporary_folder_destination, folder_destination = helper.create_working_folder()
520
521
    origin = '%s/valid.txt' % folder
522
    shutil.copyfile(helper.get_file('valid.txt'), origin)
523
524
    helper.reset_dbs()
525
    runner = CliRunner()
526
    result = runner.invoke(elodie._import, ['--destination', folder_destination, folder])
527
    runner2 = CliRunner()
528
    result = runner2.invoke(elodie._update, ['--album', 'test', folder_destination])
529
    helper.restore_dbs()
530
531
    updated_file_path = "{}/2016-04-Apr/test/2016-04-07_11-15-26-valid-sample-title.txt".format(folder_destination)
532
    updated_file_exists = os.path.isfile(updated_file_path)
533
534
    shutil.rmtree(folder)
535
    shutil.rmtree(folder_destination)
536
537
    assert updated_file_exists, updated_file_path
538
539 View Code Duplication
def test_update_invalid_file_exit_code():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
540
    temporary_folder, folder = helper.create_working_folder()
541
    temporary_folder_destination, folder_destination = helper.create_working_folder()
542
543
    # use a good and bad
544
    origin_invalid = '%s/invalid.jpg' % folder
545
    shutil.copyfile(helper.get_file('invalid.jpg'), origin_invalid)
546
547
    origin_valid = '%s/valid.jpg' % folder
548
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
549
550
    helper.reset_dbs()
551
    runner = CliRunner()
552
    result = runner.invoke(elodie._update, ['--album', 'test', origin_invalid, origin_valid])
553
    helper.restore_dbs()
554
555
    shutil.rmtree(folder)
556
    shutil.rmtree(folder_destination)
557
558
    assert result.exit_code == 1, result.exit_code
559
560
def test_regenerate_db_invalid_source():
561
    runner = CliRunner()
562
    result = runner.invoke(elodie._generate_db, ['--source', '/invalid/path'])
563
    assert result.exit_code == 1, result.exit_code
564
565
def test_regenerate_valid_source():
566
    temporary_folder, folder = helper.create_working_folder()
567
568
    origin = '%s/valid.txt' % folder
569
    shutil.copyfile(helper.get_file('valid.txt'), origin)
570
571
    helper.reset_dbs()
572
    runner = CliRunner()
573
    result = runner.invoke(elodie._generate_db, ['--source', folder])
574
    db = Db()
575
    helper.restore_dbs()
576
577
    shutil.rmtree(folder)
578
579
    assert result.exit_code == 0, result.exit_code
580
    assert '3c19a5d751cf19e093b7447297731124d9cc987d3f91a9d1872c3b1c1b15639a' in db.hash_db, db.hash_db
581
582
def test_regenerate_valid_source_with_invalid_files():
583
    temporary_folder, folder = helper.create_working_folder()
584
585
    origin_valid = '%s/valid.txt' % folder
586
    shutil.copyfile(helper.get_file('valid.txt'), origin_valid)
587
    origin_invalid = '%s/invalid.invalid' % folder
588
    shutil.copyfile(helper.get_file('invalid.invalid'), origin_invalid)
589
590
    helper.reset_dbs()
591
    runner = CliRunner()
592
    result = runner.invoke(elodie._generate_db, ['--source', folder])
593
    db = Db()
594
    helper.restore_dbs()
595
596
    shutil.rmtree(folder)
597
598
    assert result.exit_code == 0, result.exit_code
599
    assert '3c19a5d751cf19e093b7447297731124d9cc987d3f91a9d1872c3b1c1b15639a' in db.hash_db, db.hash_db
600
    assert 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' not in db.hash_db, db.hash_db
601
602
def test_verify_ok():
603
    temporary_folder, folder = helper.create_working_folder()
604
605
    origin = '%s/valid.txt' % folder
606
    shutil.copyfile(helper.get_file('valid.txt'), origin)
607
608
    helper.reset_dbs()
609
    runner = CliRunner()
610
    runner.invoke(elodie._generate_db, ['--source', folder])
611
    result = runner.invoke(elodie._verify)
612
    helper.restore_dbs()
613
614
    shutil.rmtree(folder)
615
616
    assert 'Success         1' in result.output, result.output
617
    assert 'Error           0' in result.output, result.output
618
619
def test_verify_error():
620
    temporary_folder, folder = helper.create_working_folder()
621
622
    origin = '%s/valid.txt' % folder
623
    shutil.copyfile(helper.get_file('valid.txt'), origin)
624
625
    helper.reset_dbs()
626
    runner = CliRunner()
627
    runner.invoke(elodie._generate_db, ['--source', folder])
628
    with open(origin, 'w') as f:
629
        f.write('changed text')
630
    result = runner.invoke(elodie._verify)
631
    helper.restore_dbs()
632
633
    shutil.rmtree(folder)
634
635
    assert origin in result.output, result.output
636
    assert 'Error           1' in result.output, result.output
637
638
@mock.patch('elodie.config.config_file', '%s/config.ini-cli-import-with-full-path' % gettempdir())
639
def test_cli_import_with_full_path():
640
    with open('%s/config.ini-cli-import-with-full-path' % gettempdir(), 'w') as f:
641
        f.write("""
642
[Directory]
643
location=%city
644
date=%Y-%m
645
full_path=%date/%location
646
        """)
647
    if hasattr(load_config, 'config'):
648
        del load_config.config
649
650
651
    temporary_folder, folder = helper.create_working_folder()
652
    temporary_folder_destination, folder_destination = helper.create_working_folder()
653
654
    origin = '%s/plain.jpg' % folder
655
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
656
657
    runner = CliRunner()
658
    # import
659
    result = runner.invoke(elodie._import, ['--destination', folder_destination, origin])
660
661
662
    shutil.rmtree(folder)
663
    shutil.rmtree(folder_destination)
664
665
    if hasattr(load_config, 'config'):
666
        del load_config.config
667
668
    assert '2015-12/Unknown Location/2015-12-05_00-59-26-plain.jpg' in result.output, result.output
669
670
@mock.patch('elodie.config.config_file', '%s/config.ini-cli-batch-plugin-googlephotos' % gettempdir())
671
def test_cli_batch_plugin_googlephotos():
672
    auth_file = helper.get_file('plugins/googlephotos/auth_file.json')
673
    secrets_file = helper.get_file('plugins/googlephotos/secrets_file.json')
674
    config_string = """
675
    [Plugins]
676
    plugins=GooglePhotos
677
678
    [PluginGooglePhotos]
679
    auth_file={}
680
    secrets_file={}
681
            """
682
    config_string_fmt = config_string.format(
683
        auth_file,
684
        secrets_file
685
    )
686
    with open('%s/config.ini-cli-batch-plugin-googlephotos' % gettempdir(), 'w') as f:
687
        f.write(config_string_fmt)
688
689
    if hasattr(load_config, 'config'):
690
        del load_config.config
691
692
    final_file_path_1 = helper.get_file('plain.jpg')
693
    final_file_path_2 = helper.get_file('no-exif.jpg')
694
    sample_metadata_1 = Photo(final_file_path_1).get_metadata()
695
    sample_metadata_2 = Photo(final_file_path_2).get_metadata()
696
    gp = GooglePhotos()
697
    gp.after('', '', final_file_path_1, sample_metadata_1)
698
    gp.after('', '', final_file_path_2, sample_metadata_1)
699
700
    if hasattr(load_config, 'config'):
701
        del load_config.config
702
703
    runner = CliRunner()
704
    result = runner.invoke(elodie._batch)
705
    assert "elodie/elodie/tests/files/plain.jpg uploaded successfully.\"}\n" in result.output, result.output
706
    assert "elodie/elodie/tests/files/no-exif.jpg uploaded successfully.\"}\n" in result.output, result.output
707
708
def test_cli_debug_import():
709
    runner = CliRunner()
710
    # import
711
    result = runner.invoke(elodie._import, ['--destination', '/does/not/exist', '/does/not/exist'])
712
    assert "Could not find /does/not/exist\n" not in result.output, result.output
713
    result = runner.invoke(elodie._import, ['--destination', '/does/not/exist', '--debug', '/does/not/exist'])
714
    assert "Could not find /does/not/exist\n" in result.output, result.output
715
716
def test_cli_debug_update():
717
    runner = CliRunner()
718
    # update
719
    result = runner.invoke(elodie._update, ['--location', 'foobar', '/does/not/exist'])
720
    assert "Could not find /does/not/exist\n" not in result.output, result.output
721
    result = runner.invoke(elodie._update, ['--location', 'foobar', '--debug', '/does/not/exist'])
722
    assert "Could not find /does/not/exist\n" in result.output, result.output
723