|
| 1 | +"""Tests for Flask application factory configuration. |
| 2 | +
|
| 3 | +Ensures that SECRET_KEY is properly validated in production and that |
| 4 | +development/test environments have appropriate fallback behavior. |
| 5 | +""" |
| 6 | + |
| 7 | +import pytest |
| 8 | + |
| 9 | +from AIPscan import create_app |
| 10 | + |
| 11 | + |
| 12 | +@pytest.mark.parametrize( |
| 13 | + "config_name,secret_value,should_raise,expected_secret", |
| 14 | + [ |
| 15 | + # Production requires valid SECRET_KEY. |
| 16 | + ("default", None, True, None), |
| 17 | + ("default", "", True, None), |
| 18 | + ("default", " ", True, None), |
| 19 | + ("default", "super-secret", False, "super-secret"), |
| 20 | + # Dev and test use fallback. |
| 21 | + ("dev", None, False, "dev"), |
| 22 | + ("test", None, False, "dev"), |
| 23 | + ], |
| 24 | + ids=[ |
| 25 | + "prod-rejects-missing-key", |
| 26 | + "prod-rejects-empty-key", |
| 27 | + "prod-rejects-whitespace-key", |
| 28 | + "prod-accepts-valid-key", |
| 29 | + "dev-provides-fallback-key", |
| 30 | + "test-provides-fallback-key", |
| 31 | + ], |
| 32 | +) |
| 33 | +def test_create_app_secret_key_handling( |
| 34 | + monkeypatch, config_name, secret_value, should_raise, expected_secret |
| 35 | +): |
| 36 | + """Test SECRET_KEY validation across all config environments.""" |
| 37 | + monkeypatch.delenv("SECRET_KEY", raising=False) |
| 38 | + if secret_value is not None: |
| 39 | + monkeypatch.setenv("SECRET_KEY", secret_value) |
| 40 | + |
| 41 | + if should_raise: |
| 42 | + with pytest.raises(RuntimeError, match="SECRET_KEY must be set"): |
| 43 | + create_app(config_name) |
| 44 | + else: |
| 45 | + app = create_app(config_name) |
| 46 | + assert app.config["SECRET_KEY"] == expected_secret |
0 commit comments