33# pylint: disable=unused-variable
44
55
6+ from urllib .parse import parse_qsl , urlparse
7+
68import pytest
9+ from pytest_simcore .helpers .monkeypatch_envs import setenvs_from_dict
10+ from pytest_simcore .helpers .typing_env import EnvVarsDict
711from settings_library .postgres import PostgresSettings
812
913
@@ -12,9 +16,16 @@ def env_file():
1216 return ".env-sample"
1317
1418
15- def test_cached_property_dsn (mock_environment : dict ):
19+ @pytest .fixture
20+ def mock_environment (mock_environment : EnvVarsDict , monkeypatch : pytest .MonkeyPatch ):
21+ return mock_environment | setenvs_from_dict (
22+ monkeypatch , {"POSTGRES_CLIENT_NAME" : "Some &43 funky name" }
23+ )
1624
17- settings = PostgresSettings ()
25+
26+ def test_cached_property_dsn (mock_environment : EnvVarsDict ):
27+
28+ settings = PostgresSettings .create_from_envs ()
1829
1930 # all are upper-case
2031 assert all (key == key .upper () for key in settings .dict ())
@@ -28,20 +39,31 @@ def test_cached_property_dsn(mock_environment: dict):
2839 assert "dsn" in settings .dict ()
2940
3041
31- def test_dsn_with_query (mock_environment : dict , monkeypatch ):
32-
42+ def test_dsn_with_query (mock_environment : EnvVarsDict , monkeypatch : pytest .MonkeyPatch ):
3343 settings = PostgresSettings ()
3444
35- assert not settings .POSTGRES_CLIENT_NAME
45+ assert settings .POSTGRES_CLIENT_NAME
3646 assert settings .dsn == "postgresql://foo:secret@localhost:5432/foodb"
37-
38- # now with app
39- monkeypatch .setenv ("POSTGRES_CLIENT_NAME" , "Some &43 funky name" )
40-
41- settings_with_app = PostgresSettings ()
42-
43- assert settings_with_app .POSTGRES_CLIENT_NAME
4447 assert (
45- settings_with_app .dsn_with_query
48+ settings .dsn_with_query
4649 == "postgresql://foo:secret@localhost:5432/foodb?application_name=Some+%2643+funky+name"
4750 )
51+
52+ with monkeypatch .context () as patch :
53+ patch .delenv ("POSTGRES_CLIENT_NAME" )
54+ settings = PostgresSettings ()
55+
56+ assert not settings .POSTGRES_CLIENT_NAME
57+ assert settings .dsn == settings .dsn_with_query
58+
59+
60+ def test_dsn_with_async_sqlalchemy_has_query (
61+ mock_environment : EnvVarsDict , monkeypatch
62+ ):
63+ settings = PostgresSettings ()
64+
65+ parsed_url = urlparse (settings .dsn_with_async_sqlalchemy )
66+ query = dict (parse_qsl (parsed_url .query ))
67+
68+ assert query
69+ assert query ["application_name" ] == settings .POSTGRES_CLIENT_NAME
0 commit comments