test_regenerate_valid_source()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nop 0
dl 0
loc 16
rs 9.8
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','Rainham','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','Pinecrest','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','Rainham',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','Rainham',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','Rainham',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','Rainham',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 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...
241
    temporary_folder, folder = helper.create_working_folder()
242
    folder_destination = '{}/destination'.format(folder)
243
    os.mkdir(folder_destination)
244
245
    origin = '%s/plain.jpg' % folder
246
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
247
248
    helper.reset_dbs()
249
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
250
    helper.restore_dbs()
251
252
    shutil.rmtree(folder)
253
254
    assert dest_path is None, dest_path
255
256 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...
257
    temporary_folder, folder = helper.create_working_folder()
258
    folder_destination = '{}-destination'.format(folder)
259
    os.mkdir(folder_destination)
260
261
    origin = '%s/video.mov' % folder
262
    shutil.copyfile(helper.get_file('video.mov'), origin)
263
264
    helper.reset_dbs()
265
    dest_path = elodie.import_file(origin, folder_destination, False, False, False)
266
    helper.restore_dbs()
267
268
    shutil.rmtree(folder)
269
270
    assert dest_path is not None, dest_path
271
272 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...
273
    temporary_folder, folder = helper.create_working_folder()
274
    temporary_folder_destination, folder_destination = helper.create_working_folder()
275
276
    # use a good and bad
277
    origin_invalid = '%s/invalid.jpg' % folder
278
    shutil.copyfile(helper.get_file('invalid.jpg'), origin_invalid)
279
280
    origin_valid = '%s/valid.jpg' % folder
281
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
282
283
    helper.reset_dbs()
284
    runner = CliRunner()
285
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--allow-duplicates', origin_invalid, origin_valid])
286
    helper.restore_dbs()
287
288
    shutil.rmtree(folder)
289
    shutil.rmtree(folder_destination)
290
291
    assert result.exit_code == 1, result.exit_code
292
293 View Code Duplication
def test_import_file_with_single_exclude():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
294
    temporary_folder, folder = helper.create_working_folder()
295
    temporary_folder_destination, folder_destination = helper.create_working_folder()
296
297
    origin_valid = '%s/valid.jpg' % folder
298
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
299
300
    runner = CliRunner()
301
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--exclude-regex', origin_valid[0:5], '--allow-duplicates', origin_valid])
302
303
    assert 'Success         0' in result.output, result.output
304
    assert 'Error           0' in result.output, result.output
305
306 View Code Duplication
def test_import_file_with_multiple_exclude():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
307
    temporary_folder, folder = helper.create_working_folder()
308
    temporary_folder_destination, folder_destination = helper.create_working_folder()
309
310
    origin_valid = '%s/valid.jpg' % folder
311
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
312
313
    runner = CliRunner()
314
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--exclude-regex', 'does not exist in path', '--exclude-regex', origin_valid[0:5], '--allow-duplicates', origin_valid])
315
316
    assert 'Success         0' in result.output, result.output
317
    assert 'Error           0' in result.output, result.output
318
319 View Code Duplication
def test_import_file_with_non_matching_exclude():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
320
    temporary_folder, folder = helper.create_working_folder()
321
    temporary_folder_destination, folder_destination = helper.create_working_folder()
322
323
    origin_valid = '%s/valid.jpg' % folder
324
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
325
326
    runner = CliRunner()
327
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--exclude-regex', 'does not exist in path', '--allow-duplicates', origin_valid])
328
329
    assert 'Success         1' in result.output, result.output
330
    assert 'Error           0' in result.output, result.output
331
332 View Code Duplication
def test_import_directory_with_matching_exclude():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
333
    temporary_folder, folder = helper.create_working_folder()
334
    temporary_folder_destination, folder_destination = helper.create_working_folder()
335
336
    origin_valid = '%s/valid.jpg' % folder
337
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
338
339
    runner = CliRunner()
340
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--source', folder, '--exclude-regex', folder[1:5], '--allow-duplicates'])
341
342
    assert 'Success         0' in result.output, result.output
343
    assert 'Error           0' in result.output, result.output
344
345 View Code Duplication
def test_import_directory_with_non_matching_exclude():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
346
    temporary_folder, folder = helper.create_working_folder()
347
    temporary_folder_destination, folder_destination = helper.create_working_folder()
348
349
    origin_valid = '%s/valid.jpg' % folder
