Files
AutoMetabuilder/backend/tests/ui/conftest.py
2026-01-10 18:03:02 +00:00

56 lines
1.5 KiB
Python

import os
import time
import socket
import threading
import pytest
import uvicorn
from autometabuilder.data.server import app
@pytest.fixture(scope="session")
def browser_type_launch_args():
return {
"chromium_sandbox": False,
"args": ["--disable-setuid-sandbox"],
}
@pytest.fixture(scope="session")
def browser_context_args():
return {
"http_credentials": {
"username": "testuser",
"password": "testpass"
}
}
def run_server(port, holder):
os.environ["MOCK_WEB_UI"] = "true"
os.environ["WEB_USER"] = "testuser"
os.environ["WEB_PASSWORD"] = "testpass"
os.environ["APP_LANG"] = "en"
config = uvicorn.Config(app, host="127.0.0.1", port=port, log_level="error")
server = uvicorn.Server(config)
holder["server"] = server
server.run()
def get_free_port():
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind(("127.0.0.1", 0))
return sock.getsockname()[1]
except PermissionError:
pytest.skip("Sandbox denies socket creation for UI tests.")
@pytest.fixture(scope="session")
def server():
port = get_free_port()
holder = {}
thread = threading.Thread(target=run_server, args=(port, holder), daemon=True)
thread.start()
# Give the server a moment to start
time.sleep(2)
yield f"http://127.0.0.1:{port}"
server = holder.get("server")
if server:
server.should_exit = True
thread.join(timeout=3)