Files
dh-inspeccion-v2/scripts/phase-d5-6-2-acceptance.sh

77 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
ROOT="${ROOT:-/var/www/dhv2.korexlabs.com}"
API_URL="${API_URL:-http://127.0.0.1:3101/api/v3}"
TMP_MIGRATION="/tmp/dhv2-d562-accept-migration-$$.log"
trap 'rm -f "$TMP_MIGRATION"' EXIT
cd "$ROOT"
echo "========== D5.6.2 · VERSIONES =========="
[[ "$(node -p "require('./api-v3/package.json').version")" == "0.19.6-2" ]]
[[ "$(node -p "require('./web-v2/package.json').version")" == "0.19.6-2" ]]
grep -Fq "API_PHASE = 'D5.6.2'" api-v3/src/version.ts
grep -Fq "APP_PHASE = 'Fase D5.6.2 · Accesos y compatibilidad Android'" web-v2/src/config/version.ts
echo "API: 0.19.6-2"
echo "WEB: 0.19.6-2"
echo
echo "========== D5.6.2 · DB Y MIGRACIONES =========="
[[ "$(docker inspect dhv2-db --format '{{.State.Health.Status}}')" == "healthy" ]]
docker compose exec -T db sh -lc 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
docker compose --profile tools run --rm migrate npm run migration:show 2>&1 | tee "$TMP_MIGRATION"
grep -Fq 'Pending migrations: no' "$TMP_MIGRATION"
echo "Sin migraciones pendientes: OK"
echo
echo "========== D5.6.2 · HEALTH =========="
HEALTH="$(curl -fsS "$API_URL/health")"
echo "$HEALTH"
grep -Fq '"version":"0.19.6-2"' <<<"$HEALTH"
grep -Fq '"phase":"D5.6.2"' <<<"$HEALTH"
grep -Fq '"database":"ok"' <<<"$HEALTH"
echo
echo "========== D5.6.2 · RESET DE CONTRASEÑA ADMIN =========="
grep -Fq "@Post(':id/reset-password')" api-v3/src/administration/users/users.controller.ts
grep -Fq "@RequirePermissions('users.update')" api-v3/src/administration/users/users.controller.ts
grep -Fq 'USER_PASSWORD_RESET' api-v3/src/administration/users/users.service.ts
grep -Fq 'revokeUserSessions(id, undefined, manager)' api-v3/src/administration/users/users.service.ts
grep -Fq 'passwordValueRecorded: false' api-v3/src/administration/users/users.service.ts
grep -Fq 'Restablecer contraseña' web-v2/src/pages/UserDetailPage.tsx
grep -Fq 'Exigir cambio en el próximo ingreso' web-v2/src/pages/UserDetailPage.tsx
echo "Admin puede restablecer contraseña, revocar sesiones y exigir cambio posterior: OK"
echo
echo "========== D5.6.2 · CONTRATO API ANDROID =========="
grep -Fq "app.setGlobalPrefix('api/v3')" api-v3/src/main.ts
grep -Fq "path: '/api/v3/auth'" api-v3/src/auth/services/cookie.service.ts
echo "Host web y prefijo API /api/v3 permanecen separados: OK"
echo
echo "========== D5.6.2 · REGLAS D PRESERVADAS =========="
grep -Fq 'INSPECTION_VISIT_ACT_ALREADY_EXISTS' api-v3/src/inspection-acts/inspection-acts.service.ts
grep -Fq 'INSPECTION_FINDING_RESPONSE_IMMUTABLE' api-v3/src/inspection-findings/inspection-findings.service.ts
grep -Fq 'VERIFICATION_RESULT_IMMUTABLE' api-v3/src/inspection-verifications/inspection-verifications.service.ts
grep -Fq 'assertMobileInspector(principal)' api-v3/src/inspection-visits/inspection-visits.service.ts
grep -Fq 'ensureWordForAct(actId)' api-v3/src/inspection-closing/inspection-closing.service.ts
echo "Una visita = una Acta, historia append-only e inicio APK-only preservados: OK"
echo
echo "========== D5.6.2 · SIN MIGRACIÓN NUEVA =========="
if find api-v3/src/database/migrations -maxdepth 1 -type f -iname '*d5-6-2*' | grep -q .; then
echo "ERROR: D5.6.2 no debe introducir una migración"
exit 1
fi
echo "Hotfix sin cambio de modelo persistente: OK"
echo
echo "========== D5.6.2 · CONTENEDORES =========="
docker compose ps -a
[[ "$(docker inspect dhv2-db --format '{{.State.Health.Status}}')" == "healthy" ]]
[[ "$(docker inspect dhv2-api --format '{{.State.Status}}')" == "running" ]]
[[ "$(docker inspect dhv2-web --format '{{.State.Status}}')" == "running" ]]
echo
echo "ACEPTACIÓN DE FASE D5.6.2: OK"