350
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
351
352
    runner = CliRunner()
353
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--source', folder, '--exclude-regex', 'non-matching', '--allow-duplicates'])
354
355
    assert 'Success         1' in result.output, result.output
356
    assert 'Error           0' in result.output, result.output
357
358 View Code Duplication
@mock.patch('elodie.config.config_file', '%s/config.ini-import-file-with-single-config-exclude' % gettempdir())
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
359
def test_import_file_with_single_config_exclude():
360
    config_string = """
361
    [Exclusions]
362
    name1=valid
363
            """
364
    with open('%s/config.ini-import-file-with-single-config-exclude' % gettempdir(), 'w') as f:
365
        f.write(config_string)
366
367
    if hasattr(load_config, 'config'):
368
        del load_config.config
369
370
    temporary_folder, folder = helper.create_working_folder()
371
    temporary_folder_destination, folder_destination = helper.create_working_folder()
372
373
    origin_valid = '%s/valid.jpg' % folder
374
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
375
376
    runner = CliRunner()
377
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--allow-duplicates', origin_valid, '--debug'])
378
379
    if hasattr(load_config, 'config'):
380
        del load_config.config
381
382
    assert 'Success         0' in result.output, result.output
383
    assert 'Error           0' in result.output, result.output
384
385 View Code Duplication
@mock.patch('elodie.config.config_file', '%s/config.ini-import-file-with-multiple-config-exclude' % gettempdir())
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
386
def test_import_file_with_multiple_config_exclude():
387
    config_string = """
388
    [Exclusions]
389
    name1=notvalidatall
390
    name2=valid
391
            """
392
    with open('%s/config.ini-import-file-with-multiple-config-exclude' % gettempdir(), 'w') as f:
393
        f.write(config_string)
394
395
    if hasattr(load_config, 'config'):
396
        del load_config.config
397
398
    temporary_folder, folder = helper.create_working_folder()
399
    temporary_folder_destination, folder_destination = helper.create_working_folder()
400
401
    origin_valid = '%s/valid.jpg' % folder
402
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
403
404
    runner = CliRunner()
405
    result = runner.invoke(elodie._import, ['--destination', folder_destination, '--allow-duplicates', origin_valid, '--debug'])
406
407
    if hasattr(load_config, 'config'):
408
        del load_config.config
409
410
    assert 'Success         0' in result.output, result.output
411
    assert 'Error           0' in result.output, result.output
412
413 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...
414
    temporary_folder, folder = helper.create_working_folder()
415
    temporary_folder_destination, folder_destination = helper.create_working_folder()
416
417
    origin = '%s/audio.m4a' % folder
418
    shutil.copyfile(helper.get_file('audio.m4a'), origin)
419
420
    audio = Audio(origin)
421
    metadata = audio.get_metadata()
422
423
    helper.reset_dbs()
424
    status = elodie.update_location(audio, origin, 'Sunnyvale, CA')
425
    helper.restore_dbs()
426
427
    audio_processed = Audio(origin)
428
    metadata_processed = audio_processed.get_metadata()
429
430
    shutil.rmtree(folder)
431
    shutil.rmtree(folder_destination)
432
433
    assert status == True, status
434
    assert metadata['latitude'] != metadata_processed['latitude'], metadata_processed['latitude']
435
    assert helper.isclose(metadata_processed['latitude'], 37.37187), metadata_processed['latitude']
436
    assert helper.isclose(metadata_processed['longitude'], -122.03749), metadata_processed['longitude']
437
438 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...
439
    temporary_folder, folder = helper.create_working_folder()
440
    temporary_folder_destination, folder_destination = helper.create_working_folder()
441
442
    origin = '%s/plain.jpg' % folder
443
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
444
445
    photo = Photo(origin)
446
    metadata = photo.get_metadata()
447
448
    helper.reset_dbs()
449
    status = elodie.update_location(photo, origin, 'Sunnyvale, CA')
450
    helper.restore_dbs()
451
452
    photo_processed = Photo(origin)
453
    metadata_processed = photo_processed.get_metadata()
454
455
    shutil.rmtree(folder)
456
    shutil.rmtree(folder_destination)
457
458
    assert status == True, status
459
    assert metadata['latitude'] != metadata_processed['latitude']
460
    assert helper.isclose(metadata_processed['latitude'], 37.37187), metadata_processed['latitude']
