"""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())