import pytest from flask import Flask from flask.testing import FlaskClient from pytest_mock import MockerFixture from owslib import context from owslib.ext.flask.context import OwsContext @pytest.fixture(scope="session") def app() -> Flask: app = Flask(__name__) app.add_url_rule("/test", view_func=lambda: "ok") ows_context = OwsContext(add_request_context=True) ows_context.init_app(app) with app.app_context(): return app @pytest.fixture(scope="session") def client(app: Flask) -> FlaskClient: return app.test_client() def test_set_correlation_default(mocker: MockerFixture, client: FlaskClient) -> None: correlation_id = "test" correlation_id_mock = mocker.patch( "owslib.ext.starlette.middleware.context.context.correlation_id", ) correlation_id_mock.get.return_value = correlation_id response = client.get("/test") assert response.headers["Correlation-Id"] == correlation_id def test_set_correlation_in_header(client: FlaskClient) -> None: correlation_id = "test" response = client.get("/test", headers={"Correlation-Id": correlation_id}) assert response.headers["Correlation-Id"] == correlation_id def test_set_request_context(mocker: MockerFixture, client: FlaskClient) -> None: profile_type = "AudienceProfile" profile_id = "1000" request_context_mock = mocker.patch( "owslib.ext.starlette.middleware.context.context.request_context", ) client.get( "/test", headers={ "Orchard-Profile-Type": profile_type, "Orchard-Profile-Id": profile_id, }, ) request_context_mock.set.assert_called_once_with( context.RequestContext( context_type="profile", profile_type=profile_type, profile_id=int(profile_id), ) )