Zundler/tests/conftest.py
2024-04-28 15:19:15 +02:00

78 lines
1.9 KiB
Python

import pytest
import subprocess
from selenium import webdriver
from pathlib import Path
@pytest.fixture(scope="session")
def firefox_driver():
_driver = webdriver.Firefox()
yield _driver
_driver.quit()
@pytest.fixture(scope="session")
def chrome_driver():
_driver = webdriver.Chrome()
yield _driver
_driver.quit()
@pytest.fixture(scope="session")
def docker_compose_command() -> str:
return "podman-compose"
def is_responsive(port):
import socket
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(("127.0.0.1", port))
if result == 0:
return True
else:
return False
sock.close()
except Exception:
return False
@pytest.fixture(scope="session")
def selenium_drivers(docker_ip, docker_services):
# `port_for` takes a container port and returns the corresponding host port
drivers = {}
for browser in ["firefox"]:
port = docker_services.port_for(browser, 5900)
docker_services.wait_until_responsive(
timeout=30.0, pause=0.1, check=lambda: is_responsive(port)
)
options = webdriver.FirefoxOptions()
drivers[browser] = webdriver.Remote(
command_executor="http://localhost:4444/wd/hub",
options=options,
)
yield drivers
for browser, driver in drivers.items():
driver.quit()
@pytest.fixture(autouse=True)
def run_make_commands(request):
# Get the directory of the current test file
test_dir = request.fspath.dirname
cmd = """
( cd .. ; uv venv ) && \\
. ../.venv/bin/activate && \\
uv pip install -r requirements.txt && \\
rm -rf _build && \\
../.venv/bin/sphinx-build -M zundler . _build
"""
for d in ["copy-button", "mermaid", "multi-page", "dark-mode"]:
subprocess.run(cmd.strip(), shell=True, check=True, cwd=Path(test_dir) / d)