This project uses layered testing to balance speed, confidence, and product realism.
- Goal: verify local logic with deterministic inputs.
- Typical modules:
- policy checks
- model mappers
- serialization contracts
- Goal: verify service APIs and response shapes.
- Typical modules:
- config service
- tool service
- workflow engine
- protocol surface contracts
- Goal: simulate realistic user-facing workflows across multiple services.
- Typical paths:
chat -> tool confirmation -> resumebatch -> workflow.define -> workflow.start -> workspace artifactstools.list -> tool.call- provider-dependent voice route boundaries when an audio transcription provider is configured
Pure unit tests can pass while user-facing flows fail due to:
- integration wiring issues
- session/state transition bugs
- policy or permission mismatches
- payload shape drift across boundaries
Business tests are designed to catch these issues early.
tests/test_mvp_business_smoke.pytests/test_business_journeys.pytests/test_voice_routes.pyfor experimental/provider-dependent voice API boundaries
Before release, require:
- Core contract tests passing.
- Business journey suites passing.
- Readiness endpoints healthy or explicitly acknowledged degradation.
Fast PR stage:
- unit + contract tests
Main branch stage:
- business journeys
- readiness/report generation
Pre-release stage:
- full test matrix + manual sanity checklist
- External providers (OpenAI / ElevenLabs / Neo4j / MCP remote) should be mocked in CI.
- Local environment tests should avoid hard network requirements unless explicitly marked integration.
- DeepSeek-only configurations do not provide STT/audio transcription, so voice-input tests are not part of the supported preview smoke path unless an audio transcription provider is explicitly configured.
- Test artifacts are expected to be created under
.tmp/pytest-runtime/. tests/conftest.pysetsTEMP,TMP,TMPDIR,PYTEST_DEBUG_TEMPROOT, andPROMETHEA_TEST_TMP_ROOTto this runtime directory.tests/run_all_tests.pyalso uses.tmp/pytest-runtime/runner/for pytest--basetemp.- On normal completion, pytest removes
.tmp/pytest-runtime/. - If a run is interrupted, the expected residue is a single
.tmp/pytest-runtime/directory. - Tests should not create new root-level
.pytest-*,tmp_*,_pytest_case_tmp, or_pytest_session_tmpdirectories. - Cleanup must not target runtime user data such as
config/users/, uploaded files,memory/,logs/, or the L0 raw-log filesmemory/raw_log.jsonlandmemory/raw_log.state.json.
Recent release-focused regression tests cover:
- user file upload/search and RuntimeBlock-based chat attachment context
- stored-only behavior for image attachments without OCR text on text-only models
- chat route preservation of structured attachments without prompt-level merging
- enterprise
org_brainconfiguration fields in the basic config view
Recommended targeted command:
python -m pytest tests/test_files_routes.py tests/test_chat_routes_args_resilience.py tests/test_config_routes_contract.py -q- Channel adapter end-to-end fixtures for major official channels.
- More negative-path tests for memory/reasoning degradation reason codes.
- Release-grade scenario replay packs for regression prevention.