80 lines
3.2 KiB
Python
80 lines
3.2 KiB
Python
"""
|
||
Интеграционные тесты для 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_by_filename, 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_by_filename("Test_Vault_Utils")
|
||
assert len(result) > 0
|
||
assert result[0] == 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
|