Files
minerops/scripts/test-miner-detail.sh
T
2026-08-17 18:43:20 +00:00

103 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${repo_root}"
readonly source_files=(
backend/app/frontend/miner_detail_view.py
backend/app/frontend/router.py
backend/app/frontend/static/app.css
backend/app/frontend/static/fleet.js
backend/app/frontend/static/miner-detail.js
backend/app/frontend/static/repair-center.js
backend/app/frontend/views.py
backend/app/inventory/repository.py
backend/app/inventory/service.py
backend/app/locations/models.py
backend/app/locations/repository.py
backend/app/locations/service.py
backend/app/main.py
backend/app/miner_detail/__init__.py
backend/app/miner_detail/dependencies.py
backend/app/miner_detail/models.py
backend/app/miner_detail/router.py
backend/app/miner_detail/service.py
backend/app/repairs/center_repository.py
backend/app/repairs/center_service.py
backend/tests/test_miner_detail.py
)
for file in "${source_files[@]}"; do
if [[ ! -r "${file}" ]]; then
echo "Miner Detail test input is not readable: ${file}" >&2
exit 1
fi
if [[ "$(stat -c '%a' "${file}")" != "644" ]]; then
echo "Miner Detail source/test mode must be 0644: ${file}" >&2
exit 1
fi
done
if [[ ! -x scripts/test-miner-detail.sh ]] \
|| [[ "$(stat -c '%a' scripts/test-miner-detail.sh)" != "755" ]]; then
echo "scripts/test-miner-detail.sh must be executable with mode 0755." >&2
exit 1
fi
echo "Miner Detail file-mode preflight passed."
project_name="${MINEROPS_MINER_DETAIL_TEST_PROJECT:-minerops-miner-detail-$$}"
compose=(
docker compose
--project-name "${project_name}"
--env-file .env.dev
-f compose.dev.yaml
)
cleanup() {
status=$?
if (( status != 0 )); then
echo
echo "Miner Detail tests failed. Recent PostgreSQL logs:"
"${compose[@]}" logs --no-color --tail 120 postgres || true
fi
"${compose[@]}" down --volumes --remove-orphans >/dev/null 2>&1 || true
exit "${status}"
}
trap cleanup EXIT
if [[ ! -f .env.dev ]]; then
echo "Missing .env.dev. Run ./scripts/dev-env-init.sh first." >&2
exit 1
fi
echo "Starting disposable Miner Detail database..."
"${compose[@]}" up --detach postgres
for attempt in $(seq 1 60); do
if "${compose[@]}" exec -T postgres sh -ec \
'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"' >/dev/null 2>&1; then
break
fi
if (( attempt == 60 )); then
echo "PostgreSQL did not become ready." >&2
exit 1
fi
sleep 1
done
echo "Building Miner Detail test image..."
"${compose[@]}" build backend
"${compose[@]}" run --rm --no-deps backend alembic upgrade head
echo "Running Miner Detail and affected-domain focused tests..."
"${compose[@]}" run --rm --no-deps \
-v "${repo_root}/backend/tests:/app/tests:ro" \
backend python -m unittest -v \
tests.test_miner_detail \
tests.test_frontend_shell \
tests.test_inventory_domain \
tests.test_inventory_router \
tests.test_mine_map \
tests.test_repair_center
echo "Miner Detail focused tests passed."