Files
MoviePilot/tests/test_postgresql_socket_config.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

63 lines
2.2 KiB
Python

"""
验证 PostgreSQL TCP 与 Unix Socket 连接 URL 构造。
"""
from app.runtime.config import Settings
def test_postgresql_tcp_url_keeps_host_and_port() -> None:
"""
PostgreSQL TCP 连接保留配置的主机和端口。
"""
settings = Settings(
DB_POSTGRESQL_HOST="db",
DB_POSTGRESQL_PORT="5433",
DB_POSTGRESQL_DATABASE="moviepilot",
DB_POSTGRESQL_USERNAME="user",
DB_POSTGRESQL_PASSWORD="pass",
)
assert not settings.DB_POSTGRESQL_SOCKET_MODE
assert settings.DB_POSTGRESQL_URL() == "postgresql://user:pass@db:5433/moviepilot"
assert settings.DB_POSTGRESQL_URL("asyncpg") == "postgresql+asyncpg://user:pass@db:5433/moviepilot"
assert settings.DB_POSTGRESQL_TARGET == "db:5433"
def test_postgresql_socket_url_uses_host_query_param() -> None:
"""
PostgreSQL Unix Socket 连接通过查询参数传递目录。
"""
settings = Settings(
DB_POSTGRESQL_HOST="/var/run/postgresql",
DB_POSTGRESQL_PORT="",
DB_POSTGRESQL_DATABASE="moviepilot",
DB_POSTGRESQL_USERNAME="user",
DB_POSTGRESQL_PASSWORD="pass",
)
assert settings.DB_POSTGRESQL_SOCKET_MODE
# socket 模式下不带端口:未显式设置时 DB_POSTGRESQL_PORT 为空串
assert settings.DB_POSTGRESQL_PORT == ""
assert settings.DB_POSTGRESQL_URL() == "postgresql://user:pass@/moviepilot?host=%2Fvar%2Frun%2Fpostgresql"
assert (
settings.DB_POSTGRESQL_URL("asyncpg")
== "postgresql+asyncpg://user:pass@/moviepilot?host=%2Fvar%2Frun%2Fpostgresql"
)
assert settings.DB_POSTGRESQL_TARGET == "socket /var/run/postgresql"
def test_postgresql_socket_url_can_keep_explicit_port() -> None:
"""
PostgreSQL Socket 连接保留显式端口参数。
"""
settings = Settings(
DB_POSTGRESQL_HOST="/var/run/postgresql",
DB_POSTGRESQL_PORT="5432",
DB_POSTGRESQL_DATABASE="moviepilot",
DB_POSTGRESQL_USERNAME="user",
DB_POSTGRESQL_PASSWORD="",
)
assert settings.DB_POSTGRESQL_URL() == "postgresql://user@/moviepilot?host=%2Fvar%2Frun%2Fpostgresql&port=5432"
assert settings.DB_POSTGRESQL_TARGET == "socket /var/run/postgresql (port 5432)"