2.6.2: arranque en blanco

- Una instalación nueva no trae carpetas de fábrica: CONFIG_DEFECTO
  arrancaba con David Reyes, Danney y Camilo apuntando a Z:, W: y N:.
  raices viene vacía; el diccionario de clientes y discos sigue de serie
  porque es conocimiento, no estado.
- Al abrir no se entra sola en ninguna carpeta: la primera opción del
  desplegable está vacía y la portada enseña «Tus carpetas» con su último
  escaneo, para entrar con un clic.
- Un config.json ilegible se aparta en config.json.roto-<fecha> en vez de
  sustituirse por los valores de fábrica en silencio.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Este commit está contenido en:
Labstream
2026-09-25 08:10:36 -05:00
padre bcaa80df12
commit 2daffc175a
Se han modificado 5 ficheros con 86 adiciones y 20 borrados

Ver fichero

@@ -70,6 +70,26 @@ class Reglas(unittest.TestCase):
self.assertFalse(R.es_proxy_dir("Entregas"))
class Config(unittest.TestCase):
def test_config_roto_se_aparta(self):
"""Un config.json ilegible no se pisa en silencio: queda una copia .roto-* y se parte de cero."""
tmp = tempfile.mkdtemp(prefix="organilab-cfg-")
try:
ruta = os.path.join(tmp, "config.json")
with open(ruta, "w", encoding="utf-8") as fh:
fh.write('{"raices": [ esto no es json')
src = open(os.path.join(AQUI, "organizador.py"), encoding="utf-8").read()
ini = src.index("def cargar_json(")
fin = src.index("def guardar_json(")
ns = {"json": json, "os": os, "shutil": shutil, "time": time}
exec(src[ini:fin], ns)
out = ns["cargar_json"](ruta, {"raices": [], "a": 1})
self.assertEqual(out, {"raices": [], "a": 1})
self.assertTrue([f for f in os.listdir(tmp) if f.startswith("config.json.roto-")], "no dejó copia del roto")
finally:
shutil.rmtree(tmp, ignore_errors=True)
class Firma(unittest.TestCase):
@classmethod
def setUpClass(cls):
@@ -183,6 +203,8 @@ class Servidor(unittest.TestCase):
def test_recorrido(self):
q = "?raiz=" + urllib.parse.quote(self.raiz)
# 0. una instalación nueva abre en blanco: ninguna carpeta puesta de fábrica
self.assertEqual(self.get("/api/estado")["raices"], [])
# peticiones que no son JSON: fuera
rq = urllib.request.Request(self.base + "/api/raices", b"{}", {"Content-Type": "text/plain"})
with self.assertRaises(urllib.error.HTTPError) as cm: