summ-vi / scripts /test_unit_backend.py
Hagurou's picture
Initial commit
0bd1dce
Raw
History Blame Contribute Delete
2.97 kB
import os
import sys
import io
import asyncio
from fastapi import UploadFile
# Cấu hình đường dẫn để có thể import trực tiếp từ thư mục backend
backend_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'backend', 'api-service'))
if backend_path not in sys.path:
sys.path.insert(0, backend_path)
from app.services.document_service import extract_text_from_file
def print_result(name, success, details=""):
if success:
print(f"✅ PASS: {name} " + (f"({details})" if details else ""))
else:
print(f"❌ FAIL: {name} - {details}")
# ==========================================
# MOCK (GIẢ LẬP) CÁC ĐỐI TƯỢNG FASTAPI
# ==========================================
class MockUploadFile(UploadFile):
"""Giả lập một file được tải lên từ trình duyệt"""
def __init__(self, filename: str, content: bytes):
self.filename = filename
self.file = io.BytesIO(content)
# ==========================================
# BẮT ĐẦU UNIT TESTS
# ==========================================
def test_extract_txt_file():
"""Kiểm tra hàm trích xuất file TXT có lấy ra đúng nội dung không"""
content = "Hello, đây là một đoạn văn bản tiếng Việt để test."
mock_file = MockUploadFile(filename="test.txt", content=content.encode("utf-8"))
# Gọi trực tiếp hàm trong code của bạn, KHÔNG CẦN CHẠY SERVER
result = extract_text_from_file(mock_file)
if result == content:
print_result("Unit Test - Extract TXT", True, "Nội dung khớp hoàn toàn")
else:
print_result("Unit Test - Extract TXT", False, f"Nội dung bị sai lệch: '{result}'")
def test_extract_word_limit():
"""Kiểm tra xem hệ thống có cắt bớt nếu văn bản dài hơn giới hạn 5000 từ không"""
# Tạo một văn bản có 10 từ
content = "word " * 10
mock_file = MockUploadFile(filename="limit.txt", content=content.encode("utf-8"))
# Ép giới hạn là 5 từ thay vì 5000
result = extract_text_from_file(mock_file, word_limit=5)
# Kết quả trả về phải đúng 5 từ
words_returned = result.split()
if len(words_returned) == 5:
print_result("Unit Test - Word Limit Enforcer", True, "Đã giới hạn đúng số từ quy định")
else:
print_result("Unit Test - Word Limit Enforcer", False, f"Mong đợi 5 từ nhưng trả về {len(words_returned)}")
if __name__ == "__main__":
if sys.platform == "win32":
sys.stdout.reconfigure(encoding='utf-8')
print("==================================================")
print("🧪 BẮT ĐẦU CHẠY UNIT TESTS (Không cần Server)")
print("==================================================")
test_extract_txt_file()
test_extract_word_limit()
print("==================================================")