80 lines
2.8 KiB
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
|