ordigi/elodie/tests/filesystem.py

276 lines
8.4 KiB
Python
Raw Normal View History

# Project imports
import os
import sys
import hashlib
import random
import re
import shutil
import string
import tempfile
import time
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
from elodie import filesystem
from elodie.media.media import Media
from elodie.media.photo import Photo
from elodie.media.video import Video
os.environ['TZ'] = 'GMT'
filesystem = filesystem.FileSystem()
def test_create_directory_success():
folder = '%s/%s' % (tempfile.gettempdir(), random_string(10))
status = filesystem.create_directory(folder)
# Needs to be a subdirectory
assert tempfile.gettempdir() != folder
assert status == True
assert os.path.isdir(folder) == True
assert os.path.exists(folder) == True
# Clean up
shutil.rmtree(folder)
def test_create_directory_recursive_success():
folder = '%s/%s/%s' % (tempfile.gettempdir(), random_string(10), random_string(10))
status = filesystem.create_directory(folder)
# Needs to be a subdirectory
assert tempfile.gettempdir() != folder
assert status == True
assert os.path.isdir(folder) == True
assert os.path.exists(folder) == True
shutil.rmtree(folder)
def test_create_directory_invalid_permissions():
status = filesystem.create_directory('/apathwhichdoesnotexist/afolderwhichdoesnotexist')
assert status == False
def test_delete_directory_if_empty():
folder = '%s/%s' % (tempfile.gettempdir(), random_string(10))
os.makedirs(folder)
assert os.path.isdir(folder) == True
assert os.path.exists(folder) == True
filesystem.delete_directory_if_empty(folder)
assert os.path.isdir(folder) == False
assert os.path.exists(folder) == False
def test_delete_directory_if_empty_when_not_empty():
folder = '%s/%s/%s' % (tempfile.gettempdir(), random_string(10), random_string(10))
os.makedirs(folder)
parent_folder = os.path.dirname(folder)
assert os.path.isdir(folder) == True
assert os.path.exists(folder) == True
assert os.path.isdir(parent_folder) == True
assert os.path.exists(parent_folder) == True
filesystem.delete_directory_if_empty(parent_folder)
assert os.path.isdir(folder) == True
assert os.path.exists(folder) == True
assert os.path.isdir(parent_folder) == True
assert os.path.exists(parent_folder) == True
shutil.rmtree(parent_folder)
def test_get_all_files_success():
folder = populate_folder(5)
files = filesystem.get_all_files(folder)
shutil.rmtree(folder)
assert len(files) == 5
def test_get_all_files_by_extension():
folder = populate_folder(5)
files = filesystem.get_all_files(folder)
assert len(files) == 5
files = filesystem.get_all_files(folder, 'jpg')
assert len(files) == 3
files = filesystem.get_all_files(folder, 'txt')
assert len(files) == 2
files = filesystem.get_all_files(folder, 'gif')
assert len(files) == 0
shutil.rmtree(folder)
def test_get_current_directory():
assert os.getcwd() == filesystem.get_current_directory()
def test_get_file_name_plain():
media = Photo(get_file('plain.jpg'))
file_name = filesystem.get_file_name(media)
assert file_name == '2015-12-05_00-59-26-plain.jpg'
def test_get_file_name_with_title():
media = Photo(get_file('with-title.jpg'))
file_name = filesystem.get_file_name(media)
assert file_name == '2015-12-05_00-59-26-with-title-some-title.jpg'
def test_get_folder_name_by_date():
time_tuple = (2010, 4, 15, 1, 2, 3, 0, 0, 0)
folder_name = filesystem.get_folder_name_by_date(time_tuple)
assert folder_name == '2010-04-Apr'
time_tuple = (2010, 9, 15, 1, 2, 3, 0, 0, 0)
folder_name = filesystem.get_folder_name_by_date(time_tuple)
assert folder_name == '2010-09-Sep'
def test_get_folder_path_plain():
media = Photo(get_file('plain.jpg'))
path = filesystem.get_folder_path(media.get_metadata())
assert path == '2015-12-Dec/Unknown Location'
def test_get_folder_path_with_title():
media = Photo(get_file('with-title.jpg'))
path = filesystem.get_folder_path(media.get_metadata())
assert path == '2015-12-Dec/Unknown Location'
def test_get_folder_path_with_location():
media = Photo(get_file('with-location.jpg'))
path = filesystem.get_folder_path(media.get_metadata())
assert path == '2015-12-Dec/Sunnyvale'
def test_get_folder_path_with_location_and_title():
media = Photo(get_file('with-location-and-title.jpg'))
path = filesystem.get_folder_path(media.get_metadata())
assert path == '2015-12-Dec/Sunnyvale'
def test_process_file_plain():
temporary_folder = tempfile.gettempdir()
folder = '%s/%s/%s' % (temporary_folder, random_string(10), random_string(10))
os.makedirs(folder)
origin = '%s/plain.jpg' % folder
shutil.copyfile(get_file('plain.jpg'), origin)
media = Photo(origin)
destination = filesystem.process_file(origin, temporary_folder, media, allowDuplicate=True)
origin_checksum = checksum(origin)
destination_checksum = checksum(destination)
shutil.rmtree(folder)
shutil.rmtree(os.path.dirname(os.path.dirname(destination)))
assert origin_checksum is not None
assert origin_checksum == destination_checksum
assert '2015-12-Dec/Unknown Location/2015-12-05_00-59-26-plain.jpg' in destination
def test_process_file_with_title():
temporary_folder = tempfile.gettempdir()
folder = '%s/%s/%s' % (temporary_folder, random_string(10), random_string(10))
os.makedirs(folder)
origin = '%s/plain.jpg' % folder
shutil.copyfile(get_file('with-title.jpg'), origin)
media = Photo(origin)
destination = filesystem.process_file(origin, temporary_folder, media, allowDuplicate=True)
origin_checksum = checksum(origin)
destination_checksum = checksum(destination)
shutil.rmtree(folder)
shutil.rmtree(os.path.dirname(os.path.dirname(destination)))
assert origin_checksum is not None
assert origin_checksum == destination_checksum
assert '2015-12-Dec/Unknown Location/2015-12-05_00-59-26-plain-some-title.jpg' in destination
def test_process_file_with_location():
temporary_folder = tempfile.gettempdir()
folder = '%s/%s/%s' % (temporary_folder, random_string(10), random_string(10))
os.makedirs(folder)
origin = '%s/plain.jpg' % folder
shutil.copyfile(get_file('with-location.jpg'), origin)
media = Photo(origin)
destination = filesystem.process_file(origin, temporary_folder, media, allowDuplicate=True)
origin_checksum = checksum(origin)
destination_checksum = checksum(destination)
shutil.rmtree(folder)
shutil.rmtree(os.path.dirname(os.path.dirname(destination)))
assert origin_checksum is not None
assert origin_checksum == destination_checksum
assert '2015-12-Dec/Sunnyvale/2015-12-05_00-59-26-plain.jpg' in destination
def test_process_file_with_location_and_title():
temporary_folder = tempfile.gettempdir()
folder = '%s/%s/%s' % (temporary_folder, random_string(10), random_string(10))
os.makedirs(folder)
origin = '%s/plain.jpg' % folder
shutil.copyfile(get_file('with-location-and-title.jpg'), origin)
media = Photo(origin)
destination = filesystem.process_file(origin, temporary_folder, media, allowDuplicate=True)
origin_checksum = checksum(origin)
destination_checksum = checksum(destination)
shutil.rmtree(folder)
shutil.rmtree(os.path.dirname(os.path.dirname(destination)))
assert origin_checksum is not None
assert origin_checksum == destination_checksum
assert '2015-12-Dec/Sunnyvale/2015-12-05_00-59-26-plain-some-title.jpg' in destination
def checksum(file_path, blocksize=65536):
hasher = hashlib.sha256()
with open(file_path, 'r') as f:
buf = f.read(blocksize)
while len(buf) > 0:
hasher.update(buf)
buf = f.read(blocksize)
return hasher.hexdigest()
return None
def get_file(name):
current_folder = os.path.dirname(os.path.realpath(__file__))
return '%s/files/%s' % (current_folder, name)
def populate_folder(number_of_files):
folder = '%s/%s' % (tempfile.gettempdir(), random_string(10))
os.makedirs(folder)
for x in range(0, number_of_files):
ext = 'jpg' if x % 2 == 0 else 'txt'
fname = '%s/%s.%s' % (folder, x, ext)
with open(fname, 'a'):
os.utime(fname, None)
return folder
def random_string(length):
return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(length))