Running the full test suite — 1,286 tests across Flutter and Python
SoftArchitect AI has 1,286 tests (893 Flutter + 393 Python) centralized under tests/. The project uses TDD (Test-Driven Development) as its methodology for all critical business logic.
Flutter tests run from the tests/ directory using the tests/pubspec.yaml project, which imports src/client as a path dependency.
Unit tests
Pure Dart tests with no Flutter framework dependencies. Test domain entities, use cases, and utility functions in isolation.
Widget tests
Test individual widgets and their rendering. Use WidgetTester to pump widgets and verify UI output.
Integration tests
Test feature slices end-to-end within the Flutter process. Validate that providers, repositories, and widgets work together.
E2E tests
Full application flow tests. Simulate complete user journeys through the guided architectural workflow.
Run a specific Flutter category:
# From the tests/ directorycd tests && flutter test client/unit/cd tests && flutter test client/widget/cd tests && flutter test client/integration/cd tests && flutter test client/e2e/
The root pytest.ini controls test discovery across the monorepo:
[pytest]# Fix pytest-asyncio deprecation warning (Python 3.12+)asyncio_default_fixture_loop_scope = function# Only collect tests from these directoriestestpaths = tests# Python files to collectpython_files = test_*.py *_test.py# Directories to ignore during collectionnorecursedirs = src .git .tox dist build *.egg venv node_modules infrastructure packagesmarkers = slow: marks tests as slow (deselect with '-m "not slow"') integration: marks tests as integration tests unit: marks tests as unit tests asyncio: marks tests as async (pytest-asyncio)
The pyproject.toml in src/server/ extends this with coverage settings:
TDD is mandatory for all critical business logic: parsers, RAG algorithms, and domain use cases.
🔴 RED → Write a failing test that describes the desired behavior🟢 GREEN → Write the minimum code needed to make the test pass🔵 REFACTOR → Improve the code without changing its behavior
# Generate HTML coverage reportscripts/testing/generate_coverage_html.sh# Reports are available at:# Python: coverage_html/index.html# Flutter: coverage/lcov.info