Files
fn_registry/python/functions/obsidian/register_obsidian_vault_test.py
T
2026-06-15 01:33:35 +02:00

121 lines
3.7 KiB
Python

"""Tests para register_obsidian_vault."""
import json
import os
from register_obsidian_vault import register_obsidian_vault
def _read(cfg):
with open(cfg, "r", encoding="utf-8") as f:
return json.load(f)
def test_registra_entrada_nueva(tmp_path):
# Golden path: registra un vault nuevo en una config inexistente.
cfg = str(tmp_path / "obsidian.json")
vault = tmp_path / "MiVault"
vault.mkdir()
res = register_obsidian_vault(str(vault), open=True, config_path=cfg)
assert res["registered"] is True
assert res["already"] is False
assert res["open"] is True
assert len(res["id"]) == 16
assert res["path"] == str(vault)
data = _read(cfg)
assert res["id"] in data["vaults"]
entry = data["vaults"][res["id"]]
assert entry["path"] == str(vault)
assert entry["open"] is True
assert isinstance(entry["ts"], int) and entry["ts"] > 0
def test_segundo_registro_mismo_path_no_duplica_y_devuelve_already(tmp_path):
# Edge: idempotencia por path. La segunda llamada no crea otra entrada.
cfg = str(tmp_path / "obsidian.json")
vault = tmp_path / "MiVault"
vault.mkdir()
r1 = register_obsidian_vault(str(vault), open=True, config_path=cfg)
r2 = register_obsidian_vault(str(vault), open=True, config_path=cfg)
assert r2["already"] is True
assert r2["registered"] is False
assert r2["id"] == r1["id"]
data = _read(cfg)
assert len(data["vaults"]) == 1
def test_actualiza_flag_open_de_entrada_existente(tmp_path):
# Edge: misma ruta pero flag open distinto -> actualiza y reescribe.
cfg = str(tmp_path / "obsidian.json")
vault = tmp_path / "MiVault"
vault.mkdir()
register_obsidian_vault(str(vault), open=False, config_path=cfg)
r2 = register_obsidian_vault(str(vault), open=True, config_path=cfg)
assert r2["already"] is True
assert r2["open"] is True
data = _read(cfg)
assert data["vaults"][r2["id"]]["open"] is True
def test_preserva_claves_extra_de_nivel_superior(tmp_path):
# Edge: claves ajenas a "vaults" deben sobrevivir a la escritura.
cfg = str(tmp_path / "obsidian.json")
with open(cfg, "w", encoding="utf-8") as f:
json.dump(
{
"appVersionLastUsed": "1.5.3",
"updateDisabled": True,
"vaults": {
"0000000000000000": {"path": "/otro/Vault", "ts": 111, "open": False}
},
},
f,
)
vault = tmp_path / "Nuevo"
vault.mkdir()
register_obsidian_vault(str(vault), open=True, config_path=cfg)
data = _read(cfg)
assert data["appVersionLastUsed"] == "1.5.3"
assert data["updateDisabled"] is True
# La entrada previa de otro vault se conserva.
assert "0000000000000000" in data["vaults"]
assert len(data["vaults"]) == 2
def test_crea_config_y_directorios_si_no_existe(tmp_path):
# Edge: la config y sus directorios padre no existen y se crean.
cfg = str(tmp_path / "sub" / "dir" / "obsidian.json")
vault = tmp_path / "MiVault"
vault.mkdir()
res = register_obsidian_vault(str(vault), config_path=cfg)
assert res["registered"] is True
assert os.path.isfile(cfg)
# Sin archivo previo no hay backup.
assert res["backup_path"] == ""
def test_hace_backup_bak_antes_de_sobreescribir(tmp_path):
# Edge: una segunda escritura sobre config existente genera backup .bak.
cfg = str(tmp_path / "obsidian.json")
v1 = tmp_path / "V1"
v1.mkdir()
v2 = tmp_path / "V2"
v2.mkdir()
register_obsidian_vault(str(v1), config_path=cfg) # crea config
res = register_obsidian_vault(str(v2), config_path=cfg) # ahora si hay backup
assert res["backup_path"] == cfg + ".bak"
assert os.path.isfile(cfg + ".bak")