461
    assert helper.isclose(metadata_processed['longitude'], -122.03749), metadata_processed['longitude']
462
463 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...
464
    temporary_folder, folder = helper.create_working_folder()
465
    temporary_folder_destination, folder_destination = helper.create_working_folder()
466
467
    origin = '%s/text.txt' % folder
468
    shutil.copyfile(helper.get_file('text.txt'), origin)
469
470
    text = Text(origin)
471
    metadata = text.get_metadata()
472
473
    helper.reset_dbs()
474
    status = elodie.update_location(text, origin, 'Sunnyvale, CA')
475
    helper.restore_dbs()
476
477
    text_processed = Text(origin)
478
    metadata_processed = text_processed.get_metadata()
479
480
    shutil.rmtree(folder)
481
    shutil.rmtree(folder_destination)
482
483
    assert status == True, status
484
    assert metadata['latitude'] != metadata_processed['latitude']
485
    assert helper.isclose(metadata_processed['latitude'], 37.37187), metadata_processed['latitude']
486
    assert helper.isclose(metadata_processed['longitude'], -122.03749), metadata_processed['longitude']
487
488 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...
489
    temporary_folder, folder = helper.create_working_folder()
490
    temporary_folder_destination, folder_destination = helper.create_working_folder()
491
492
    origin = '%s/video.mov' % folder
493
    shutil.copyfile(helper.get_file('video.mov'), origin)
494
495
    video = Video(origin)
496
    metadata = video.get_metadata()
497
498
    helper.reset_dbs()
499
    status = elodie.update_location(video, origin, 'Sunnyvale, CA')
500
    helper.restore_dbs()
501
502
    video_processed = Video(origin)
503
    metadata_processed = video_processed.get_metadata()
504
505
    shutil.rmtree(folder)
506
    shutil.rmtree(folder_destination)
507
508
    assert status == True, status
509
    assert metadata['latitude'] != metadata_processed['latitude']
510
    assert helper.isclose(metadata_processed['latitude'], 37.37187), metadata_processed['latitude']
511
    assert helper.isclose(metadata_processed['longitude'], -122.03749), metadata_processed['longitude']
512
513 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...
514
    temporary_folder, folder = helper.create_working_folder()
515
    temporary_folder_destination, folder_destination = helper.create_working_folder()
516
517
    origin = '%s/audio.m4a' % folder
518
    shutil.copyfile(helper.get_file('audio.m4a'), origin)
519
520
    audio = Audio(origin)
521
    metadata = audio.get_metadata()
522
523
    helper.reset_dbs()
524
    status = elodie.update_time(audio, origin, '2000-01-01 12:00:00')
525
    helper.restore_dbs()
526
527
    audio_processed = Audio(origin)
528
    metadata_processed = audio_processed.get_metadata()
529
530
    shutil.rmtree(folder)
531
    shutil.rmtree(folder_destination)
532
533
    assert status == True, status
534
    assert metadata['date_taken'] != metadata_processed['date_taken']
535
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
536
537 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...
538
    temporary_folder, folder = helper.create_working_folder()
539
    temporary_folder_destination, folder_destination = helper.create_working_folder()
540
541
    origin = '%s/plain.jpg' % folder
542
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
543
544
    photo = Photo(origin)
545
    metadata = photo.get_metadata()
546
547
    helper.reset_dbs()
548
    status = elodie.update_time(photo, origin, '2000-01-01 12:00:00')
549
    helper.restore_dbs()
550
551
    photo_processed = Photo(origin)
552
    metadata_processed = photo_processed.get_metadata()
553
554
    shutil.rmtree(folder)
555
    shutil.rmtree(folder_destination)
556
557
    assert status == True, status
558
    assert metadata['date_taken'] != metadata_processed['date_taken']
559
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
560
561 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...
562
    temporary_folder, folder = helper.create_working_folder()
563
    temporary_folder_destination, folder_destination = helper.create_working_folder()
564
565
    origin = '%s/text.txt' % folder
566
    shutil.copyfile(helper.get_file('text.txt'), origin)
567
568
    text = Text(origin)
569
    metadata = text.get_metadata()
570
571
    helper.reset_dbs()
572
    status = elodie.update_time(text, origin, '2000-01-01 12:00:00')
573
    helper.restore_dbs()
574
575
    text_processed = Text(origin)
576
    metadata_processed = text_processed.get_metadata()
577
578
    shutil.rmtree(folder)
