2016-04-21 07:23:57 +02:00
# Project imports
from imp import load_source
2017-04-01 12:56:29 +02:00
import mock
2016-04-21 07:23:57 +02:00
import os
import sys
import shutil
2016-12-13 08:54:33 +01:00
from click . testing import CliRunner
2016-04-21 07:23:57 +02:00
from nose . plugins . skip import SkipTest
2016-12-13 08:54:33 +01:00
from nose . tools import assert_raises
2016-12-26 17:20:12 +01:00
from six import text_type , unichr as six_unichr
2017-04-01 12:56:29 +02:00
from tempfile import gettempdir
2016-04-21 07:23:57 +02:00
sys . path . insert ( 0 , os . path . abspath ( os . path . dirname ( os . path . dirname ( os . path . dirname ( os . path . realpath ( __file__ ) ) ) ) ) )
sys . path . insert ( 0 , os . path . abspath ( os . path . dirname ( os . path . dirname ( os . path . dirname ( os . path . dirname ( os . path . realpath ( __file__ ) ) ) ) ) ) )
import helper
elodie = load_source ( ' elodie ' , os . path . abspath ( ' {} /../../elodie.py ' . format ( os . path . dirname ( os . path . realpath ( __file__ ) ) ) ) )
2017-04-01 12:56:29 +02:00
from elodie . config import load_config
2016-12-13 08:54:33 +01:00
from elodie . localstorage import Db
2016-04-22 04:12:25 +02:00
from elodie . media . audio import Audio
from elodie . media . photo import Photo
from elodie . media . text import Text
from elodie . media . video import Video
2019-07-12 09:40:38 +02:00
from elodie . plugins . plugins import Plugins
from elodie . plugins . googlephotos . googlephotos import GooglePhotos
2016-04-21 07:23:57 +02:00
os . environ [ ' TZ ' ] = ' GMT '
def test_import_file_text ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-09-08 06:08:13 +02:00
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-21 07:23:57 +02:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2017-01-03 05:58:52 +01:00
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
2016-04-21 07:23:57 +02:00
def test_import_file_audio ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /audio.m4a ' % folder
shutil . copyfile ( helper . get_file ( ' audio.m4a ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-09-08 06:08:13 +02:00
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-21 07:23:57 +02:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2016-11-08 08:20:11 +01:00
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
2016-04-21 07:23:57 +02:00
def test_import_file_photo ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /plain.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-09-08 06:08:13 +02:00
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-21 07:23:57 +02:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
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
def test_import_file_video ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /video.mov ' % folder
shutil . copyfile ( helper . get_file ( ' video.mov ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-09-08 06:08:13 +02:00
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-21 07:23:57 +02:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
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
2017-07-12 06:11:51 +02:00
def test_import_file_path_utf8_encoded_ascii_checkmark ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = text_type ( folder ) + u ' /unicode \u2713 filename.txt '
# encode the unicode string to ascii
origin = origin . encode ( ' utf-8 ' )
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
helper . reset_dbs ( )
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
helper . restore_dbs ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert helper . path_tz_fix ( os . path . join ( ' 2016-04-Apr ' , ' London ' , u ' 2016-04-07_11-15-26-unicode \u2713 filename-sample-title.txt ' ) ) in dest_path , dest_path
def test_import_file_path_unicode_checkmark ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = text_type ( folder ) + u ' /unicode \u2713 filename.txt '
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
helper . reset_dbs ( )
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
helper . restore_dbs ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert helper . path_tz_fix ( os . path . join ( ' 2016-04-Apr ' , ' London ' , u ' 2016-04-07_11-15-26-unicode \u2713 filename-sample-title.txt ' ) ) in dest_path , dest_path
def test_import_file_path_utf8_encoded_ascii_latin_nbsp ( ) :
2016-12-22 10:53:08 +01:00
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
2016-12-26 17:20:12 +01:00
origin = text_type ( folder ) + u ' /unicode ' + six_unichr ( 160 ) + u ' filename.txt '
2017-01-08 23:43:01 +01:00
# encode the unicode string to ascii
2016-12-26 17:20:12 +01:00
origin = origin . encode ( ' utf-8 ' )
2016-12-22 10:53:08 +01:00
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 06:14:21 +01:00
helper . reset_dbs ( )
2016-12-22 10:53:08 +01:00
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 06:14:21 +01:00
helper . restore_dbs ( )
2016-12-22 10:53:08 +01:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2017-01-08 23:43:01 +01:00
assert helper . path_tz_fix ( os . path . join ( ' 2016-04-Apr ' , ' London ' , u ' 2016-04-07_11-15-26-unicode \xa0 filename-sample-title.txt ' ) ) in dest_path , dest_path
2017-07-12 06:11:51 +02:00
def test_import_file_path_unicode_latin_nbsp ( ) :
2017-01-08 23:43:01 +01:00
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = text_type ( folder ) + u ' /unicode ' + six_unichr ( 160 ) + u ' filename.txt '
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
helper . reset_dbs ( )
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
helper . restore_dbs ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert helper . path_tz_fix ( os . path . join ( ' 2016-04-Apr ' , ' London ' , u ' 2016-04-07_11-15-26-unicode \xa0 filename-sample-title.txt ' ) ) in dest_path , dest_path
2016-12-22 10:53:08 +01:00
2016-09-08 06:08:13 +02:00
def test_import_file_allow_duplicate_false ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-09-08 06:08:13 +02:00
dest_path1 = elodie . import_file ( origin , folder_destination , False , False , False )
dest_path2 = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-09-08 06:08:13 +02:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert dest_path1 is not None
assert dest_path2 is None
def test_import_file_allow_duplicate_true ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-09-08 06:08:13 +02:00
dest_path1 = elodie . import_file ( origin , folder_destination , False , False , True )
dest_path2 = elodie . import_file ( origin , folder_destination , False , False , True )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-09-08 06:08:13 +02:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert dest_path1 is not None
assert dest_path2 is not None
assert dest_path1 == dest_path2
2016-12-23 06:35:15 +01:00
def test_import_file_send_to_trash_false ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 06:14:21 +01:00
helper . reset_dbs ( )
2016-12-23 06:35:15 +01:00
dest_path1 = elodie . import_file ( origin , folder_destination , False , False , False )
assert os . path . isfile ( origin ) , origin
2017-01-03 06:14:21 +01:00
helper . restore_dbs ( )
2016-12-23 06:35:15 +01:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert dest_path1 is not None
def test_import_file_send_to_trash_true ( ) :
2017-07-12 06:04:28 +02:00
raise SkipTest ( " Temporarily disable send2trash test gh-230 " )
2016-12-23 06:35:15 +01:00
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 06:14:21 +01:00
helper . reset_dbs ( )
2016-12-23 06:35:15 +01:00
dest_path1 = elodie . import_file ( origin , folder_destination , False , True , False )
assert not os . path . isfile ( origin ) , origin
2017-01-03 06:14:21 +01:00
helper . restore_dbs ( )
2016-12-23 06:35:15 +01:00
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert dest_path1 is not None
2016-11-08 08:09:23 +01:00
def test_import_destination_in_source ( ) :
temporary_folder , folder = helper . create_working_folder ( )
folder_destination = ' {} /destination ' . format ( folder )
os . mkdir ( folder_destination )
2018-12-02 05:25:04 +01:00
origin = ' %s /plain.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin )
helper . reset_dbs ( )
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
helper . restore_dbs ( )
shutil . rmtree ( folder )
assert dest_path is None , dest_path
def test_import_destination_in_source_gh_287 ( ) :
temporary_folder , folder = helper . create_working_folder ( )
folder_destination = ' {} -destination ' . format ( folder )
os . mkdir ( folder_destination )
2016-11-08 08:09:23 +01:00
origin = ' %s /video.mov ' % folder
shutil . copyfile ( helper . get_file ( ' video.mov ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-11-08 08:09:23 +01:00
dest_path = elodie . import_file ( origin , folder_destination , False , False , False )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-11-08 08:09:23 +01:00
shutil . rmtree ( folder )
2018-12-02 05:25:04 +01:00
assert dest_path is not None , dest_path
2016-11-08 08:09:23 +01:00
2017-01-22 05:52:32 +01:00
def test_import_invalid_file_exit_code ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
# use a good and bad
origin_invalid = ' %s /invalid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' invalid.jpg ' ) , origin_invalid )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
helper . reset_dbs ( )
runner = CliRunner ( )
2019-10-28 04:19:51 +01:00
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --allow-duplicates ' , origin_invalid , origin_valid ] )
2017-01-22 05:52:32 +01:00
helper . restore_dbs ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert result . exit_code == 1 , result . exit_code
2019-10-28 04:19:51 +01:00
def test_import_file_with_single_exclude ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --exclude-regex ' , origin_valid [ 0 : 5 ] , ' --allow-duplicates ' , origin_valid ] )
assert ' Success 0 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
def test_import_file_with_multiple_exclude ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
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 ] )
assert ' Success 0 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
def test_import_file_with_non_matching_exclude ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --exclude-regex ' , ' does not exist in path ' , ' --allow-duplicates ' , origin_valid ] )
assert ' Success 1 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
def test_import_directory_with_matching_exclude ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --source ' , folder , ' --exclude-regex ' , folder [ 1 : 5 ] , ' --allow-duplicates ' ] )
assert ' Success 0 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
def test_import_directory_with_non_matching_exclude ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --source ' , folder , ' --exclude-regex ' , ' non-matching ' , ' --allow-duplicates ' ] )
assert ' Success 1 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
@mock.patch ( ' elodie.config.config_file ' , ' %s /config.ini-import-file-with-single-config-exclude ' % gettempdir ( ) )
def test_import_file_with_single_config_exclude ( ) :
config_string = """
[ Exclusions ]
name1 = valid
"""
with open ( ' %s /config.ini-import-file-with-single-config-exclude ' % gettempdir ( ) , ' w ' ) as f :
f . write ( config_string )
if hasattr ( load_config , ' config ' ) :
del load_config . config
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --allow-duplicates ' , origin_valid , ' --debug ' ] )
if hasattr ( load_config , ' config ' ) :
del load_config . config
assert ' Success 0 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
@mock.patch ( ' elodie.config.config_file ' , ' %s /config.ini-import-file-with-multiple-config-exclude ' % gettempdir ( ) )
def test_import_file_with_multiple_config_exclude ( ) :
config_string = """
[ Exclusions ]
name1 = notvalidatall
name2 = valid
"""
with open ( ' %s /config.ini-import-file-with-multiple-config-exclude ' % gettempdir ( ) , ' w ' ) as f :
f . write ( config_string )
if hasattr ( load_config , ' config ' ) :
del load_config . config
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , ' --allow-duplicates ' , origin_valid , ' --debug ' ] )
if hasattr ( load_config , ' config ' ) :
del load_config . config
assert ' Success 0 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
2016-04-22 04:12:25 +02:00
def test_update_location_on_audio ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /audio.m4a ' % folder
shutil . copyfile ( helper . get_file ( ' audio.m4a ' ) , origin )
audio = Audio ( origin )
metadata = audio . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:12:25 +02:00
status = elodie . update_location ( audio , origin , ' Sunnyvale, CA ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:12:25 +02:00
audio_processed = Audio ( origin )
metadata_processed = audio_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2016-04-22 04:38:00 +02:00
assert status == True , status
2016-10-26 07:10:48 +02:00
assert metadata [ ' latitude ' ] != metadata_processed [ ' latitude ' ] , metadata_processed [ ' latitude ' ]
2016-06-21 20:19:40 +02:00
assert helper . isclose ( metadata_processed [ ' latitude ' ] , 37.36883 ) , metadata_processed [ ' latitude ' ]
2016-04-22 04:12:25 +02:00
assert helper . isclose ( metadata_processed [ ' longitude ' ] , - 122.03635 ) , metadata_processed [ ' longitude ' ]
def test_update_location_on_photo ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /plain.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin )
photo = Photo ( origin )
metadata = photo . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:12:25 +02:00
status = elodie . update_location ( photo , origin , ' Sunnyvale, CA ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:12:25 +02:00
photo_processed = Photo ( origin )
metadata_processed = photo_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2016-04-22 04:38:00 +02:00
assert status == True , status
2016-04-22 04:12:25 +02:00
assert metadata [ ' latitude ' ] != metadata_processed [ ' latitude ' ]
assert helper . isclose ( metadata_processed [ ' latitude ' ] , 37.36883 ) , metadata_processed [ ' latitude ' ]
assert helper . isclose ( metadata_processed [ ' longitude ' ] , - 122.03635 ) , metadata_processed [ ' longitude ' ]
def test_update_location_on_text ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /text.txt ' % folder
shutil . copyfile ( helper . get_file ( ' text.txt ' ) , origin )
text = Text ( origin )
metadata = text . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:12:25 +02:00
status = elodie . update_location ( text , origin , ' Sunnyvale, CA ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:12:25 +02:00
text_processed = Text ( origin )
metadata_processed = text_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2016-04-22 04:38:00 +02:00
assert status == True , status
2016-04-22 04:12:25 +02:00
assert metadata [ ' latitude ' ] != metadata_processed [ ' latitude ' ]
assert helper . isclose ( metadata_processed [ ' latitude ' ] , 37.36883 ) , metadata_processed [ ' latitude ' ]
assert helper . isclose ( metadata_processed [ ' longitude ' ] , - 122.03635 ) , metadata_processed [ ' longitude ' ]
def test_update_location_on_video ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /video.mov ' % folder
shutil . copyfile ( helper . get_file ( ' video.mov ' ) , origin )
video = Video ( origin )
metadata = video . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:12:25 +02:00
status = elodie . update_location ( video , origin , ' Sunnyvale, CA ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:12:25 +02:00
video_processed = Video ( origin )
metadata_processed = video_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
2016-04-22 04:38:00 +02:00
assert status == True , status
2016-04-22 04:12:25 +02:00
assert metadata [ ' latitude ' ] != metadata_processed [ ' latitude ' ]
2016-06-21 20:19:40 +02:00
assert helper . isclose ( metadata_processed [ ' latitude ' ] , 37.36883 ) , metadata_processed [ ' latitude ' ]
2016-04-22 04:12:25 +02:00
assert helper . isclose ( metadata_processed [ ' longitude ' ] , - 122.03635 ) , metadata_processed [ ' longitude ' ]
2016-04-22 04:38:00 +02:00
def test_update_time_on_audio ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /audio.m4a ' % folder
shutil . copyfile ( helper . get_file ( ' audio.m4a ' ) , origin )
audio = Audio ( origin )
metadata = audio . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:38:00 +02:00
status = elodie . update_time ( audio , origin , ' 2000-01-01 12:00:00 ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:38:00 +02:00
audio_processed = Audio ( origin )
metadata_processed = audio_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert status == True , status
assert metadata [ ' date_taken ' ] != metadata_processed [ ' date_taken ' ]
assert metadata_processed [ ' date_taken ' ] == helper . time_convert ( ( 2000 , 1 , 1 , 12 , 0 , 0 , 5 , 1 , 0 ) ) , metadata_processed [ ' date_taken ' ]
def test_update_time_on_photo ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /plain.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin )
photo = Photo ( origin )
metadata = photo . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:38:00 +02:00
status = elodie . update_time ( photo , origin , ' 2000-01-01 12:00:00 ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:38:00 +02:00
photo_processed = Photo ( origin )
metadata_processed = photo_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert status == True , status
assert metadata [ ' date_taken ' ] != metadata_processed [ ' date_taken ' ]
assert metadata_processed [ ' date_taken ' ] == helper . time_convert ( ( 2000 , 1 , 1 , 12 , 0 , 0 , 5 , 1 , 0 ) ) , metadata_processed [ ' date_taken ' ]
def test_update_time_on_text ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /text.txt ' % folder
shutil . copyfile ( helper . get_file ( ' text.txt ' ) , origin )
text = Text ( origin )
metadata = text . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:38:00 +02:00
status = elodie . update_time ( text , origin , ' 2000-01-01 12:00:00 ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:38:00 +02:00
text_processed = Text ( origin )
metadata_processed = text_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert status == True , status
assert metadata [ ' date_taken ' ] != metadata_processed [ ' date_taken ' ]
assert metadata_processed [ ' date_taken ' ] == helper . time_convert ( ( 2000 , 1 , 1 , 12 , 0 , 0 , 5 , 1 , 0 ) ) , metadata_processed [ ' date_taken ' ]
def test_update_time_on_video ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /video.mov ' % folder
shutil . copyfile ( helper . get_file ( ' video.mov ' ) , origin )
video = Video ( origin )
metadata = video . get_metadata ( )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-04-22 04:38:00 +02:00
status = elodie . update_time ( video , origin , ' 2000-01-01 12:00:00 ' )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-04-22 04:38:00 +02:00
video_processed = Video ( origin )
metadata_processed = video_processed . get_metadata ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert status == True , status
assert metadata [ ' date_taken ' ] != metadata_processed [ ' date_taken ' ]
assert metadata_processed [ ' date_taken ' ] == helper . time_convert ( ( 2000 , 1 , 1 , 12 , 0 , 0 , 5 , 1 , 0 ) ) , metadata_processed [ ' date_taken ' ]
2017-01-08 06:49:00 +01:00
def test_update_with_directory_passed_in ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
helper . reset_dbs ( )
runner = CliRunner ( )
result = runner . invoke ( elodie . _import , [ ' --destination ' , folder_destination , folder ] )
runner2 = CliRunner ( )
result = runner2 . invoke ( elodie . _update , [ ' --album ' , ' test ' , folder_destination ] )
helper . restore_dbs ( )
updated_file_path = " {} /2016-04-Apr/test/2016-04-07_11-15-26-valid-sample-title.txt " . format ( folder_destination )
updated_file_exists = os . path . isfile ( updated_file_path )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert updated_file_exists , updated_file_path
2017-01-22 05:52:32 +01:00
def test_update_invalid_file_exit_code ( ) :
temporary_folder , folder = helper . create_working_folder ( )
temporary_folder_destination , folder_destination = helper . create_working_folder ( )
# use a good and bad
origin_invalid = ' %s /invalid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' invalid.jpg ' ) , origin_invalid )
origin_valid = ' %s /valid.jpg ' % folder
shutil . copyfile ( helper . get_file ( ' plain.jpg ' ) , origin_valid )
helper . reset_dbs ( )
runner = CliRunner ( )
result = runner . invoke ( elodie . _update , [ ' --album ' , ' test ' , origin_invalid , origin_valid ] )
helper . restore_dbs ( )
shutil . rmtree ( folder )
shutil . rmtree ( folder_destination )
assert result . exit_code == 1 , result . exit_code
2016-12-13 08:54:33 +01:00
def test_regenerate_db_invalid_source ( ) :
runner = CliRunner ( )
result = runner . invoke ( elodie . _generate_db , [ ' --source ' , ' /invalid/path ' ] )
assert result . exit_code == 1 , result . exit_code
def test_regenerate_valid_source ( ) :
temporary_folder , folder = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-12-13 08:54:33 +01:00
runner = CliRunner ( )
result = runner . invoke ( elodie . _generate_db , [ ' --source ' , folder ] )
db = Db ( )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-12-13 08:54:33 +01:00
shutil . rmtree ( folder )
assert result . exit_code == 0 , result . exit_code
2017-01-03 05:58:52 +01:00
assert ' 3c19a5d751cf19e093b7447297731124d9cc987d3f91a9d1872c3b1c1b15639a ' in db . hash_db , db . hash_db
2016-12-13 08:54:33 +01:00
def test_regenerate_valid_source_with_invalid_files ( ) :
temporary_folder , folder = helper . create_working_folder ( )
origin_valid = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin_valid )
origin_invalid = ' %s /invalid.invalid ' % folder
shutil . copyfile ( helper . get_file ( ' invalid.invalid ' ) , origin_invalid )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-12-13 08:54:33 +01:00
runner = CliRunner ( )
result = runner . invoke ( elodie . _generate_db , [ ' --source ' , folder ] )
db = Db ( )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-12-13 08:54:33 +01:00
shutil . rmtree ( folder )
assert result . exit_code == 0 , result . exit_code
2017-01-03 05:58:52 +01:00
assert ' 3c19a5d751cf19e093b7447297731124d9cc987d3f91a9d1872c3b1c1b15639a ' in db . hash_db , db . hash_db
2016-12-13 08:54:33 +01:00
assert ' e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ' not in db . hash_db , db . hash_db
2016-12-15 10:24:04 +01:00
def test_verify_ok ( ) :
temporary_folder , folder = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-12-15 10:24:04 +01:00
runner = CliRunner ( )
runner . invoke ( elodie . _generate_db , [ ' --source ' , folder ] )
result = runner . invoke ( elodie . _verify )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-12-15 10:24:04 +01:00
shutil . rmtree ( folder )
assert ' Success 1 ' in result . output , result . output
assert ' Error 0 ' in result . output , result . output
def test_verify_error ( ) :
temporary_folder , folder = helper . create_working_folder ( )
origin = ' %s /valid.txt ' % folder
shutil . copyfile ( helper . get_file ( ' valid.txt ' ) , origin )
2017-01-03 05:58:52 +01:00
helper . reset_dbs ( )
2016-12-15 10:24:04 +01:00
runner = CliRunner ( )
runner . invoke ( elodie . _generate_db , [ ' --source ' , folder ] )
with open ( origin , ' w ' ) as f :
f . write ( ' changed text ' )
result = runner . invoke ( elodie . _verify )
2017-01-03 05:58:52 +01:00
helper . restore_dbs ( )
2016-12-15 10:24:04 +01:00
shutil . rmtree ( folder )
assert origin in result . output , result . output
assert ' Error 1 ' in result . output , result . output
2017-05-12 08:43:16 +02:00
2019-07-12 09:40:38 +02:00
@mock.patch ( ' elodie.config.config_file ' , ' %s /config.ini-cli-batch-plugin-googlephotos ' % gettempdir ( ) )
def test_cli_batch_plugin_googlephotos ( ) :
auth_file = helper . get_file ( ' plugins/googlephotos/auth_file.json ' )
secrets_file = helper . get_file ( ' plugins/googlephotos/secrets_file.json ' )
config_string = """
[ Plugins ]
plugins = GooglePhotos
[ PluginGooglePhotos ]
auth_file = { }
secrets_file = { }
"""
config_string_fmt = config_string . format (
auth_file ,
secrets_file
)
with open ( ' %s /config.ini-cli-batch-plugin-googlephotos ' % gettempdir ( ) , ' w ' ) as f :
f . write ( config_string_fmt )
if hasattr ( load_config , ' config ' ) :
del load_config . config
final_file_path_1 = helper . get_file ( ' plain.jpg ' )
final_file_path_2 = helper . get_file ( ' no-exif.jpg ' )
sample_metadata_1 = Photo ( final_file_path_1 ) . get_metadata ( )
sample_metadata_2 = Photo ( final_file_path_2 ) . get_metadata ( )
gp = GooglePhotos ( )
gp . after ( ' ' , ' ' , final_file_path_1 , sample_metadata_1 )
gp . after ( ' ' , ' ' , final_file_path_2 , sample_metadata_1 )
2019-10-28 04:19:51 +01:00
runner = CliRunner ( )
result = runner . invoke ( elodie . _batch )
2019-07-12 09:40:38 +02:00
if hasattr ( load_config , ' config ' ) :
del load_config . config
assert " elodie/elodie/tests/files/plain.jpg uploaded successfully. \" } \n " in result . output , result . output
assert " elodie/elodie/tests/files/no-exif.jpg uploaded successfully. \" } \n " in result . output , result . output
2019-07-11 10:51:34 +02:00
2017-05-12 08:43:16 +02:00
def test_cli_debug_import ( ) :
runner = CliRunner ( )
# import
result = runner . invoke ( elodie . _import , [ ' --destination ' , ' /does/not/exist ' , ' /does/not/exist ' ] )
assert " Could not find /does/not/exist \n " not in result . output , result . output
result = runner . invoke ( elodie . _import , [ ' --destination ' , ' /does/not/exist ' , ' --debug ' , ' /does/not/exist ' ] )
assert " Could not find /does/not/exist \n " in result . output , result . output
def test_cli_debug_update ( ) :
runner = CliRunner ( )
# update
result = runner . invoke ( elodie . _update , [ ' --location ' , ' foobar ' , ' /does/not/exist ' ] )
assert " Could not find /does/not/exist \n " not in result . output , result . output
result = runner . invoke ( elodie . _update , [ ' --location ' , ' foobar ' , ' --debug ' , ' /does/not/exist ' ] )
assert " Could not find /does/not/exist \n " in result . output , result . output