Source code for fasjson.tests.conftest
import os
import types
import pytest
from flask.testing import FlaskClient
from fasjson.web.app import create_app
[docs]
@pytest.fixture
def test_dir():
return os.path.dirname(os.path.realpath(__file__))
[docs]
@pytest.fixture
def fixture_dir(test_dir):
return f"{test_dir}/fixtures"
[docs]
@pytest.fixture
def app(fixture_dir):
app = create_app()
app.config["FASJSON_IPA_CONFIG_PATH"] = f"{fixture_dir}/ipa.default.conf"
app.config["FASJSON_IPA_CA_CERT_PATH"] = f"{fixture_dir}/ipa.ca.crt"
app.config["TESTING"] = True
return app
[docs]
@pytest.fixture
def gss_env(fixture_dir):
output = {}
with open(f"{fixture_dir}/fasjson.env") as f:
for line in f.readlines():
k, v = line.replace("\n", "").split("=")
output[k] = v
return output
[docs]
class GSSAwareClient(FlaskClient):
def __init__(self, *args, **kwargs):
self.gss_env = kwargs.pop("gss_env")
super().__init__(*args, **kwargs)
[docs]
def open(self, *args, **kwargs):
environ_base = self.gss_env.copy()
environ_base.update(kwargs.get("environ_base", {}))
kwargs["environ_base"] = environ_base
return super().open(*args, **kwargs)
[docs]
@pytest.fixture
def client(app, gss_env):
app.test_client_class = GSSAwareClient
with app.test_client(gss_env=gss_env) as client:
yield client
[docs]
@pytest.fixture
def anon_client(app):
app.test_client_class = FlaskClient
with app.test_client() as client:
yield client
[docs]
@pytest.fixture
def gss_user(gss_env, mocker):
creds = mocker.patch("gssapi.Credentials")
creds.return_value = types.SimpleNamespace(lifetime=10)
[docs]
@pytest.fixture
def mock_ipa_client(mocker):
def ipa_client_factory(module_path, client_type, **kwargs):
client = types.SimpleNamespace(**kwargs)
factory = mocker.patch(f"{module_path}.{client_type}_client")
factory.return_value = client
return client
return ipa_client_factory