579
    shutil.rmtree(folder_destination)
580
581
    assert status == True, status
582
    assert metadata['date_taken'] != metadata_processed['date_taken']
583
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
584
585 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...
586
    temporary_folder, folder = helper.create_working_folder()
587
    temporary_folder_destination, folder_destination = helper.create_working_folder()
588
589
    origin = '%s/video.mov' % folder
590
    shutil.copyfile(helper.get_file('video.mov'), origin)
591
592
    video = Video(origin)
593
    metadata = video.get_metadata()
594
595
    helper.reset_dbs()
596
    status = elodie.update_time(video, origin, '2000-01-01 12:00:00')
597
    helper.restore_dbs()
598
599
    video_processed = Video(origin)
600
    metadata_processed = video_processed.get_metadata()
601
602
    shutil.rmtree(folder)
603
    shutil.rmtree(folder_destination)
604
605
    assert status == True, status
606
    assert metadata['date_taken'] != metadata_processed['date_taken']
607
    assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
608
609
def test_update_with_directory_passed_in():
610
    temporary_folder, folder = helper.create_working_folder()
611
    temporary_folder_destination, folder_destination = helper.create_working_folder()
612
613
    origin = '%s/valid.txt' % folder
614
    shutil.copyfile(helper.get_file('valid.txt'), origin)
615
616
    helper.reset_dbs()
617
    runner = CliRunner()
618
    result = runner.invoke(elodie._import, ['--destination', folder_destination, folder])
619
    runner2 = CliRunner()
620
    result = runner2.invoke(elodie._update, ['--album', 'test', folder_destination])
621
    helper.restore_dbs()
622
623
    updated_file_path = "{}/2016-04-Apr/test/2016-04-07_11-15-26-valid-sample-title.txt".format(folder_destination)
624
    updated_file_exists = os.path.isfile(updated_file_path)
625
626
    shutil.rmtree(folder)
627
    shutil.rmtree(folder_destination)
628
629
    assert updated_file_exists, updated_file_path
630
631 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...
632
    temporary_folder, folder = helper.create_working_folder()
633
    temporary_folder_destination, folder_destination = helper.create_working_folder()
634
635
    # use a good and bad
636
    origin_invalid = '%s/invalid.jpg' % folder
637
    shutil.copyfile(helper.get_file('invalid.jpg'), origin_invalid)
638
639
    origin_valid = '%s/valid.jpg' % folder
640
    shutil.copyfile(helper.get_file('plain.jpg'), origin_valid)
641
642
    helper.reset_dbs()
643
    runner = CliRunner()
644
    result = runner.invoke(elodie._update, ['--album', 'test', origin_invalid, origin_valid])
645
    helper.restore_dbs()
646
647
    shutil.rmtree(folder)
648
    shutil.rmtree(folder_destination)
649
650
    assert result.exit_code == 1, result.exit_code
651
652
def test_regenerate_db_invalid_source():
653
    runner = CliRunner()
654
    result = runner.invoke(elodie._generate_db, ['--source', '/invalid/path'])
655
    assert result.exit_code == 1, result.exit_code
656
657
def test_regenerate_valid_source():
658
    temporary_folder, folder = helper.create_working_folder()
659
660
    origin = '%s/valid.txt' % folder
661
    shutil.copyfile(helper.get_file('valid.txt'), origin)
662
663
    helper.reset_dbs()
664
    runner = CliRunner()
665
    result = runner.invoke(elodie._generate_db, ['--source', folder])
666
    db = Db()
667
    helper.restore_dbs()
668
669
    shutil.rmtree(folder)
670
671
    assert result.exit_code == 0, result.exit_code
672
    assert '3c19a5d751cf19e093b7447297731124d9cc987d3f91a9d1872c3b1c1b15639a' in db.hash_db, db.hash_db
673
674
def test_regenerate_valid_source_with_invalid_files():
675
    temporary_folder, folder = helper.create_working_folder()
676
677
    origin_valid = '%s/valid.txt' % folder
678
    shutil.copyfile(helper.get_file('valid.txt'), origin_valid)
679
    origin_invalid = '%s/invalid.invalid' % folder
680
    shutil.copyfile(helper.get_file('invalid.invalid'), origin_invalid)
681
682
    helper.reset_dbs()
683
    runner = CliRunner()
684
    result = runner.invoke(elodie._generate_db, ['--source', folder])
