From ff6dd431e1b04d781c7b3f19ef63ffd24b79ea8c Mon Sep 17 00:00:00 2001 From: Luke Tainton Date: Thu, 21 Nov 2024 22:24:15 +0000 Subject: [PATCH] fix: add unit test for non-existent env vars --- tests/{test_config.py => test_config_1.py} | 45 ++++++++++---------- tests/test_config_2.py | 49 ++++++++++++++++++++++ 2 files changed, 73 insertions(+), 21 deletions(-) rename tests/{test_config.py => test_config_1.py} (58%) create mode 100644 tests/test_config_2.py diff --git a/tests/test_config.py b/tests/test_config_1.py similarity index 58% rename from tests/test_config.py rename to tests/test_config_1.py index 63622c6..bba05e2 100644 --- a/tests/test_config.py +++ b/tests/test_config_1.py @@ -6,30 +6,30 @@ import os -config_vars: dict = { - "APP_VERSION": "dev", - "BOT_NAME": "TestBot", - "WEBEX_API_KEY": "testing", - "ADMIN_FIRST_NAME": "Test", - "ADMIN_EMAIL": "test@test.com", - "N8N_WEBHOOK_URL": "https://n8n.test.com/webhook/abcdefg", - "SENTRY_ENABLED": "false", - "SENTRY_DSN": "http://localhost", - "APPROVED_USERS": "test@test.com", - "APPROVED_DOMAINS": "test.com", - "APPROVED_ROOMS": "test", -} - - -for config_var, value in config_vars.items(): - os.environ[config_var] = value - -# needs to be imported AFTER environment variables are set -from app.utils.config import config # pragma: no cover - def test_config() -> None: """Test config module.""" + + config_vars: dict = { + "APP_VERSION": "dev", + "BOT_NAME": "TestBot", + "WEBEX_API_KEY": "testing", + "ADMIN_FIRST_NAME": "Test", + "ADMIN_EMAIL": "test@test.com", + "N8N_WEBHOOK_URL": "https://n8n.test.com/webhook/abcdefg", + "SENTRY_ENABLED": "false", + "SENTRY_DSN": "http://localhost", + "APPROVED_USERS": "test@test.com", + "APPROVED_DOMAINS": "test.com", + "APPROVED_ROOMS": "test", + } + + for config_var, value in config_vars.items(): + os.environ[config_var] = value + + # needs to be imported AFTER environment variables are set + from app.utils.config import config # pragma: no cover + assert config.admin_emails == config_vars["ADMIN_EMAIL"].split(",") assert config.admin_first_name == config_vars["ADMIN_FIRST_NAME"] assert config.approved_domains == config_vars["APPROVED_DOMAINS"].split(",") @@ -47,3 +47,6 @@ def test_config() -> None: assert config.sentry_dsn == config_vars["SENTRY_DSN"] else: assert config.sentry_dsn == "" + + for config_var in config_vars: + os.environ.pop(config_var, None) diff --git a/tests/test_config_2.py b/tests/test_config_2.py new file mode 100644 index 0000000..f3ec601 --- /dev/null +++ b/tests/test_config_2.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +# ruff: noqa: E402 pylint: disable=wrong-import-position + +"""Provides test cases for app/utils/config.py.""" + +import os + + +def test_config_no_admin_vars() -> None: + """Test config module.""" + + config_vars: dict = { + "APP_VERSION": "dev", + "BOT_NAME": "TestBot", + "WEBEX_API_KEY": "testing", + "ADMIN_FIRST_NAME": "Test", + "ADMIN_EMAIL": "test@test.com", + "N8N_WEBHOOK_URL": "https://n8n.test.com/webhook/abcdefg", + "SENTRY_ENABLED": "false", + "SENTRY_DSN": "http://localhost", + } + + for config_var, value in config_vars.items(): + os.environ[config_var] = value + + # needs to be imported AFTER environment variables are set + from app.utils.config import config # pragma: no cover + + assert config.approved_domains is None + assert config.approved_rooms is None + assert config.approved_users is None + assert config.admin_emails == config_vars["ADMIN_EMAIL"].split(",") + assert config.admin_first_name == config_vars["ADMIN_FIRST_NAME"] + assert config.bot_name == config_vars["BOT_NAME"] + assert config.n8n_webhook_url == config_vars["N8N_WEBHOOK_URL"] + assert config.sentry_enabled == bool( + config_vars["SENTRY_ENABLED"].upper() == "TRUE" + ) + assert config.version == config_vars["APP_VERSION"] + assert config.webex_token == config_vars["WEBEX_API_KEY"] + + if config.sentry_enabled: + assert config.sentry_dsn == config_vars["SENTRY_DSN"] + else: + assert config.sentry_dsn == "" + + for config_var in config_vars: + os.environ.pop(config_var, None)