|
|
|
|
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")
|