90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from yolo_webui.app import app
|
|
|
|
|
|
def test_get_config_defaults() -> None:
|
|
client = TestClient(app)
|
|
response = client.get("/api/config/defaults")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["dataset"] == "coco8.yaml"
|
|
assert data["model"] == "yolo11n.pt"
|
|
assert data["augmentation"]["enabled"] is True
|
|
assert data["mlflow"]["enabled"] is True
|
|
|
|
|
|
def test_get_status_idle() -> None:
|
|
client = TestClient(app)
|
|
response = client.get("/api/train/status")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "idle"
|
|
assert data["epoch"] == 0
|
|
assert data["total_epochs"] == 0
|
|
assert isinstance(data["logs"], list)
|
|
|
|
|
|
def test_start_training_validation_error() -> None:
|
|
client = TestClient(app)
|
|
# Empty dataset is invalid
|
|
bad_config = {
|
|
"dataset": " ",
|
|
"model": "yolo11n.pt",
|
|
"task": "detect"
|
|
}
|
|
response = client.post("/api/train/start", json=bad_config)
|
|
assert response.status_code == 400
|
|
assert "Укажите путь или имя датасета" in response.json()["detail"]
|
|
|
|
|
|
def test_stop_training_when_idle() -> None:
|
|
client = TestClient(app)
|
|
response = client.post("/api/train/stop")
|
|
assert response.status_code == 200
|
|
assert "Запрос на остановку отправлен" in response.json()["message"]
|
|
|
|
|
|
def test_sessions_flow(monkeypatch, tmp_path) -> None:
|
|
client = TestClient(app)
|
|
# Patch sessions directory to use tmp_path
|
|
monkeypatch.setattr("yolo_webui.app.get_sessions_dir", lambda: tmp_path)
|
|
|
|
# 1. Get empty sessions list
|
|
response = client.get("/api/sessions")
|
|
assert response.status_code == 200
|
|
assert response.json() == []
|
|
|
|
# 2. Save a session
|
|
config = {
|
|
"dataset": "coco8.yaml",
|
|
"model": "yolo11n.pt",
|
|
"task": "detect"
|
|
}
|
|
response = client.post("/api/sessions/my_session", json=config)
|
|
assert response.status_code == 200
|
|
assert "успешно сохранена" in response.json()["message"]
|
|
|
|
# 3. List sessions should contain 'my_session'
|
|
response = client.get("/api/sessions")
|
|
assert response.json() == ["my_session"]
|
|
|
|
# 4. Load session
|
|
response = client.get("/api/sessions/my_session")
|
|
assert response.status_code == 200
|
|
assert response.json()["dataset"] == "coco8.yaml"
|
|
|
|
# 5. Delete session
|
|
response = client.delete("/api/sessions/my_session")
|
|
assert response.status_code == 200
|
|
assert "удалена" in response.json()["message"]
|
|
|
|
# 6. List sessions should be empty again
|
|
response = client.get("/api/sessions")
|
|
assert response.json() == []
|
|
|
|
# 7. Loading nonexistent session should return 404
|
|
response = client.get("/api/sessions/nonexistent")
|
|
assert response.status_code == 404
|