"""Unit testing suite for the Libravatar Plugin""" ## Copyright (C) 2015 Rafael Laboissiere ## ## This program is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Affero Public License as published by ## the Free Software Foundation, either version 3 of the License, or (at ## your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## Affero General Public License for more details. ## ## You should have received a copy of the GNU Affero General Public License ## along with this program. If not, see http://www.gnu.org/licenses/. import os import re import unittest import hashlib from tempfile import mkdtemp from shutil import rmtree from . import libravatar from pelican import Pelican from pelican.settings import read_settings AUTHOR_EMAIL = 'bart.simpson@example.com' MD5_HASH = hashlib.md5 (AUTHOR_EMAIL).hexdigest () LIBRAVATAR_BASE_URL = 'http://cdn.libravatar.org/avatar/' class TestLibravatarURL (unittest.TestCase): """Class for testing the URL output of the Libravatar plugin""" def setUp (self, override = None): self.output_path = mkdtemp (prefix = 'pelicantests.') self.content_path = mkdtemp (prefix = 'pelicantests.') theme_path = os.path.join (os.path.dirname (os.path.abspath (__file__)), 'test_data', 'theme') settings = { 'PATH': self.content_path, 'THEME': theme_path, 'OUTPUT_PATH': self.output_path, 'PLUGINS': [libravatar], 'CACHE_CONTENT': False } if override: settings.update (override) fid = open (os.path.join (self.content_path, 'test.md'), 'w') fid.write ('Title: Test\nDate:\nEmail: ' + AUTHOR_EMAIL + '\n\n') fid.close () self.settings = read_settings (override = settings) pelican = Pelican (settings = self.settings) pelican.run () def tearDown (self): rmtree (self.output_path) rmtree (self.content_path) def test_url (self, options = ''): fid = open (os.path.join (self.output_path, 'test.html'), 'r') found = False for line in fid.readlines (): print line if re.search (LIBRAVATAR_BASE_URL + MD5_HASH + options, line): found = True break assert found class TestLibravatarMissing (TestLibravatarURL): """Class for testing the Libravatar "missing picture" option""" def setUp (self, override = None): self.library = 'wavatar' TestLibravatarURL.setUp (self, override = {'LIBRAVATAR_MISSING': self.library}) def test_url (self): TestLibravatarURL.test_url (self, '\?d=' + self.library) class TestLibravatarSize (TestLibravatarURL): """Class for testing the Libravatar size option""" def setUp (self, override = None): self.size = 100 TestLibravatarURL.setUp (self, override = {'LIBRAVATAR_SIZE': self.size}) def test_url (self): TestLibravatarURL.test_url (self, '\?s=' + str (self.size))