eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
"""Tests para update_obsidian_note."""
|
|
|
|
import pytest
|
|
|
|
from read_obsidian_note import read_obsidian_note
|
|
from update_obsidian_note import update_obsidian_note
|
|
|
|
|
|
def _seed(tmp_path, name="Nota.md", content="---\ntitle: A\nstatus: open\n---\n\nLinea original."):
|
|
path = tmp_path / name
|
|
path.write_text(content, encoding="utf-8")
|
|
return str(path)
|
|
|
|
|
|
def test_merge_frontmatter_conserva_claves_previas(tmp_path):
|
|
# Golden path: set_frontmatter mergea sin perder claves no mencionadas.
|
|
note = _seed(tmp_path)
|
|
ret = update_obsidian_note(
|
|
note, set_frontmatter={"status": "done", "closed": "2026-06-09"}
|
|
)
|
|
assert ret == note
|
|
|
|
fm = read_obsidian_note(note)["frontmatter"]
|
|
assert fm["title"] == "A" # clave previa conservada
|
|
assert fm["status"] == "done" # clave existente sobreescrita
|
|
assert fm["closed"] == "2026-06-09" # clave nueva anadida
|
|
|
|
|
|
def test_reemplazo_de_body(tmp_path):
|
|
# Edge: body no None reemplaza por completo el cuerpo.
|
|
note = _seed(tmp_path)
|
|
update_obsidian_note(note, body="Cuerpo nuevo entero.")
|
|
parsed = read_obsidian_note(note)
|
|
assert parsed["body"].strip() == "Cuerpo nuevo entero."
|
|
assert "Linea original" not in parsed["body"]
|
|
# El frontmatter se conserva intacto.
|
|
assert parsed["frontmatter"]["title"] == "A"
|
|
|
|
|
|
def test_append_concatena_al_final(tmp_path):
|
|
# Edge: append concatena tras el body existente con salto de linea.
|
|
note = _seed(tmp_path)
|
|
update_obsidian_note(note, append="Linea anadida.")
|
|
body = read_obsidian_note(note)["body"]
|
|
assert "Linea original." in body
|
|
assert "Linea anadida." in body
|
|
assert body.index("Linea original.") < body.index("Linea anadida.")
|
|
|
|
|
|
def test_body_y_append_combinados(tmp_path):
|
|
# Edge: append se aplica DESPUES del reemplazo de body.
|
|
note = _seed(tmp_path)
|
|
update_obsidian_note(note, body="Base.", append="Extra.")
|
|
body = read_obsidian_note(note)["body"]
|
|
assert "Base." in body
|
|
assert "Extra." in body
|
|
assert "Linea original" not in body
|
|
assert body.index("Base.") < body.index("Extra.")
|
|
|
|
|
|
def test_nota_inexistente_lanza_filenotfounderror(tmp_path):
|
|
# Error path: actualizar una nota que no existe no la crea.
|
|
with pytest.raises(FileNotFoundError):
|
|
update_obsidian_note(str(tmp_path / "no_existe.md"), body="x")
|
|
|
|
|
|
def test_directorio_lanza_isadirectoryerror(tmp_path):
|
|
# Error path: ruta a directorio.
|
|
sub = tmp_path / "carpeta"
|
|
sub.mkdir()
|
|
with pytest.raises(IsADirectoryError):
|
|
update_obsidian_note(str(sub), body="x")
|