Use monkeypatch for tests that use ARCADE_WORKER_SECRET (#694)
Reverts the updates to unit tests in https://github.com/ArcadeAI/arcade-mcp/pull/691 and replaces with monkeypatch. They inadvertently changed global process state during the test run causing failure of post-merge and failure of PyPI publish. See https://github.com/ArcadeAI/arcade-mcp/actions/runs/19651637906/job/56283833231 to see what failed
This commit is contained in:
parent
44660d18ce
commit
7fb097f20f
4 changed files with 12 additions and 33 deletions
|
|
@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "arcade-mcp-server"
|
name = "arcade-mcp-server"
|
||||||
version = "1.9.0"
|
version = "1.9.1"
|
||||||
description = "Model Context Protocol (MCP) server framework for Arcade.dev"
|
description = "Model Context Protocol (MCP) server framework for Arcade.dev"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [{ name = "Arcade.dev" }]
|
authors = [{ name = "Arcade.dev" }]
|
||||||
|
|
|
||||||
|
|
@ -43,18 +43,11 @@ def mock_router():
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def base_worker(mock_router):
|
def base_worker(mock_router, monkeypatch):
|
||||||
# Save original value
|
|
||||||
original_secret = os.environ.get("ARCADE_WORKER_SECRET")
|
|
||||||
# Set env var temporarily for testing secret loading
|
# Set env var temporarily for testing secret loading
|
||||||
os.environ["ARCADE_WORKER_SECRET"] = "test_secret_env" # noqa: S105
|
monkeypatch.setenv("ARCADE_WORKER_SECRET", "test_secret_env")
|
||||||
worker = BaseWorker()
|
worker = BaseWorker()
|
||||||
worker.register_routes(mock_router) # Register routes using the mock router
|
worker.register_routes(mock_router) # Register routes using the mock router
|
||||||
# Restore original value
|
|
||||||
if original_secret is not None:
|
|
||||||
os.environ["ARCADE_WORKER_SECRET"] = original_secret
|
|
||||||
else:
|
|
||||||
del os.environ["ARCADE_WORKER_SECRET"]
|
|
||||||
return worker
|
return worker
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -72,33 +65,19 @@ def test_base_worker_init_with_secret():
|
||||||
assert not worker.disable_auth
|
assert not worker.disable_auth
|
||||||
|
|
||||||
|
|
||||||
def test_base_worker_init_with_env_secret():
|
def test_base_worker_init_with_env_secret(monkeypatch):
|
||||||
original_secret = os.environ.get("ARCADE_WORKER_SECRET")
|
monkeypatch.setenv("ARCADE_WORKER_SECRET", "env_secret_value")
|
||||||
os.environ["ARCADE_WORKER_SECRET"] = "env_secret_value" # noqa: S105
|
|
||||||
worker = BaseWorker()
|
worker = BaseWorker()
|
||||||
assert worker.secret == "env_secret_value" # noqa: S105
|
assert worker.secret == "env_secret_value" # noqa: S105
|
||||||
assert not worker.disable_auth
|
assert not worker.disable_auth
|
||||||
|
|
||||||
# Restore secret to original if it was set
|
|
||||||
if original_secret is not None:
|
|
||||||
os.environ["ARCADE_WORKER_SECRET"] = original_secret
|
|
||||||
else:
|
|
||||||
del os.environ["ARCADE_WORKER_SECRET"]
|
|
||||||
|
|
||||||
|
|
||||||
def test_base_worker_init_no_secret_raises_error():
|
|
||||||
# Ensure secret is not set
|
|
||||||
original_secret = os.environ.get("ARCADE_WORKER_SECRET")
|
|
||||||
if "ARCADE_WORKER_SECRET" in os.environ:
|
|
||||||
del os.environ["ARCADE_WORKER_SECRET"]
|
|
||||||
|
|
||||||
|
def test_base_worker_init_no_secret_raises_error(monkeypatch):
|
||||||
|
# Ensure env var is not set
|
||||||
|
monkeypatch.delenv("ARCADE_WORKER_SECRET", raising=False)
|
||||||
with pytest.raises(ValueError, match="No secret provided for worker"):
|
with pytest.raises(ValueError, match="No secret provided for worker"):
|
||||||
BaseWorker()
|
BaseWorker()
|
||||||
|
|
||||||
# Restore secret if it was set
|
|
||||||
if original_secret is not None:
|
|
||||||
os.environ["ARCADE_WORKER_SECRET"] = original_secret
|
|
||||||
|
|
||||||
|
|
||||||
def test_base_worker_init_disable_auth():
|
def test_base_worker_init_disable_auth():
|
||||||
worker = BaseWorker(disable_auth=True)
|
worker = BaseWorker(disable_auth=True)
|
||||||
|
|
|
||||||
|
|
@ -100,8 +100,8 @@ def test_health_check_route_no_auth(client_no_auth):
|
||||||
# Catalog
|
# Catalog
|
||||||
def test_get_catalog_route_no_auth_header(client):
|
def test_get_catalog_route_no_auth_header(client):
|
||||||
response = client.get("/worker/tools")
|
response = client.get("/worker/tools")
|
||||||
assert response.status_code == 403
|
assert response.status_code in [403, 401]
|
||||||
assert "Not authenticated" in response.text
|
assert "Not authenticated" in response.text or "Unauthorized" in response.text
|
||||||
|
|
||||||
|
|
||||||
def test_get_catalog_route_invalid_auth_header(client, worker_secret):
|
def test_get_catalog_route_invalid_auth_header(client, worker_secret):
|
||||||
|
|
@ -131,7 +131,7 @@ def call_tool_payload():
|
||||||
|
|
||||||
def test_call_tool_route_no_auth_header(client, call_tool_payload):
|
def test_call_tool_route_no_auth_header(client, call_tool_payload):
|
||||||
response = client.post("/worker/tools/invoke", json=call_tool_payload)
|
response = client.post("/worker/tools/invoke", json=call_tool_payload)
|
||||||
assert response.status_code == 403
|
assert response.status_code in [403, 401]
|
||||||
|
|
||||||
|
|
||||||
def test_call_tool_route_invalid_auth_header(client, worker_secret, call_tool_payload):
|
def test_call_tool_route_invalid_auth_header(client, worker_secret, call_tool_payload):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "arcade-mcp"
|
name = "arcade-mcp"
|
||||||
version = "1.5.4"
|
version = "1.5.6"
|
||||||
description = "Arcade.dev - Tool Calling platform for Agents"
|
description = "Arcade.dev - Tool Calling platform for Agents"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
license = {file = "LICENSE"}
|
license = {file = "LICENSE"}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue