elemes/Makefile

80 lines
2.8 KiB
Makefile

# Elemes Test Suite — Unified Test Runner
#
# Usage:
# make test-unit # Unit tests only (fast, no DB, for dev loop)
# make test-integration # Integration tests (needs PostgreSQL test DB)
# make test-all # Full suite (CI only)
# make test-smoke # Smoke test post-deploy
# make test-list # List collected tests
# make test-stats # Count tests by marker
#
# Env:
# DATABASE_URL Required for integration tests (set elemes_test DB)
# PYTHONPATH Defaults to services for backend tests
#
# Jika DATABASE_URL tidak diset, integration test yang butuh DB akan otomatis
# di-skip via skipif. test-integration tetap berjalan untuk test yang tidak
# butuh DB (mis. Flask test client tanpa DB).
PYTHON ?= python3
PYTHONPATH ?= services
PYTEST ?= $(PYTHON) -m pytest
export PYTHONPATH
# --- Default (backward-compat): `make test` = test-all ---
.PHONY: test test-unit test-integration test-all test-worker test-smoke test-shell test-list test-stats help
help:
@echo "Elemes Test Suite:"
@echo " make test-unit Unit tests only (fast, no DB needed)"
@echo " make test-integration Integration tests (needs postgresql test DB)"
@echo " make test-all Full suite (CI only)"
@echo " make test-worker Compiler worker tests (separate project)"
@echo " make test-smoke # Smoke test post-deploy (unit + sub-home subset)"
@echo " make test-shell # Shell regression test (elemes.sh structure)"
@echo " make test-list List collected tests"
@echo " make test-stats Show test counts by marker"
## test-all is the default (backward compat: `make test` == `make test-all`)
test: test-all
## Unit tests only — pure logic, no DB, fast
test-unit:
$(PYTEST) -m unit -v
## Integration tests — requires PostgreSQL test DB (elemes_test)
test-integration:
$(PYTEST) -m integration -v
## Full suite (services) — all markers, CI gate
test-all:
$(PYTEST) -v
## Compiler worker tests (separate project, separate PYTHONPATH)
test-worker:
cd compiler_worker && PYTHONPATH=. $(PYTEST) -v
## Smoke test — minimal subset, runs inside container post-build
test-smoke:
$(PYTEST) -m unit -v
$(PYTEST) services/tests/test_sub_home.py services/tests/test_sub_home_api.py -v
## Shell regression test — elemes.sh structure (dynamic PROJECT_NAME, no hard-coded names)
test-shell:
bash scripts/test_elemes_sh.sh
## List collected tests
test-list:
$(PYTEST) --collect-only -q
## Show test counts by marker
test-stats:
@echo "=== Test counts by marker ==="
@$(PYTEST) --collect-only -q -m unit 2>/dev/null | grep -c "test" || echo "0"
@echo "^ unit tests"
@$(PYTEST) --collect-only -q -m integration 2>/dev/null | grep -c "test" || echo "0"
@echo "^ integration tests"
@$(PYTEST) --collect-only -q 2>/dev/null | tail -1