685
    db = Db()
686
    helper.restore_dbs()
687
688
    shutil.rmtree(folder)
689
690
    assert result.exit_code == 0, result.exit_code
691
    assert '3c19a5d751cf19e093b7447297731124d9cc987d3f91a9d1872c3b1c1b15639a' in db.hash_db, db.hash_db
692
    assert 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' not in db.hash_db, db.hash_db
693
694
def test_verify_ok():
695
    temporary_folder, folder = helper.create_working_folder()
696
697
    origin = '%s/valid.txt' % folder
698
    shutil.copyfile(helper.get_file('valid.txt'), origin)
699
700
    helper.reset_dbs()
701
    runner = CliRunner()
702
    runner.invoke(elodie._generate_db, ['--source', folder])
703
    result = runner.invoke(elodie._verify)
704
    helper.restore_dbs()
705
706
    shutil.rmtree(folder)
707
708
    assert 'Success         1' in result.output, result.output
709
    assert 'Error           0' in result.output, result.output
710
711
def test_verify_error():
712
    temporary_folder, folder = helper.create_working_folder()
713
714
    origin = '%s/valid.txt' % folder
715
    shutil.copyfile(helper.get_file('valid.txt'), origin)
716
717
    helper.reset_dbs()
718
    runner = CliRunner()
719
    runner.invoke(elodie._generate_db, ['--source', folder])
720
    with open(origin, 'w') as f:
721
        f.write('changed text')
722
    result = runner.invoke(elodie._verify)
723
    helper.restore_dbs()
724
725
    shutil.rmtree(folder)
726
727
    assert origin in result.output, result.output
728
    assert 'Error           1' in result.output, result.output
729
730
@mock.patch('elodie.config.config_file', '%s/config.ini-cli-batch-plugin-googlephotos' % gettempdir())
731
def test_cli_batch_plugin_googlephotos():
732
    auth_file = helper.get_file('plugins/googlephotos/auth_file.json')
733
    secrets_file = helper.get_file('plugins/googlephotos/secrets_file.json')
734
    config_string = """
735
    [Plugins]
736
    plugins=GooglePhotos
737
738
    [PluginGooglePhotos]
739
    auth_file={}
740
    secrets_file={}
741
            """
742
    config_string_fmt = config_string.format(
743
        auth_file,
744
        secrets_file
745
    )
746
    with open('%s/config.ini-cli-batch-plugin-googlephotos' % gettempdir(), 'w') as f:
747
        f.write(config_string_fmt)
748
749
    if hasattr(load_config, 'config'):
750
        del load_config.config
751
752
    final_file_path_1 = helper.get_file('plain.jpg')
753
    final_file_path_2 = helper.get_file('no-exif.jpg')
754
    sample_metadata_1 = Photo(final_file_path_1).get_metadata()
755
    sample_metadata_2 = Photo(final_file_path_2).get_metadata()
756
    gp = GooglePhotos()
757
    gp.after('', '', final_file_path_1, sample_metadata_1)
758
    gp.after('', '', final_file_path_2, sample_metadata_1)
759
760
    runner = CliRunner()
761
    result = runner.invoke(elodie._batch)
762
763
    if hasattr(load_config, 'config'):
764
        del load_config.config
765
766
    assert "elodie/tests/files/plain.jpg uploaded successfully.\"}\n" in result.output, result.output
767
    assert "elodie/tests/files/no-exif.jpg uploaded successfully.\"}\n" in result.output, result.output
768
769
def test_cli_debug_import():
770
    runner = CliRunner()
771
    # import
772
    result = runner.invoke(elodie._import, ['--destination', '/does/not/exist', '/does/not/exist'])
773
    assert "Could not find /does/not/exist\n" not in result.output, result.output
774
    result = runner.invoke(elodie._import, ['--destination', '/does/not/exist', '--debug', '/does/not/exist'])
775
    assert "Could not find /does/not/exist\n" in result.output, result.output
776
777
def test_cli_debug_update():
778
    runner = CliRunner()
779
    # update
780
    result = runner.invoke(elodie._update, ['--location', 'foobar', '/does/not/exist'])
781
    assert "Could not find /does/not/exist\n" not in result.output, result.output
782
    result = runner.invoke(elodie._update, ['--location', 'foobar', '--debug', '/does/not/exist'])
783
    assert "Could not find /does/not/exist\n" in result.output, result.output
784