Files
OpenJarvis/tests/server/test_auth_middleware.py
T
Jon Saad-FalconandClaude Opus 4.6 17de84b9e6 feat: merge channel gateway from PR #78 — ChannelBridge, webhooks, sessions, auth
Cherry-picks the mobile channel gateway infrastructure:
- ChannelBridge orchestrator for multi-channel routing
- Webhook endpoints for Twilio SMS, BlueBubbles (iMessage), WhatsApp
- SessionStore for per-sender conversation tracking
- API key authentication middleware
- TwilioSMSChannel adapter
- CLI commands: jarvis auth, jarvis tunnel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:49:48 -07:00

76 lines
1.9 KiB
Python

"""Tests for API key authentication middleware."""
from __future__ import annotations
import pytest
pytest.importorskip(
"fastapi", reason="openjarvis[server] not installed"
)
from fastapi import FastAPI
from fastapi.testclient import TestClient
from openjarvis.server.auth_middleware import AuthMiddleware
def _make_app(api_key: str) -> FastAPI:
app = FastAPI()
app.add_middleware(AuthMiddleware, api_key=api_key)
@app.get("/v1/models")
async def models():
return {"models": []}
@app.get("/health")
async def health():
return {"status": "ok"}
@app.post("/webhooks/twilio")
async def twilio_webhook():
return {"status": "received"}
return app
@pytest.fixture
def client():
return TestClient(_make_app("oj_sk_test123"))
class TestAuthMiddleware:
def test_rejects_missing_auth_header(self, client):
resp = client.get("/v1/models")
assert resp.status_code == 401
assert "missing" in resp.json()["detail"].lower()
def test_rejects_wrong_key(self, client):
resp = client.get(
"/v1/models",
headers={"Authorization": "Bearer wrong"},
)
assert resp.status_code == 401
assert "invalid" in resp.json()["detail"].lower()
def test_accepts_valid_key(self, client):
resp = client.get(
"/v1/models",
headers={
"Authorization": "Bearer oj_sk_test123"
},
)
assert resp.status_code == 200
def test_health_exempt(self, client):
resp = client.get("/health")
assert resp.status_code == 200
def test_webhooks_exempt(self, client):
resp = client.post("/webhooks/twilio")
assert resp.status_code == 200
def test_no_key_configured_allows_all(self):
client = TestClient(_make_app(""))
resp = client.get("/v1/models")
assert resp.status_code == 200