""" Интеграционные тесты для 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