Source code for fasjson.tests.unit.test_web_app
import json
import os
import types
import pytest
from flask_restx import abort
from fasjson.web.app import create_app
[docs]
def test_app_gss_forbidden_error(client):
rv = client.get("/")
assert rv.status_code == 403
body = json.loads(rv.data)
assert "message" in body
assert body["message"].startswith("Invalid credentials")
assert body["message"].endswith("Minor (2529639107): No credentials cache found)")
[docs]
def test_app_default_unauthorized_error(client, mocker):
creds_factory = mocker.patch("gssapi.Credentials")
creds_factory.return_value = types.SimpleNamespace(lifetime=0)
rv = client.get("/")
body = json.loads(rv.data)
assert rv.status_code == 401
assert body == {"message": "Credential lifetime has expired"}
[docs]
def test_app_default_notfound_error(client, gss_user):
rv = client.get("/notfound")
body = json.loads(rv.data)
assert rv.status_code == 404
assert body.get("message") is not None
[docs]
def test_app_default_internal_error(client, gss_user):
@client.application.route("/500")
def fivehundred():
x = []
return x[10]
# Don't catch the exception in the testing framework
client.application.config["TESTING"] = False
rv = client.get("/500")
body = json.loads(rv.data)
assert rv.status_code == 500
assert body.get("message") is not None
[docs]
def test_app_registered_error(client, gss_user):
@client.application.route("/403")
def forbidden():
abort(403, "forbidden", foo="bar")
rv = client.get("/403")
body = json.loads(rv.data)
assert rv.status_code == 403
assert body == {"foo": "bar", "message": "forbidden"}
[docs]
def test_webserver_error(anon_client):
for code in (401, 403, 500):
rv = anon_client.get(f"/errors/{code}")
assert rv.status_code == code
body = json.loads(rv.data)
assert "message" in body
[docs]
@pytest.fixture
def temp_config(tmpdir):
config_path = os.path.join(tmpdir, "testing.cfg")
with open(config_path, "w") as config_file:
config_file.write("DUMMY = 'dummy'\n")
os.environ["FASJSON_CONFIG_PATH"] = config_path
yield
del os.environ["FASJSON_CONFIG_PATH"]
[docs]
def test_configuration_file(temp_config, app):
with app.test_request_context("/"):
assert app.config.get("DUMMY") == "dummy"
[docs]
def test_logging_config(mocker):
dictConfig = mocker.patch("fasjson.web.app.dictConfig")
logging_config = {
"version": 1,
"root": {"level": "DEBUG", "handlers": []},
}
create_app(config={"LOGGING": logging_config})
dictConfig.assert_called_with(logging_config)