mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Used an exception so show error state. Used a bool flag to make sure the error is only shown once PER error. Updated tests to check for the correct Exception raised
113 lines
4.3 KiB
Python
113 lines
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
||
import shutil
|
||
import os
|
||
import datetime
|
||
import time
|
||
|
||
from pelican import utils
|
||
from .support import get_article, unittest
|
||
|
||
|
||
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'),
|
||
(u'unicode測試許功蓋,你看到了嗎?', 'unicodece-shi-xu-gong-gai-ni-kan-dao-liao-ma'),
|
||
(u'大飯原発4号機、18日夜起動へ', 'da-fan-yuan-fa-4hao-ji-18ri-ye-qi-dong-he'),)
|
||
|
||
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)
|
||
|
||
def test_files_changed(self):
|
||
"""Test if file changes are correctly detected
|
||
Make sure to handle not getting any files correctly"""
|
||
|
||
path = os.path.join(os.path.dirname(__file__), 'content')
|
||
filename = os.path.join(path, 'article_with_metadata.rst')
|
||
changed = utils.files_changed(path, 'rst')
|
||
self.assertEquals(changed, True)
|
||
|
||
changed = utils.files_changed(path, 'rst')
|
||
self.assertEquals(changed, False)
|
||
|
||
t = time.time()
|
||
os.utime(filename, (t, t))
|
||
changed = utils.files_changed(path, 'rst')
|
||
self.assertEquals(changed, True)
|
||
self.assertAlmostEqual(utils.LAST_MTIME, t, delta=1)
|
||
|
||
empty_path = os.path.join(os.path.dirname(__file__), 'empty')
|
||
try:
|
||
os.mkdir(empty_path)
|
||
os.mkdir(os.path.join(empty_path, "empty_folder"))
|
||
shutil.copy(__file__, empty_path)
|
||
with self.assertRaises(NoFilesError):
|
||
utils.files_changed(empty_path, 'rst')
|
||
except OSError:
|
||
self.fail("OSError Exception in test_files_changed test")
|
||
finally:
|
||
shutil.rmtree(empty_path, True)
|
||
|
||
def test_clean_output_dir(self):
|
||
test_directory = os.path.join(os.path.dirname(__file__), 'clean_output')
|
||
content = os.path.join(os.path.dirname(__file__), 'content')
|
||
shutil.copytree(content, test_directory)
|
||
utils.clean_output_dir(test_directory)
|
||
self.assertTrue(os.path.isdir(test_directory))
|
||
self.assertListEqual([], os.listdir(test_directory))
|
||
shutil.rmtree(test_directory)
|