Files
replypier/backend/tests/core/test_system_maintenance.py
T

27 lines
1.1 KiB
Python
Raw Normal View History

from pathlib import Path
from fastapi import FastAPI
from fastapi.testclient import TestClient
import pytest
from starlette.websockets import WebSocketDisconnect
from app.core import system_maintenance as maintenance
def test_maintenance_gates_business_requests_but_allows_status(tmp_path, monkeypatch):
marker = tmp_path / 'maintenance'
monkeypatch.setattr(maintenance, 'MAINTENANCE_FILE', marker)
app = FastAPI()
for path in ['/health', '/api/v1/system-updates', '/api/v1/chats']:
app.get(path)(lambda: {'ok': True})
client = TestClient(maintenance.SystemMaintenanceMiddleware(app))
assert client.get('/api/v1/chats').status_code == 200
marker.touch()
assert client.get('/health').status_code == 200
assert client.get('/api/v1/system-updates').status_code == 200
assert client.get('/api/v1/chats').status_code == 503
assert client.post('/api/v1/system-updates/check').status_code == 503
with pytest.raises(WebSocketDisconnect) as exc:
with client.websocket_connect('/socket.io/'):
pass
assert exc.value.code == 1013