feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
"""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")
|
||||
Reference in New Issue
Block a user