dnd5-scripts/faction_turns/tests/test_vault_utils.py

80 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Интеграционные тесты для vault_utils.py.
Проверяют взаимодействие с Obsidian Local REST API по всем реализованным кейсам.
"""
import pytest
import sys
import os
# Добавляем родительскую директорию scripts в sys.path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
from vault_utils import (
get_file, write_file, create_file, patch_frontmatter, search_simple, list_directory,
normalize_wikilink, resolve_wikilink
)
# ----------------------------------------------- Test Constants ------------------------------------------------------------
TEST_FOLDER = "Фракции/Tests"
TEST_FILE_NAME_NO_EXT = "Test_Vault_Utils"
TEST_FILE_NAME = TEST_FILE_NAME_NO_EXT + ".md"
TEST_FILE_PATH = f"{TEST_FOLDER}/{TEST_FILE_NAME}"
# ----------------------------------------------- Tests ------------------------------------------------------------
def test_create_file():
"""Проверяет создание нового файла (PUT)."""
content = "# Test Vault Utils\nТестовый контент."
success = create_file(TEST_FILE_PATH, content)
assert success is True
def test_list_directory():
"""Проверяет получение списка файлов в директории (GET)."""
result = list_directory(TEST_FOLDER)
assert "files" in result
assert any(TEST_FILE_NAME in f for f in result["files"])
def test_search_simple():
"""Проверяет простой поиск по имени файла (POST)."""
result = search_simple("Test_Vault_Utils")
assert len(result) > 0
assert result[0]["filename"] == TEST_FILE_PATH
def test_get_file():
"""Проверяет чтение контента и парсинг frontmatter (GET)."""
result = get_file(TEST_FILE_PATH)
assert result["path"] == TEST_FILE_PATH
assert "Test Vault Utils" in result["body"]
def test_write_file():
"""Проверяет перезапись файла с frontmatter (PUT)."""
fm = {"test_field": "test_value"}
body = "# Updated Title\nНовый текст."
success = write_file(TEST_FILE_PATH, fm, body)
assert success is True
# Проверяем, что изменения применились
result = get_file(TEST_FILE_PATH)
assert result["frontmatter"].get("test_field") == "test_value"
def test_patch_frontmatter():
"""Проверяет точечное изменение frontmatter (PATCH)."""
success = patch_frontmatter(
TEST_FILE_PATH,
target="patched_field",
value=42
)
assert success is True
def test_normalize_wikilink():
"""Проверяет нормализацию вики-ссылок."""
assert normalize_wikilink("[[Waterdeep]]") == "waterdeep"
assert normalize_wikilink("[[Waterdeep|City]]") == "waterdeep"
assert normalize_wikilink("Waterdeep") == "waterdeep"
assert normalize_wikilink("") == ""
def test_resolve_wikilink():
"""Проверяет разрешение пути по имени вики-ссылки."""
resolved = resolve_wikilink(f"[[{TEST_FILE_NAME_NO_EXT}]]")
assert resolved == TEST_FILE_PATH