2016-02-11 12:25:23 +00:00
|
|
|
|
from django.test import TestCase
|
|
|
|
|
|
|
2016-03-07 21:37:18 +02:00
|
|
|
|
from ..models import FileInfo
|
2016-02-11 12:25:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestAttachment(TestCase):
|
2016-02-21 00:14:50 +00:00
|
|
|
|
|
2016-02-11 22:05:55 +00:00
|
|
|
|
TAGS = ("tag1", "tag2", "tag3")
|
2016-02-23 20:15:13 +00:00
|
|
|
|
SUFFIXES = (
|
|
|
|
|
|
"pdf", "png", "jpg", "jpeg", "gif",
|
|
|
|
|
|
"PDF", "PNG", "JPG", "JPEG", "GIF",
|
|
|
|
|
|
"PdF", "PnG", "JpG", "JPeG", "GiF",
|
|
|
|
|
|
)
|
2016-02-21 00:14:50 +00:00
|
|
|
|
|
2016-02-11 22:05:55 +00:00
|
|
|
|
def _test_guess_attributes_from_name(self, path, sender, title, tags):
|
2016-02-23 20:15:13 +00:00
|
|
|
|
for suffix in self.SUFFIXES:
|
2016-02-11 22:05:55 +00:00
|
|
|
|
f = path.format(suffix)
|
2016-03-07 21:37:18 +02:00
|
|
|
|
file_info = FileInfo.from_path(f)
|
|
|
|
|
|
self.assertEqual(file_info.correspondent.name, sender, f)
|
|
|
|
|
|
self.assertEqual(file_info.title, title, f)
|
|
|
|
|
|
self.assertEqual(tuple([t.slug for t in file_info.tags]), tags, f)
|
2016-02-23 20:15:13 +00:00
|
|
|
|
if suffix.lower() == "jpeg":
|
2016-03-07 21:37:18 +02:00
|
|
|
|
self.assertEqual(file_info.suffix, "jpg", f)
|
2016-02-23 20:15:13 +00:00
|
|
|
|
else:
|
2016-03-07 21:37:18 +02:00
|
|
|
|
self.assertEqual(file_info.suffix, suffix.lower(), f)
|
2016-02-11 12:25:23 +00:00
|
|
|
|
|
2016-02-11 22:05:55 +00:00
|
|
|
|
def test_guess_attributes_from_name0(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Sender - Title.{}", "Sender", "Title", ())
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name1(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Spaced Sender - Title.{}", "Spaced Sender", "Title", ())
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name2(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Sender - Spaced Title.{}", "Sender", "Spaced Title", ())
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name3(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Dashed-Sender - Title.{}", "Dashed-Sender", "Title", ())
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name4(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Sender - Dashed-Title.{}", "Sender", "Dashed-Title", ())
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name5(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Sender - Title - tag1,tag2,tag3.{}",
|
|
|
|
|
|
"Sender",
|
|
|
|
|
|
"Title",
|
|
|
|
|
|
self.TAGS
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name6(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Spaced Sender - Title - tag1,tag2,tag3.{}",
|
|
|
|
|
|
"Spaced Sender",
|
|
|
|
|
|
"Title",
|
|
|
|
|
|
self.TAGS
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name7(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Sender - Spaced Title - tag1,tag2,tag3.{}",
|
|
|
|
|
|
"Sender",
|
|
|
|
|
|
"Spaced Title",
|
|
|
|
|
|
self.TAGS
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name8(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Dashed-Sender - Title - tag1,tag2,tag3.{}",
|
|
|
|
|
|
"Dashed-Sender",
|
|
|
|
|
|
"Title",
|
|
|
|
|
|
self.TAGS
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name9(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Sender - Dashed-Title - tag1,tag2,tag3.{}",
|
|
|
|
|
|
"Sender",
|
|
|
|
|
|
"Dashed-Title",
|
|
|
|
|
|
self.TAGS
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name10(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
"/path/to/Σενδερ - Τιτλε - tag1,tag2,tag3.{}",
|
|
|
|
|
|
"Σενδερ",
|
|
|
|
|
|
"Τιτλε",
|
|
|
|
|
|
self.TAGS
|
2016-02-11 12:25:23 +00:00
|
|
|
|
)
|
2016-03-07 21:42:52 +02:00
|
|
|
|
|
2016-03-07 21:48:47 +02:00
|
|
|
|
def test_guess_attributes_from_name_when_correspondent_empty(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
'/path/to/ - weird empty correspondent but should not break.{}',
|
|
|
|
|
|
None,
|
|
|
|
|
|
' - weird empty correspondent but should not break',
|
|
|
|
|
|
()
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name_when_title_starts_with_dash(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
'/path/to/- weird but should not break.{}',
|
|
|
|
|
|
None,
|
|
|
|
|
|
'- weird but should not break',
|
|
|
|
|
|
()
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name_when_title_ends_with_dash(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
'/path/to/weird but should not break -.{}',
|
|
|
|
|
|
None,
|
|
|
|
|
|
'weird but should not break -',
|
|
|
|
|
|
()
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_guess_attributes_from_name_when_title_is_empty(self):
|
|
|
|
|
|
self._test_guess_attributes_from_name(
|
|
|
|
|
|
'/path/to/weird correspondent but should not break - .{}',
|
|
|
|
|
|
'weird correspondent but should not break',
|
|
|
|
|
|
'',
|
|
|
|
|
|
()
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2016-03-07 21:42:52 +02:00
|
|
|
|
|
|
|
|
|
|
class Permutations(TestCase):
|
|
|
|
|
|
valid_correspondents = ['timmy', 'Dr. McWheelie',
|
|
|
|
|
|
'Dash Gor-don', 'ο Θερμαστής']
|
|
|
|
|
|
valid_titles = ['title', 'Title w Spaces', 'Title a-dash', 'Τίτλος', '']
|
|
|
|
|
|
valid_tags = ['tag', 'tig,tag', '-', '0,1,2', '']
|
|
|
|
|
|
valid_suffixes = ['pdf', 'png', 'jpg', 'jpeg', 'gif']
|
|
|
|
|
|
|
|
|
|
|
|
def _test_guessed_attributes(
|
|
|
|
|
|
self, filename, title, suffix, correspondent=None, tags=None):
|
|
|
|
|
|
file_info = FileInfo.from_path(filename)
|
|
|
|
|
|
|
|
|
|
|
|
# Required
|
|
|
|
|
|
self.assertEqual(file_info.title, title, filename)
|
|
|
|
|
|
if suffix == 'jpeg':
|
|
|
|
|
|
suffix = 'jpg'
|
|
|
|
|
|
self.assertEqual(file_info.suffix, suffix, filename)
|
|
|
|
|
|
# Optional
|
|
|
|
|
|
if correspondent is None:
|
|
|
|
|
|
self.assertEqual(file_info.correspondent,
|
|
|
|
|
|
correspondent, filename)
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.assertEqual(file_info.correspondent.name,
|
|
|
|
|
|
correspondent, filename)
|
|
|
|
|
|
if tags is None:
|
|
|
|
|
|
self.assertEqual(file_info.tags, (), filename)
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.assertEqual([t.slug for t in file_info.tags],
|
|
|
|
|
|
tags.split(','),
|
|
|
|
|
|
filename)
|
|
|
|
|
|
|
|
|
|
|
|
def test_just_title(self):
|
|
|
|
|
|
template = '/path/to/{title}.{suffix}'
|
|
|
|
|
|
for title in self.valid_titles:
|
|
|
|
|
|
for suffix in self.valid_suffixes:
|
|
|
|
|
|
spec = dict(title=title, suffix=suffix)
|
|
|
|
|
|
filename = template.format(**spec)
|
|
|
|
|
|
self._test_guessed_attributes(filename, **spec)
|
|
|
|
|
|
|
|
|
|
|
|
def test_title_and_correspondent(self):
|
|
|
|
|
|
template = '/path/to/{correspondent} - {title}.{suffix}'
|
|
|
|
|
|
for correspondent in self.valid_correspondents:
|
|
|
|
|
|
for title in self.valid_titles:
|
|
|
|
|
|
for suffix in self.valid_suffixes:
|
|
|
|
|
|
spec = dict(correspondent=correspondent, title=title,
|
|
|
|
|
|
suffix=suffix)
|
|
|
|
|
|
filename = template.format(**spec)
|
|
|
|
|
|
self._test_guessed_attributes(filename, **spec)
|
|
|
|
|
|
|
|
|
|
|
|
def test_title_and_correspondent_and_tags(self):
|
|
|
|
|
|
template = '/path/to/{correspondent} - {title} - {tags}.{suffix}'
|
|
|
|
|
|
for correspondent in self.valid_correspondents:
|
|
|
|
|
|
for title in self.valid_titles:
|
|
|
|
|
|
for tags in self.valid_tags:
|
|
|
|
|
|
for suffix in self.valid_suffixes:
|
|
|
|
|
|
spec = dict(correspondent=correspondent, title=title,
|
|
|
|
|
|
tags=tags, suffix=suffix)
|
|
|
|
|
|
filename = template.format(**spec)
|
|
|
|
|
|
self._test_guessed_attributes(filename, **spec)
|