This commit is contained in:
@@ -6,17 +6,24 @@ from alembic import command
|
||||
from alembic.config import Config
|
||||
from sqlalchemy import Engine, create_engine, inspect
|
||||
|
||||
from zhixing_server.bootstrap.config import get_settings, sqlalchemy_database_url
|
||||
|
||||
|
||||
@pytest.mark.integration
|
||||
def test_postgres_migration_creates_market_data_contract() -> None:
|
||||
def test_postgres_migration_creates_market_data_contract(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
database_url = os.getenv("ZHIXING_TEST_DATABASE_URL")
|
||||
if not database_url:
|
||||
pytest.skip("set ZHIXING_TEST_DATABASE_URL to run PostgreSQL integration tests")
|
||||
|
||||
monkeypatch.setenv("ZHIXING_DATABASE_URL", database_url)
|
||||
get_settings.cache_clear()
|
||||
server_root = Path(__file__).parents[2]
|
||||
config = Config(str(server_root / "alembic.ini"))
|
||||
config.set_main_option("sqlalchemy.url", database_url.replace("%", "%%"))
|
||||
engine: Engine = create_engine(database_url)
|
||||
sqlalchemy_url = sqlalchemy_database_url(database_url)
|
||||
config.set_main_option("sqlalchemy.url", sqlalchemy_url.replace("%", "%%"))
|
||||
engine: Engine = create_engine(sqlalchemy_url)
|
||||
command.upgrade(config, "head")
|
||||
try:
|
||||
tables = set(inspect(engine).get_table_names())
|
||||
@@ -29,3 +36,4 @@ def test_postgres_migration_creates_market_data_contract() -> None:
|
||||
} <= tables
|
||||
finally:
|
||||
engine.dispose()
|
||||
get_settings.cache_clear()
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import pytest
|
||||
|
||||
from zhixing_server.bootstrap.config import sqlalchemy_database_url
|
||||
|
||||
|
||||
def test_sqlalchemy_url_adds_psycopg_driver_and_preserves_query() -> None:
|
||||
database_url = (
|
||||
"postgresql://zhixing-system@1Panel-postgresql-5Fc7:5432/zhixing-system"
|
||||
"?sslmode=require&connect_timeout=5"
|
||||
)
|
||||
|
||||
assert sqlalchemy_database_url(database_url) == (
|
||||
"postgresql+psycopg://zhixing-system@1Panel-postgresql-5Fc7:5432/zhixing-system"
|
||||
"?sslmode=require&connect_timeout=5"
|
||||
)
|
||||
|
||||
|
||||
def test_sqlalchemy_url_does_not_duplicate_psycopg_driver() -> None:
|
||||
database_url = "postgresql+psycopg://user@localhost:5432/db?sslmode=disable"
|
||||
|
||||
assert sqlalchemy_database_url(database_url) == database_url
|
||||
|
||||
|
||||
def test_sqlalchemy_url_rejects_non_postgresql_scheme() -> None:
|
||||
with pytest.raises(ValueError, match="postgresql"):
|
||||
sqlalchemy_database_url("mysql://user@localhost/db")
|
||||
Reference in New Issue
Block a user