26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
|
|||
|
|
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
|