forked from github.com/pypiserver
84bf12cdd4
* chore: make the last supported python version explicit * fix: formatting
124 lines
3.3 KiB
Python
124 lines
3.3 KiB
Python
"""
|
|
Test module for app initialization
|
|
"""
|
|
|
|
# Standard library imports
|
|
import logging
|
|
import pathlib
|
|
import typing as t
|
|
|
|
# Third party imports
|
|
import pytest
|
|
|
|
|
|
# Local imports
|
|
import pypiserver
|
|
from pypiserver.config import Config
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
TEST_DIR = pathlib.Path(__file__).parent
|
|
HTPASS_FILE = TEST_DIR / "../fixtures/htpasswd.a.a"
|
|
WELCOME_FILE = TEST_DIR / "sample_msg.html"
|
|
|
|
|
|
# TODO: make these tests meaningful
|
|
@pytest.mark.parametrize(
|
|
"conf_options",
|
|
[
|
|
{},
|
|
{"root": "~/stable_packages"},
|
|
{
|
|
"root": "~/unstable_packages",
|
|
"authenticated": "upload",
|
|
"passwords": str(HTPASS_FILE),
|
|
},
|
|
# Verify that the strip parser works properly.
|
|
{"authenticated": str("upload")},
|
|
],
|
|
)
|
|
def test_paste_app_factory(conf_options: dict) -> None:
|
|
"""Test the paste_app_factory method"""
|
|
pypiserver.paste_app_factory({}, **conf_options) # type: ignore
|
|
|
|
|
|
def test_app_factory() -> None:
|
|
assert pypiserver.app() is not pypiserver.app()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"incoming, updated",
|
|
(
|
|
(
|
|
{"authenticated": []},
|
|
{"authenticate": []},
|
|
),
|
|
(
|
|
{"passwords": "./foo"},
|
|
{"password_file": "./foo"},
|
|
),
|
|
(
|
|
{"root": str(TEST_DIR)},
|
|
{"roots": [TEST_DIR.expanduser().resolve()]},
|
|
),
|
|
(
|
|
{"root": [str(TEST_DIR), str(TEST_DIR)]},
|
|
{
|
|
"roots": [
|
|
TEST_DIR.expanduser().resolve(),
|
|
TEST_DIR.expanduser().resolve(),
|
|
]
|
|
},
|
|
),
|
|
(
|
|
{"redirect_to_fallback": False},
|
|
{"disable_fallback": True},
|
|
),
|
|
(
|
|
{"server": "auto"},
|
|
{"server_method": "auto"},
|
|
),
|
|
(
|
|
{"welcome_file": str(WELCOME_FILE.resolve())},
|
|
{"welcome_msg": WELCOME_FILE.read_text()},
|
|
),
|
|
),
|
|
)
|
|
def test_backwards_compat_kwargs_conversion(
|
|
incoming: t.Dict[str, t.Any], updated: t.Dict[str, t.Any]
|
|
) -> None:
|
|
"""Test converting legacy kwargs to modern ones."""
|
|
assert pypiserver.backwards_compat_kwargs(incoming) == updated
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"kwargs",
|
|
(
|
|
{"redirect_to_fallback": False, "disable_fallback": False},
|
|
{"disable_fallback": False, "redirect_to_fallback": False},
|
|
),
|
|
)
|
|
def test_backwards_compat_kwargs_duplicate_check(
|
|
kwargs: t.Dict[str, t.Any]
|
|
) -> None:
|
|
"""Duplicate legacy and modern kwargs cause an error."""
|
|
with pytest.raises(ValueError) as err:
|
|
pypiserver.backwards_compat_kwargs(kwargs)
|
|
assert "('redirect_to_fallback', 'disable_fallback')" in str(err.value)
|
|
|
|
|
|
def test_setup_routes_from_config_customized_endpoint() -> None:
|
|
_app = pypiserver.setup_routes_from_config(
|
|
pypiserver.app(),
|
|
Config.default_with_overrides(health_endpoint="/healthz"),
|
|
)
|
|
assert "/healthz" in (route.rule for route in _app.routes)
|
|
|
|
|
|
def test_setup_routes_from_config_invalid_customized_endpoint() -> None:
|
|
with pytest.raises(RuntimeError, match="overlaps with existing routes"):
|
|
pypiserver.setup_routes_from_config(
|
|
pypiserver.app(),
|
|
Config.default_with_overrides(health_endpoint="/simple"),
|
|
)
|