-
Notifications
You must be signed in to change notification settings - Fork 2k
/
test_environment.py
102 lines (79 loc) · 3.31 KB
/
test_environment.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# encoding: utf-8
import os
import pytest
import ckan.plugins as p
from ckan.config import environment
from ckan.exceptions import CkanConfigurationException
ENV_VAR_LIST = [
(u"CKAN_SQLALCHEMY_URL", u"postgresql://mynewsqlurl/"),
(u"CKAN_DATASTORE_WRITE_URL", u"http://mynewdbwriteurl/"),
(u"CKAN_DATASTORE_READ_URL", u"http://mynewdbreadurl/"),
(u"CKAN_SOLR_URL", u"http://mynewsolrurl/solr"),
(u"CKAN_SITE_ID", u"my-site"),
(u"CKAN_DB", u"postgresql://mydeprectatesqlurl/"),
(u"CKAN_SMTP_SERVER", u"mail.example.com"),
(u"CKAN_SMTP_STARTTLS", u"True"),
(u"CKAN_SMTP_USER", u"my_user"),
(u"CKAN_SMTP_PASSWORD", u"password"),
(u"CKAN_SMTP_MAIL_FROM", u"server@example.com"),
(u"CKAN_MAX_UPLOAD_SIZE_MB", u"50"),
]
@pytest.fixture
def reset_env():
"""Reset all environment variables that were patched during tests.
"""
yield
for env_var, _ in ENV_VAR_LIST:
if os.environ.get(env_var, None):
del os.environ[env_var]
p.load()
@pytest.mark.usefixtures(u"reset_env")
def test_update_config_env_vars(ckan_config):
"""
Setting an env var from the whitelist will set the appropriate option
in config object.
"""
for env_var, value in ENV_VAR_LIST:
os.environ.setdefault(env_var, value)
# plugin.load() will force the config to update
p.load()
assert ckan_config[u"solr_url"] == u"http://mynewsolrurl/solr"
assert ckan_config[u"sqlalchemy.url"] == u"postgresql://mynewsqlurl/"
assert (
ckan_config[u"ckan.datastore.write_url"] == u"http://mynewdbwriteurl/"
)
assert ckan_config[u"ckan.datastore.read_url"] == u"http://mynewdbreadurl/"
assert ckan_config[u"ckan.site_id"] == u"my-site"
assert ckan_config[u"smtp.server"] == u"mail.example.com"
assert ckan_config[u"smtp.starttls"] == u"True"
assert ckan_config[u"smtp.user"] == u"my_user"
assert ckan_config[u"smtp.password"] == u"password"
assert ckan_config[u"smtp.mail_from"] == u"server@example.com"
assert ckan_config[u"ckan.max_resource_size"] == u"50"
@pytest.mark.usefixtures("reset_env")
def test_update_config_db_url_precedence(ckan_config):
"""CKAN_SQLALCHEMY_URL in the env takes precedence over CKAN_DB"""
os.environ.setdefault("CKAN_DB", "postgresql://mydeprectatesqlurl/")
os.environ.setdefault("CKAN_SQLALCHEMY_URL", "postgresql://mynewsqlurl/")
p.load()
assert ckan_config["sqlalchemy.url"] == "postgresql://mynewsqlurl/"
@pytest.mark.ckan_config("ckan.site_url", "")
def test_missing_siteurl():
with pytest.raises(RuntimeError):
environment.update_config()
@pytest.mark.ckan_config("ckan.site_url", "demo.ckan.org")
def test_siteurl_missing_schema():
with pytest.raises(RuntimeError):
environment.update_config()
@pytest.mark.ckan_config("ckan.site_url", "ftp://demo.ckan.org")
def test_siteurl_wrong_schema():
with pytest.raises(RuntimeError):
environment.update_config()
@pytest.mark.ckan_config("ckan.site_url", "http://demo.ckan.org/")
def test_siteurl_removes_backslash(ckan_config):
environment.update_config()
assert ckan_config["ckan.site_url"] == "http://demo.ckan.org"
@pytest.mark.ckan_config("ckan.display_timezone", "Krypton/Argo City")
def test_missing_timezone():
with pytest.raises(CkanConfigurationException):
environment.update_config()