@@ -0,0 +1,70 @@
|
||||
"""Регрессия: setup guard отключается через TestingConfig, не через test API."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from app import create_app, db
|
||||
from config import ProductionConfig, TestingConfig
|
||||
|
||||
|
||||
class _GuardBypassTestConfig(TestingConfig):
|
||||
_TMP_DIR = tempfile.mkdtemp(prefix="wesp-setup-guard-bypass-")
|
||||
SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(_TMP_DIR, 'recipes_test.db')}"
|
||||
SQLALCHEMY_BINDS = {
|
||||
"reports": f"sqlite:///{os.path.join(_TMP_DIR, 'reports_test.db')}",
|
||||
}
|
||||
|
||||
|
||||
class SetupGuardConfigTests(unittest.TestCase):
|
||||
def test_testing_config_allows_api_without_setup_completed(self) -> None:
|
||||
app = create_app(_GuardBypassTestConfig)
|
||||
with app.app_context():
|
||||
db.create_all()
|
||||
client = app.test_client()
|
||||
resp = client.post(
|
||||
"/api/auth/login",
|
||||
json={"login": "wrong", "password": "wrong"},
|
||||
)
|
||||
self.assertNotEqual(resp.status_code, 302)
|
||||
self.assertIn(resp.status_code, (400, 401, 500))
|
||||
|
||||
def test_setup_config_redirects_to_setup_when_incomplete(self) -> None:
|
||||
tmp = tempfile.mkdtemp(prefix="wesp-setup-guard-")
|
||||
try:
|
||||
base = Path(tmp) / "wesp_home"
|
||||
base.mkdir()
|
||||
data = base / "data"
|
||||
data.mkdir()
|
||||
recipes = data / "recipes.db"
|
||||
reports = data / "reports.db"
|
||||
|
||||
class SetupGuardConfig(ProductionConfig):
|
||||
BASE_DIR = str(base)
|
||||
DATA_DIR = str(data)
|
||||
SQLALCHEMY_DATABASE_URI = f"sqlite:///{recipes}"
|
||||
SQLALCHEMY_BINDS = {"reports": f"sqlite:///{reports}"}
|
||||
SECRET_KEY = "setup-guard-test-secret"
|
||||
TESTING = True
|
||||
WESP_TESTING_BYPASS_SETUP_GUARD = False
|
||||
SYNC_BACKGROUND_REQUEUE = False
|
||||
SYNC_CLIENT_AUTOSTART = False
|
||||
WESP_ADMIN_LOG_PATH = ""
|
||||
WESP_LLM_AUTOSTART = False
|
||||
|
||||
app = create_app(SetupGuardConfig, run_migrations=True)
|
||||
with app.app_context():
|
||||
client = app.test_client()
|
||||
resp = client.get("/")
|
||||
self.assertEqual(resp.status_code, 302)
|
||||
self.assertIn("/setup", resp.headers.get("Location", ""))
|
||||
finally:
|
||||
shutil.rmtree(tmp, ignore_errors=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user