#!/usr/bin/env bash
#
# El freno de `scripts/consultar-pruebas.sh` frena lo que no se deshace.
#
#   pruebas/prueba_freno_consultar_pruebas.sh
#
# ⚠️ POR QUÉ EXISTE. La primera versión del freno miraba con qué palabra empezaba
# TODO el texto que se le pasaba, así que cualquier cosa con dos sentencias lo
# saltaba entera:
#
#     consultar-pruebas.sh "SELECT 1; DROP DATABASE mbinvlachimalteca;"
#
# empieza con SELECT, pasaba el freno, y mysqlsh ejecuta las dos. Un freno que se
# salta sin querer es PEOR que no tener freno: da una confianza que no
# corresponde. Y en pruebas viven copias de bases de clientes reales.
#
# ⚠️ NO TOCA NINGUNA BASE: se le da una configuración de mentira y se mira sólo si
# corta antes de conectarse (código 2) o si deja pasar.
# ⚠️ Sin `timeout`: no existe en macOS y devolvía 127, así que TODAS las
# comprobaciones daban «pasa» y parecía que el guion estaba roto. Lo estaba la prueba.
# Comprueba el freno SIN tocar ninguna base: se le pone un config de mentira y
# se mira sólo si frena o deja pasar, antes de que llegue a conectarse.
G=scripts/consultar-pruebas.sh
TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT
printf 'BD_USUARIO=nadie\nBD_CLAVE=nada\n' > "$TMP/e"; chmod 600 "$TMP/e"
export MB_PRUEBAS_ENV="$TMP/e"
fallos=0
probar() {  # descripción, sql, esperado(FRENA|PASA)
  salida=$("$G" "$2" 2>&1); cod=$?
  if [ $cod -eq 2 ]; then real=FRENA; else real=PASA; fi
  if [ "$real" = "$3" ]; then echo "  OK    $1"; else echo "  FALLA $1 (esperaba $3, dio $real)"; fallos=$((fallos+1)); fi
}
probar "DROP DATABASE suelto"                      "DROP DATABASE mbinvlachimalteca;"            FRENA
probar "⚠️ DROP DATABASE escondido tras un SELECT"  "SELECT 1; DROP DATABASE mbinvlachimalteca;"  FRENA
probar "⚠️ DROP DATABASE en otra línea"             "SELECT 1;
DROP DATABASE mbinvlachimalteca;"                                                                FRENA
probar "DROP DATABASE tras un comentario"          "/* nada */ DROP DATABASE x;"                 FRENA
probar "DELETE sin WHERE"                          "DELETE FROM maeplu"                          FRENA
probar "⚠️ DELETE sin WHERE detrás de un SELECT"    "SELECT 1; DELETE FROM maeplu"                FRENA
probar "UPDATE sin WHERE"                          "UPDATE maeplu SET plu=1"                     FRENA
probar "DELETE CON where: pasa"                    "DELETE FROM maeplu WHERE id=1"               PASA
probar "UPDATE CON where: pasa"                    "UPDATE maeplu SET plu=1 WHERE id=1"          PASA
probar "un SELECT normal: pasa"                    "SELECT COUNT(*) FROM maeplu"                 PASA
probar "DROP TABLE (se deshace con el respaldo): pasa" "DROP TABLE zz_temporal"                  PASA
echo
echo "  $fallos con problema"
exit $((fallos>0))
