From 542f3d1fe535193c30859188b0d5dc93fde33148 Mon Sep 17 00:00:00 2001 From: Andreas Motl Date: Sun, 28 Jan 2024 11:44:30 +0100 Subject: [PATCH] Tests: Unlock running the test suite without OPS credentials While it will only cover parts of the test suite, which is unfortunate, at least it will not break. This is relevant for CI/GHA, because pull requests submitted by external contributors do not have access to the OPS credentials per GitHub Actions Secrets. C'est la vie. --- tests/conftest.py | 12 +++++++----- tests/secrets.py | 12 ++++++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 94b8ca1..dbc5da8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import pytest from .helpers import mkcache, mksqlite, mkthrottler -from .secrets import OPS_KEY, OPS_SECRET +from .secrets import get_secrets_or_skip_tests @pytest.fixture @@ -12,9 +12,9 @@ def storage(request): @pytest.fixture def reset_cached_client(request): from epo_ops import Client - + ops_key, ops_secret = get_secrets_or_skip_tests() return Client( - OPS_KEY, OPS_SECRET, middlewares=[mkcache(request), mkthrottler(request)] + ops_key, ops_secret, middlewares=[mkcache(request), mkthrottler(request)] ) @@ -31,15 +31,17 @@ def module_cache(request): @pytest.fixture(scope="module") def default_client(request): from epo_ops import Client + ops_key, ops_secret = get_secrets_or_skip_tests() - return Client(OPS_KEY, OPS_SECRET, middlewares=[mkthrottler(request)]) + return Client(ops_key, ops_secret, middlewares=[mkthrottler(request)]) @pytest.fixture(scope="module") def cached_client(request, module_cache): from epo_ops import Client + ops_key, ops_secret = get_secrets_or_skip_tests() - return Client(OPS_KEY, OPS_SECRET, middlewares=[module_cache, mkthrottler(request)]) + return Client(ops_key, ops_secret, middlewares=[module_cache, mkthrottler(request)]) @pytest.fixture(scope="module", params=["cached_client", "default_client"]) diff --git a/tests/secrets.py b/tests/secrets.py index bf13873..c5dfacb 100644 --- a/tests/secrets.py +++ b/tests/secrets.py @@ -9,6 +9,7 @@ import os from os.path import abspath, dirname, join +import pytest from dotenv import load_dotenv # Prune environment variables. @@ -20,6 +21,13 @@ dotenv_path = abspath(join(dirname(__file__), "../.env")) load_dotenv(dotenv_path) + # Set environment variables as constants. -OPS_KEY = os.environ["OPS_KEY"] -OPS_SECRET = os.environ["OPS_SECRET"] +def get_secrets_or_skip_tests(): + try: + ops_key = os.environ["OPS_KEY"] + ops_secret = os.environ["OPS_SECRET"] + except KeyError as ex: + raise pytest.skip("No OPS credentials configured") from ex + + return ops_key, ops_secret