123 lines
4.2 KiB
Python
123 lines
4.2 KiB
Python
"""Wiki.js GraphQL 클라이언트 테스트."""
|
|
|
|
import asyncio
|
|
import sys
|
|
import os
|
|
import io
|
|
|
|
if sys.stdout.encoding != "utf-8":
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
|
|
async def test_wiki_client():
|
|
"""WikiClient 전체 API 스트레스/기능 테스트."""
|
|
print("=== Wiki.js Client Test ===")
|
|
from tools.wiki_client import WikiClient
|
|
|
|
client = WikiClient(timeout=10.0)
|
|
test_path = "research/agent-test-sandbox"
|
|
|
|
# 1. 목록 조회
|
|
try:
|
|
pages = await client.list_pages()
|
|
print(f" [OK] 페이지 목록 조회: {len(pages)}건 반환됨")
|
|
except Exception as e:
|
|
print(f" [FAIL] 페이지 목록 조회 실패: {e}")
|
|
return
|
|
|
|
# 2. 기존 샌드박스 정리 (존재 시)
|
|
existing = await client.find_page(test_path)
|
|
if existing:
|
|
print(f" [INFO] 잔여 테스트 페이지 삭제 중 (id: {existing.id})")
|
|
await client.delete_page(existing.id)
|
|
# 삭제 반영 대기
|
|
await asyncio.sleep(1)
|
|
|
|
# 3. 페이지 생성
|
|
print(f" [ACT] 테스트 페이지 생성: /{test_path}")
|
|
test_content = "# Test\n이것은 자동화 테스트 페이지입니다."
|
|
try:
|
|
new_page = await client.create_page(
|
|
test_path,
|
|
"Test Sandbox",
|
|
test_content,
|
|
"테스트 요약",
|
|
["test", "agent"]
|
|
)
|
|
print(f" [OK] 페이지 생성 성공 (id: {new_page.id})")
|
|
except Exception as e:
|
|
print(f" [FAIL] 페이지 생성 실패: {e}")
|
|
return
|
|
|
|
# 4. 페이지 조회 검증
|
|
try:
|
|
fetched = await client.get_page(new_page.id)
|
|
assert fetched.path == test_path, "경로 불일치"
|
|
print(f" [OK] 생성된 페이지 조회 성공 (id: {fetched.id})")
|
|
except Exception as e:
|
|
print(f" [FAIL] 생성된 페이지 조회 실패: {e}")
|
|
|
|
# 5. 페이지 수정 연산
|
|
print(f" [ACT] 페이지 데이터 업데이트")
|
|
update_content = test_content + "\n\n업데이트된 내용입니다."
|
|
try:
|
|
ok = await client.update_page(
|
|
new_page.id,
|
|
update_content,
|
|
title="Updated Test Sandbox"
|
|
)
|
|
assert ok is True, "업데이트 API 반환 결과 False"
|
|
print(f" [OK] 페이지 수정 성공")
|
|
except Exception as e:
|
|
print(f" [FAIL] 페이지 수정 실패: {e}")
|
|
|
|
# 6. Upsert API 검증 (기존 문서 덮어쓰기)
|
|
print(f" [ACT] Upsert API 검증")
|
|
try:
|
|
upserted = await client.upsert_page(
|
|
test_path,
|
|
"Upserted Test Sandbox",
|
|
update_content + "\nUpsert 완료"
|
|
)
|
|
assert upserted.id == new_page.id, "Upsert가 기존 ID를 재사용하지 않음"
|
|
print(f" [OK] Upsert (기존 수정) 성공")
|
|
except Exception as e:
|
|
print(f" [FAIL] Upsert (기존 수정) 실패: {e}")
|
|
|
|
# 7. Dashboard 갱신 API 검증
|
|
print(f" [ACT] Dashboard 갱신 테스트")
|
|
try:
|
|
dash = await client.update_dashboard([
|
|
{"topic": "Dummy Topic 1", "status": "✅", "path": "research/dummy1"},
|
|
{"topic": "Dummy Topic 2", "status": "진행중", "path": "research/dummy2"}
|
|
])
|
|
print(f" [OK] 대시보드 강제 갱신 API 호춣 성공 (id: {dash.id})")
|
|
|
|
# 다시 원래 상태로 롤백 (엔트리 없이 호출하면 파일 시스템 스캔)
|
|
await client.update_dashboard()
|
|
print(f" [OK] 대시보드 자동 스캔 & 롤백 성공")
|
|
except Exception as e:
|
|
print(f" [FAIL] 대시보드 API 실패: {e}")
|
|
|
|
# 8. 정리 (삭제)
|
|
print(f" [ACT] 테스트 페이지 삭제")
|
|
try:
|
|
ok = await client.delete_page(new_page.id)
|
|
assert ok is True, "삭제 API 반환 결과 False"
|
|
print(f" [OK] 정리 프러시저 (삭제) 성공")
|
|
except Exception as e:
|
|
print(f" [FAIL] 삭제 실패: {e}")
|
|
|
|
print(" ✅ WikiClient All Tests Completed\n")
|
|
|
|
|
|
async def main():
|
|
await test_wiki_client()
|
|
print("🎉 All tests completed!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|