diff --git a/pyproject.toml b/pyproject.toml index 9ddff380c..f4877fb36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -109,6 +109,7 @@ dev = [ "importchecker>=3.0", "interrogate>=1.7.0", "isort>=6.1.0", + "mcp-contextforge-gateway[playwright]", "mypy>=1.18.2", "pexpect>=4.9.0", "pip-licenses>=5.0.0", @@ -685,3 +686,11 @@ quiet = false whitelist-regex = [] color = true omit-covered-files = false + +[tool.uv.workspace] +members = [ + ".", +] + +[tool.uv.sources] +mcp-contextforge-gateway = { workspace = true } diff --git a/tests/playwright/conftest.py b/tests/playwright/conftest.py index dfebe5219..478afc71e 100644 --- a/tests/playwright/conftest.py +++ b/tests/playwright/conftest.py @@ -18,6 +18,9 @@ from playwright.sync_api import APIRequestContext, Page, Playwright import pytest +# First-Party +from mcpgateway.config import Settings + # Get configuration from environment BASE_URL = os.getenv("TEST_BASE_URL", "http://localhost:8000") API_TOKEN = os.getenv("MCP_AUTH", "test-token") @@ -84,9 +87,14 @@ def authenticated_page(page: Page) -> Page: @pytest.fixture def admin_page(page: Page): + settings = Settings() """Provide a logged-in admin page for UI tests.""" # Go directly to admin - HTTP Basic Auth is handled by the page fixture page.goto("/admin") + if re.search(r"login", page.url): + page.fill('[name="email"]', settings.basic_auth_user) + page.fill('[name="password"]', settings.basic_auth_password.get_secret_value()) + page.click('button[type="submit"]') # Verify we're on the admin page page.wait_for_url(re.compile(r".*admin")) return page diff --git a/uv.lock b/uv.lock index ead203ae2..844649725 100644 --- a/uv.lock +++ b/uv.lock @@ -3053,6 +3053,7 @@ dev = [ { name = "importchecker" }, { name = "interrogate" }, { name = "isort" }, + { name = "mcp-contextforge-gateway", extra = ["playwright"] }, { name = "mypy" }, { name = "pexpect" }, { name = "pip-audit" }, @@ -3131,8 +3132,8 @@ requires-dist = [ { name = "langchain-openai", marker = "extra == 'llmchat'", specifier = ">=1.0.2" }, { name = "langgraph", marker = "extra == 'llmchat'", specifier = ">=1.0.2" }, { name = "mcp", specifier = ">=1.21.0" }, - { name = "mcp-contextforge-gateway", extras = ["redis"], marker = "extra == 'all'", specifier = ">=0.9.0" }, - { name = "mcp-contextforge-gateway", extras = ["redis", "dev"], marker = "extra == 'dev-all'", specifier = ">=0.9.0" }, + { name = "mcp-contextforge-gateway", extras = ["redis"], marker = "extra == 'all'", editable = "." }, + { name = "mcp-contextforge-gateway", extras = ["redis", "dev"], marker = "extra == 'dev-all'", editable = "." }, { name = "oauthlib", specifier = ">=3.3.1" }, { name = "opentelemetry-api", marker = "extra == 'observability'", specifier = ">=1.38.0" }, { name = "opentelemetry-sdk", marker = "extra == 'observability'", specifier = ">=1.38.0" }, @@ -3192,6 +3193,7 @@ dev = [ { name = "importchecker", specifier = ">=3.0" }, { name = "interrogate", specifier = ">=1.7.0" }, { name = "isort", specifier = ">=6.1.0" }, + { name = "mcp-contextforge-gateway", extras = ["playwright"], editable = "." }, { name = "mypy", specifier = ">=1.18.2" }, { name = "pexpect", specifier = ">=4.9.0" }, { name = "pip-audit", specifier = ">=2.9.0" },