yet another simple static gallery generator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

140 lines
4.5 KiB

import logging
import os
from os.path import join
from click.testing import CliRunner
from sigal import build, init, serve, set_meta
TESTGAL = join(os.path.abspath(os.path.dirname(__file__)), 'sample')
def test_init(tmpdir):
config_file = str(tmpdir.join('sigal.conf.py'))
runner = CliRunner()
result = runner.invoke(init, [config_file])
assert result.exit_code == 0
assert result.output.startswith('Sample config file created:')
assert os.path.isfile(config_file)
result = runner.invoke(init, [config_file])
assert result.exit_code == 1
assert (
result.output == "Found an existing config file, will abort to keep it safe.\n"
)
def test_build(tmpdir, disconnect_signals):
runner = CliRunner()
config_file = str(tmpdir.join('sigal.conf.py'))
tmpdir.mkdir('pictures')
tmpdir = str(tmpdir)
cwd = os.getcwd()
try:
result = runner.invoke(init, [config_file])
assert result.exit_code == 0
os.symlink(join(TESTGAL, 'watermark.png'), join(tmpdir, 'watermark.png'))
os.symlink(
join(TESTGAL, 'pictures', 'dir2', 'KeckObservatory20071020.jpg'),
join(tmpdir, 'pictures', 'KeckObservatory20071020.jpg'),
)
result = runner.invoke(build, ['-n', 1, '--debug'])
assert result.exit_code == 1
os.chdir(tmpdir)
result = runner.invoke(build, ['foo', '-n', 1, '--debug'])
assert result.exit_code == 1
result = runner.invoke(build, ['pictures', 'pictures/out', '-n', 1, '--debug'])
assert result.exit_code == 1
with open(config_file) as f:
text = f.read()
text += """
theme = 'colorbox'
files_to_copy = (('../watermark.png', 'watermark.png'),)
plugins = ['sigal.plugins.adjust', 'sigal.plugins.copyright',
'sigal.plugins.watermark', 'sigal.plugins.feeds',
'sigal.plugins.media_page' 'sigal.plugins.nomedia',
'sigal.plugins.extended_caching']
copyright = "An example copyright message"
copyright_text_font = "foobar"
watermark = "watermark.png"
watermark_position = "scale"
watermark_opacity = 0.3
rss_feed = {'feed_url': 'http://example.org/feed.rss', 'nb_items': 10}
atom_feed = {'feed_url': 'http://example.org/feed.atom', 'nb_items': 10}
"""
with open(config_file, 'w') as f:
f.write(text)
result = runner.invoke(
build, ['pictures', 'build', '--title', 'Testing build', '-n', 1, '--debug']
)
assert result.exit_code == 0
assert os.path.isfile(
join(tmpdir, 'build', 'thumbnails', 'KeckObservatory20071020.jpg')
)
assert os.path.isfile(join(tmpdir, 'build', 'feed.atom'))
assert os.path.isfile(join(tmpdir, 'build', 'feed.rss'))
assert os.path.isfile(join(tmpdir, 'build', 'watermark.png'))
finally:
os.chdir(cwd)
# Reset logger
logger = logging.getLogger('sigal')
logger.handlers[:] = []
logger.setLevel(logging.INFO)
def test_serve(tmpdir):
config_file = str(tmpdir.join('sigal.conf.py'))
runner = CliRunner()
result = runner.invoke(init, [config_file])
assert result.exit_code == 0
result = runner.invoke(serve)
assert result.exit_code == 2
result = runner.invoke(serve, ['-c', config_file])
assert result.exit_code == 1
def test_set_meta(tmpdir):
testdir = tmpdir.mkdir("test")
testfile = tmpdir.join("test.jpg")
testfile.write("")
runner = CliRunner()
result = runner.invoke(set_meta, [str(testdir), "title", "testing"])
assert result.exit_code == 0
assert result.output.startswith("1 metadata key(s) written to")
assert os.path.isfile(str(testdir.join("index.md")))
assert testdir.join("index.md").read() == "Title: testing\n"
# Run again, should give file exists error
result = runner.invoke(set_meta, [str(testdir), "title", "testing"])
assert result.exit_code == 2
result = runner.invoke(
set_meta, [str(testdir.join("non-existant.jpg")), "title", "testing"]
)
assert result.exit_code == 1
result = runner.invoke(set_meta, [str(testfile), "title", "testing"])
assert result.exit_code == 0
assert result.output.startswith("1 metadata key(s) written to")
assert os.path.isfile(str(tmpdir.join("test.md")))
assert tmpdir.join("test.md").read() == "Title: testing\n"
result = runner.invoke(set_meta, [str(testfile), "title"])
assert result.exit_code == 1
assert result.output.startswith("Need an even number of arguments")