Passed
Pull Request — master (#321)
by Jaisen
02:12
created

elodie.tests.elodie_test.test_cli_debug_import()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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