95 lines
3.3 KiB
Python
95 lines
3.3 KiB
Python
"""
|
|
Tests for Session API
|
|
"""
|
|
import pytest
|
|
|
|
|
|
class TestSessionAPI:
|
|
"""Tests for session management."""
|
|
|
|
def test_health_check(self, client):
|
|
"""Test health endpoint returns healthy status."""
|
|
response = client.get("/health")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "healthy"
|
|
assert data["service"] == "voice-service"
|
|
assert data["dsgvo_compliance"]["audio_persistence"] is False
|
|
|
|
def test_root_endpoint(self, client):
|
|
"""Test root endpoint returns service info."""
|
|
response = client.get("/")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["service"] == "Breakpilot Voice Service"
|
|
assert "endpoints" in data
|
|
assert data["privacy"]["audio_stored"] is False
|
|
|
|
def test_create_session(self, client):
|
|
"""Test session creation."""
|
|
response = client.post(
|
|
"/api/v1/sessions",
|
|
json={
|
|
"namespace_id": "test-ns-12345678",
|
|
"key_hash": "sha256:eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg=", # 32 bytes base64
|
|
"device_type": "pwa",
|
|
"client_version": "1.0.0",
|
|
},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "id" in data
|
|
assert data["namespace_id"] == "test-ns-12345678"
|
|
assert data["status"] == "created"
|
|
assert "websocket_url" in data
|
|
|
|
def test_create_session_invalid_key_hash(self, client):
|
|
"""Test session creation with invalid key hash."""
|
|
response = client.post(
|
|
"/api/v1/sessions",
|
|
json={
|
|
"namespace_id": "test-ns-12345678",
|
|
"key_hash": "invalid",
|
|
"device_type": "pwa",
|
|
},
|
|
)
|
|
assert response.status_code == 401
|
|
assert "Invalid encryption key hash" in response.json()["detail"]
|
|
|
|
def test_get_session_not_found(self, client):
|
|
"""Test getting non-existent session."""
|
|
response = client.get("/api/v1/sessions/nonexistent-session")
|
|
assert response.status_code == 404
|
|
|
|
def test_session_lifecycle(self, client):
|
|
"""Test full session lifecycle."""
|
|
# Create session
|
|
create_response = client.post(
|
|
"/api/v1/sessions",
|
|
json={
|
|
"namespace_id": "test-ns-lifecycle",
|
|
"key_hash": "sha256:eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg=",
|
|
},
|
|
)
|
|
assert create_response.status_code == 200
|
|
session_id = create_response.json()["id"]
|
|
|
|
# Get session
|
|
get_response = client.get(f"/api/v1/sessions/{session_id}")
|
|
assert get_response.status_code == 200
|
|
assert get_response.json()["id"] == session_id
|
|
|
|
# Get session stats
|
|
stats_response = client.get(f"/api/v1/sessions/{session_id}/stats")
|
|
assert stats_response.status_code == 200
|
|
assert "message_count" in stats_response.json()
|
|
|
|
# Delete session
|
|
delete_response = client.delete(f"/api/v1/sessions/{session_id}")
|
|
assert delete_response.status_code == 200
|
|
assert delete_response.json()["status"] == "closed"
|
|
|
|
# Verify session is gone
|
|
get_again = client.get(f"/api/v1/sessions/{session_id}")
|
|
assert get_again.status_code == 404
|