mirror of
https://github.com/enpaul/kodak.git
synced 2024-11-14 10:36:55 +00:00
Add tests for configuration module
This commit is contained in:
parent
dff79571ba
commit
dac9fd0b18
167
tests/test_configuration.py
Normal file
167
tests/test_configuration.py
Normal file
@ -0,0 +1,167 @@
|
||||
import contextlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Dict
|
||||
|
||||
import pytest
|
||||
|
||||
from kodak import configuration
|
||||
from kodak import constants
|
||||
from kodak import exceptions
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def mockenv(patch, env: Dict[str, str]):
|
||||
for key, value in env.items():
|
||||
patch.setenv(key, value)
|
||||
yield
|
||||
for key in env:
|
||||
patch.delenv(key)
|
||||
|
||||
|
||||
def test_conf_global(monkeypatch):
|
||||
assert configuration.KodakConfig() == configuration.load()
|
||||
|
||||
with mockenv(
|
||||
monkeypatch,
|
||||
{
|
||||
"KODAK_SOURCE_DIR": "foobar/baz/",
|
||||
"KODAK_CONTENT_DIR": "/var/log/run/proc/sys/class/net/dev/opt/srv",
|
||||
"KODAK_EXPOSE_SOURCE": "flalse",
|
||||
"KODAK_PRIVATE": "herblegerble",
|
||||
},
|
||||
):
|
||||
config = configuration.load()
|
||||
assert config.source_dir == (Path.cwd() / "foobar" / "baz")
|
||||
assert config.content_dir == Path(
|
||||
"/", "var", "log", "run", "proc", "sys", "class", "net", "dev", "opt", "srv"
|
||||
)
|
||||
assert not config.expose_source
|
||||
assert not config.private
|
||||
|
||||
with mockenv(
|
||||
monkeypatch, {"KODAK_EXPOSE_SOURCE": "false", "KODAK_PRIVATE": "false"}
|
||||
):
|
||||
config = configuration.load()
|
||||
assert not config.expose_source
|
||||
assert not config.private
|
||||
|
||||
with mockenv(monkeypatch, {"KODAK_EXPOSE_SOURCE": "tRuE", "KODAK_PRIVATE": "TruE"}):
|
||||
config = configuration.load()
|
||||
assert config.expose_source
|
||||
assert config.private
|
||||
|
||||
|
||||
def test_conf_database(monkeypatch):
|
||||
with mockenv(monkeypatch, {"KODAK_DATABASE_BACKEND": "couchdb"}):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
||||
|
||||
pragmas = {"foo": "bar", "fizz": 1, "buzz": True}
|
||||
with mockenv(
|
||||
monkeypatch,
|
||||
{
|
||||
"KODAK_DATABASE_BACKEND": "SQLite",
|
||||
"KODAK_DATABASE_SQLITE_PRAGMAS": json.dumps(pragmas),
|
||||
"KODAK_DATABASE_SQLITE_PATH": "~/nowhere/nothing.db",
|
||||
},
|
||||
):
|
||||
config = configuration.load()
|
||||
assert config.database.sqlite.pragmas == pragmas
|
||||
assert config.database.backend == constants.DatabaseBackend.SQLITE
|
||||
assert (
|
||||
config.database.sqlite.path
|
||||
== Path("~", "nowhere", "nothing.db").expanduser().resolve()
|
||||
)
|
||||
with mockenv(
|
||||
monkeypatch, {"KODAK_DATABASE_SQLITE_PRAGMAS": "this]is{not,valid,,js:on"}
|
||||
):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
||||
|
||||
with mockenv(
|
||||
monkeypatch,
|
||||
{
|
||||
"KODAK_DATABASE_BACKEND": "mariaDB",
|
||||
},
|
||||
):
|
||||
assert (
|
||||
configuration.load().database.backend == constants.DatabaseBackend.MARIADB
|
||||
)
|
||||
with mockenv(monkeypatch, {"KODAK_DATABASE_MARIADB_PORT": "NaN"}):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
||||
|
||||
|
||||
def test_conf_manip(monkeypatch):
|
||||
with mockenv(
|
||||
monkeypatch,
|
||||
{
|
||||
"KODAK_MANIP_BIFF_FORMATS": "png",
|
||||
"KODAK_MANIP_BIFF_BLACK_AND_WHITE": "[jonathan frakes voice] its a total fantasy",
|
||||
},
|
||||
):
|
||||
config = configuration.load()
|
||||
assert "biff" in config.manips
|
||||
manip = config.manips["biff"]
|
||||
assert manip.name == "biff"
|
||||
assert manip.formats == {constants.ImageFormat.PNG}
|
||||
assert not manip.black_and_white
|
||||
|
||||
with mockenv(
|
||||
monkeypatch,
|
||||
{
|
||||
"KODAK_MANIP_BOFF_NAME": "grand poohbah, de d*ink, of/all%of This&That",
|
||||
"KODAK_MANIP_BOFF_FORMATS": "png,jpeg,JPeg",
|
||||
"KODAK_MANIP_BOFF_BLACK_AND_WHITE": "truE",
|
||||
"KODAK_MANIP_BOFF_CROP_HORIZONTAL": "500",
|
||||
"KODAK_MANIP_BOFF_CROP_ANCHOR": "Bottom-Center",
|
||||
"KODAK_MANIP_BOFF_SCALE_VERTICAL": "1.5",
|
||||
"KODAK_MANIP_BOFF_SCALE_STRATEGY": "RelaTive",
|
||||
"KODAK_MANIP_BAFF_CROP_VERTICAL": "128",
|
||||
"KODAK_MANIP_BAFF_SCALE_HORIZONTAL": "200",
|
||||
"KODAK_MANIP_BAFF_SCALE_STRATEGY": "absoLUTE",
|
||||
},
|
||||
):
|
||||
config = configuration.load()
|
||||
assert "grand poohbah, de d*ink, of/all%of This&That" in config.manips
|
||||
assert "baff" in config.manips
|
||||
|
||||
manip = config.manips["grand poohbah, de d*ink, of/all%of This&That"]
|
||||
assert manip.name == "grand poohbah, de d*ink, of/all%of This&That"
|
||||
assert manip.formats == {constants.ImageFormat.JPEG, constants.ImageFormat.PNG}
|
||||
assert manip.black_and_white
|
||||
assert manip.crop.horizontal == 500
|
||||
assert manip.crop.anchor == constants.CropAnchor.BC
|
||||
assert manip.scale.vertical == 1.5
|
||||
assert manip.scale.strategy == constants.ScaleStrategy.RELATIVE
|
||||
|
||||
manip = config.manips["baff"]
|
||||
assert manip.crop.vertical == 128
|
||||
assert manip.scale.horizontal == 200
|
||||
assert manip.scale.strategy == constants.ScaleStrategy.ABSOLUTE
|
||||
|
||||
# bad format values
|
||||
with mockenv(monkeypatch, {"KODAK_MANIP_TERRIBLE_FORMATS": "jpeg,tiff,woff2"}):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
||||
# bad scale strategy value
|
||||
with mockenv(
|
||||
monkeypatch, {"KODAK_MANIP_TERRIBLE_SCALE_STRATEGY": "take it back now yall"}
|
||||
):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
||||
# bad scale value
|
||||
with mockenv(
|
||||
monkeypatch,
|
||||
{
|
||||
"KODAK_MANIP_TERRIBLE_SCALE_STRATEGY": "absolute",
|
||||
"KODAK_MANIP_TERRIBLE_SCALE_HORIZONTAL": "32.5",
|
||||
},
|
||||
):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
||||
# bad crop anchor value
|
||||
with mockenv(monkeypatch, {"KODAK_MANIP_TERRIBLE_CROP_ANCHOR": "ahoy"}):
|
||||
with pytest.raises(exceptions.ConfigurationError):
|
||||
configuration.load()
|
Loading…
Reference in New Issue
Block a user