This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BreakPilot Dev 19855efacc
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
feat: BreakPilot PWA - Full codebase (clean push without large binaries)
All services: admin-v2, studio-v2, website, ai-compliance-sdk,
consent-service, klausur-service, voice-service, and infrastructure.
Large PDFs and compiled binaries excluded via .gitignore.
2026-02-11 13:25:58 +01:00

94 lines
2.6 KiB
Python

"""
Pytest Configuration and Fixtures
"""
import pytest
import asyncio
import sys
from typing import Generator
@pytest.fixture(scope="session")
def event_loop() -> Generator:
"""Create an instance of the default event loop for the test session."""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()
@pytest.fixture
def client():
"""Create test client with lifespan context manager.
This ensures app.state.orchestrator and app.state.encryption are initialized.
"""
from fastapi.testclient import TestClient
from main import app
# Use context manager to trigger lifespan events (startup/shutdown)
with TestClient(app) as test_client:
yield test_client
@pytest.fixture
def valid_key_hash() -> str:
"""Return a valid key hash for testing."""
# SHA-256 produces 32 bytes, which is 44 chars in base64 (with padding)
return "sha256:eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg="
@pytest.fixture
def sample_namespace_id() -> str:
"""Return a sample namespace ID for testing."""
return "ns-12345678abcdef12345678abcdef12"
@pytest.fixture
def sample_session_data(sample_namespace_id, valid_key_hash) -> dict:
"""Return sample session creation data."""
return {
"namespace_id": sample_namespace_id,
"key_hash": valid_key_hash,
"device_type": "pwa",
"client_version": "1.0.0",
}
@pytest.fixture
def sample_task_data() -> dict:
"""Return sample task creation data."""
return {
"type": "student_observation",
"intent_text": "Notiz zu Max: heute wiederholt gestoert",
"parameters": {
"student_name": "Max",
"observation": "wiederholt gestoert",
},
}
@pytest.fixture
def sample_audio_bytes() -> bytes:
"""Return sample audio data for testing."""
import numpy as np
# Generate 80ms of silence at 24kHz
samples = np.zeros(1920, dtype=np.int16) # 24000 * 0.08 = 1920 samples
return samples.tobytes()
@pytest.fixture
def sample_voice_command_texts() -> list:
"""Return sample voice command texts for testing."""
return [
"Notiz zu Max: heute wiederholt gestoert",
"Erinner mich morgen an Hausaufgabenkontrolle",
"Erstelle Arbeitsblatt mit 3 Lueckentexten",
"Elternbrief wegen wiederholter Stoerungen",
"Nachricht an 8a: Hausaufgaben bis Mittwoch",
"10 Minuten Einstieg, 5 Aufgaben",
"Vokabeltest mit Loesungen",
"Ueberschriften groesser",
"Alles auf eine Seite, Drucklayout A4",
"Operatoren-Checkliste fuer diese Aufgabe",
]