diff --git a/tests/support.py b/tests/support.py index 0cd757a6..5829fe78 100644 --- a/tests/support.py +++ b/tests/support.py @@ -1,8 +1,9 @@ from contextlib import contextmanager - from tempfile import mkdtemp from shutil import rmtree +from pelican.contents import Article + @contextmanager def temporary_folder(): @@ -16,3 +17,10 @@ def temporary_folder(): tempdir = mkdtemp() yield tempdir rmtree(tempdir) + + +def get_article(title, slug, content, lang, extra_metadata=None): + metadata = {'slug': slug, 'title': title, 'lang': lang} + if extra_metadata is not None: + metadata.update(extra_metadata) + return Article(content, metadata=metadata) diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 00000000..9654825e --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +try: + import unittest2 as unittest +except ImportError: + import unittest # NOQA +import datetime + +from pelican import utils +from pelican.contents import Article + +from support import get_article + + +class TestUtils(unittest.TestCase): + + def test_get_date(self): + # valid ones + date = datetime.datetime(year=2012, month=11, day=22) + date_hour = datetime.datetime(year=2012, month=11, day=22, hour=22, + minute=11) + date_hour_sec = datetime.datetime(year=2012, month=11, day=22, hour=22, + minute=11, second=10) + dates = {'2012-11-22': date, + '2012/11/22': date, + '2012-11-22 22:11': date_hour, + '2012/11/22 22:11': date_hour, + '22-11-2012': date, + '22/11/2012': date, + '22.11.2012': date, + '2012-22-11': date, + '22.11.2012 22:11': date_hour, + '2012-11-22 22:11:10': date_hour_sec} + + for value, expected in dates.items(): + self.assertEquals(utils.get_date(value), expected, value) + + # invalid ones + invalid_dates = ('2010-110-12', 'yay') + for item in invalid_dates: + self.assertRaises(ValueError, utils.get_date, item) + + def test_slugify(self): + + samples = (('this is a test', 'this-is-a-test'), + ('this is a test', 'this-is-a-test'), + (u'this → is ← a ↑ test', 'this-is-a-test'), + ('this--is---a test', 'this-is-a-test')) + + for value, expected in samples: + self.assertEquals(utils.slugify(value), expected) + + def test_get_relative_path(self): + + samples = (('/test/test', '../../.'), + ('/test/test/', '../../../.'), + ('/', '../.')) + + for value, expected in samples: + self.assertEquals(utils.get_relative_path(value), expected) + + def test_process_translations(self): + # create a bunch of articles + fr_article1 = get_article(lang='fr', slug='yay', title='Un titre', + content='en français') + en_article1 = get_article(lang='en', slug='yay', title='A title', + content='in english') + + articles = [fr_article1, en_article1] + + index, trans = utils.process_translations(articles) + + self.assertIn(en_article1, index) + self.assertIn(fr_article1, trans) + self.assertNotIn(en_article1, trans) + self.assertNotIn(fr_article1, index)