test: +13 тестов — save_run UPSERT, auth режимы/URL, сценарии

test_db_save_run.py (4 теста): INSERT/UPDATE/UPSERT/без БД
test_auth.py (9 тестов): URL полигона, get_stand, whitelist, режимы
test_scenario_full.py (8 тестов): CRUD + запуск (требует polygon + БД)

Итого: 35 тестов (22 старых + 13 новых)
This commit is contained in:
2026-08-04 08:48:36 +04:00
parent 764592ba60
commit b89c0138e4
3 changed files with 435 additions and 0 deletions
+125
View File
@@ -0,0 +1,125 @@
"""
Тесты: auth.py — режимы, стенды, URL, cookie.
"""
import api.auth as auth
def test_polygon_url_construction(monkeypatch):
"""get_client в режиме polygon строит правильный URL."""
monkeypatch.setattr(auth, "get_mode", lambda: "polygon")
monkeypatch.setattr(auth, "get_polygon_stand", lambda: "test")
monkeypatch.setattr(auth, "get_token", lambda: "tok")
# Мокаем HttpClient чтобы не делать реальный запрос
clients = []
class FakeHttp:
def __init__(self, endpoint, token):
clients.append(endpoint)
monkeypatch.setattr(auth, "HttpClient", FakeHttp)
# Настроим POLYGON_ENDPOINT
from flask import Flask
app = Flask(__name__)
app.config["POLYGON_ENDPOINT"] = "https://polygon.test/api/v1/svc"
monkeypatch.setattr(auth, "current_app", app)
auth.get_client()
assert len(clients) == 1
assert clients[0] == "https://polygon.test/test/api/v1/svc"
def test_polygon_url_dev_stand(monkeypatch):
"""DEV-стенд в URL."""
monkeypatch.setattr(auth, "get_mode", lambda: "polygon")
monkeypatch.setattr(auth, "get_polygon_stand", lambda: "dev")
monkeypatch.setattr(auth, "get_token", lambda: "tok")
clients = []
class FakeHttp:
def __init__(self, endpoint, token):
clients.append(endpoint)
monkeypatch.setattr(auth, "HttpClient", FakeHttp)
from flask import Flask
app = Flask(__name__)
app.config["POLYGON_ENDPOINT"] = "https://polygon.test/api/v1/svc"
monkeypatch.setattr(auth, "current_app", app)
auth.get_client()
assert clients[0] == "https://polygon.test/dev/api/v1/svc"
def test_get_stand_polygon(monkeypatch):
"""get_stand в эмуляции возвращает polygon_{stand}."""
monkeypatch.setattr(auth, "get_mode", lambda: "polygon")
monkeypatch.setattr(auth, "get_polygon_stand", lambda: "prod")
assert auth.get_stand() == "polygon_prod"
def test_get_stand_polygon_default(monkeypatch):
"""get_stand по умолчанию test."""
monkeypatch.setattr(auth, "get_mode", lambda: "polygon")
monkeypatch.setattr(auth, "get_polygon_stand", lambda: "test")
assert auth.get_stand() == "polygon_test"
def test_get_mode_no_polygon_endpoint(monkeypatch):
"""Без POLYGON_ENDPOINT -> всегда cloud."""
from flask import Flask
app = Flask(__name__)
app.config["POLYGON_ENDPOINT"] = ""
monkeypatch.setattr(auth, "current_app", app)
# Мокаем request.cookies
monkeypatch.setattr(auth, "request", type('obj', (object,), {
"cookies": {}
})())
assert auth.get_mode() == "cloud"
def test_get_mode_default_polygon(monkeypatch):
"""POLYGON_ENDPOINT задан -> default polygon."""
from flask import Flask
app = Flask(__name__)
app.config["POLYGON_ENDPOINT"] = "https://polygon.test/api/v1/svc"
monkeypatch.setattr(auth, "current_app", app)
# request.cookies.get("mode", default_value)
monkeypatch.setattr(auth, "request", type('obj', (object,), {
"cookies": type('obj', (object,), {
"get": lambda s, d, default="polygon": d if d else default
})()
})())
assert auth.get_mode() == "polygon"
def test_get_token_polygon_mode(monkeypatch):
"""В эмуляции — только env-токен."""
monkeypatch.setattr(auth, "get_mode", lambda: "polygon")
from flask import Flask
app = Flask(__name__)
app.config["NUBES_API_TOKEN"] = "env-jwt"
monkeypatch.setattr(auth, "current_app", app)
assert auth.get_token() == "env-jwt"
def test_whitelist_mode_invalid(monkeypatch):
"""Невалидный mode -> default polygon."""
from flask import Flask
app = Flask(__name__)
app.config["POLYGON_ENDPOINT"] = "https://polygon.test/api/v1/svc"
monkeypatch.setattr(auth, "current_app", app)
monkeypatch.setattr(auth, "request", type('obj', (object,), {
"cookies": type('obj', (object,), {
"get": lambda s, d, default="polygon": "evil"
})()
})())
assert auth.get_mode() == "polygon" # fallback
def test_whitelist_stand_invalid(monkeypatch):
"""Невалидный stand -> default test."""
monkeypatch.setattr(auth, "request", type('obj', (object,), {
"cookies": type('obj', (object,), {
"get": lambda s, d, default="test": "../../etc"
})()
})())
assert auth.get_polygon_stand() == "test" # fallback