.PHONY: help test test-integration test-all test-stop build build-force clean rebuild logs test-env-up test-env-down # Include .env file for environment variables (single source of truth) # Ignore if .env doesn't exist yet ifneq (,$(wildcard ./.env)) include .env export endif # Default target help: @echo "Available targets:" @echo " make test - Run unit tests" @echo " make test-integration - Build containers, start services, run integration tests" @echo " make test-all - Run all tests" @echo " make test-stop - Stop containers after testing" @echo " make build - Build and start containers" @echo " make build-force - Force rebuild and start containers" @echo " make clean - Stop and remove containers" @echo " make rebuild - Clean, rebuild, and start containers" @echo " make logs - Show container logs" @echo " make test-env-up - Start containers with test mode enabled" @echo " make test-env-down - Stop test environment" # Run unit tests test: go test ./... -v -short # Run integration tests with test mode enabled (avoids rate limiting) test-integration: @echo "Building containers..." podman compose build @echo "Starting application containers..." podman compose up -d @echo "Waiting for services to be healthy..." @echo "Waiting for database..." @until podman exec bookhoard_db pg_isready -U postgres > /dev/null 2>&1; do \ echo " Database not ready yet..."; \ sleep 2; \ done; \ echo " ✓ Database is ready" @echo "Waiting for application..." @sleep 3; \ until curl -sf http://localhost:8765/health > /dev/null 2>&1; do \ echo " Application not ready yet..."; \ sleep 2; \ done; \ echo " ✓ Application is ready" @echo "" @echo "Running integration tests from host against containerized database..." DATABASE_HOST=localhost \ DATABASE_PORT=5432 \ DATABASE_USER=postgres \ DATABASE_PASSWORD=$(DBPASS) \ DATABASE_NAME=bookhoard \ JWT_SECRET=$(JWT_SECRET) \ TEST_MODE=true \ RATE_LIMIT_ENABLED=false \ TEST_UPLOAD_PATH=./uploads \ go test ./cmd/server/tests -v -timeout 5m @echo "" @echo "✅ Integration tests completed!" @echo "📝 Containers are still running. Use 'podman compose logs' to view logs or 'podman compose down' to stop." # Run all tests test-all: test test-integration # Build and start containers build: podman compose up --build -d # Force rebuild without cache build-force: podman compose build --no-cache podman compose up -d # Stop and remove containers clean: podman compose down -v # Clean rebuild (remove volumes, rebuild, start) rebuild: clean build # Show container logs logs: podman compose logs -f # Start containers with test mode enabled for integration testing test-env-up: @echo "Starting containers with test mode enabled..." TEST_MODE=true RATE_LIMIT_ENABLED=false REQUESTS_PER_MINUTE=1000 podman compose up --build -d @echo "Waiting for services to be ready..." sleep 10 @echo "Test environment is ready!" # Stop test environment test-env-down: podman compose down -v # Stop containers after testing test-stop: @echo "Stopping containers..." podman compose down @echo "✓ Containers stopped" # Verify project guidelines compliance verify-guidelines: @echo "Running comprehensive project guidelines verification..." @./scripts/verify-guidelines.sh verify-quick: @echo "Running quick project guidelines verification..." @./scripts/verify-quick.sh