Initial release: DictIA v0.8.14-alpha (fork de Speakr, AGPL-3.0)
This commit is contained in:
187
tests/test_inquire_mode.py
Normal file
187
tests/test_inquire_mode.py
Normal file
@@ -0,0 +1,187 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script for Inquire Mode functionality
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Add the parent directory to the path to import app
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from src.app import app, db, User, Recording, TranscriptChunk, InquireSession, Tag
|
||||
|
||||
def test_database_models():
|
||||
"""Test that the new database models work correctly."""
|
||||
with app.app_context():
|
||||
print("🔍 Testing Inquire Mode Database Models...")
|
||||
|
||||
# Test that tables exist
|
||||
from sqlalchemy import inspect
|
||||
inspector = inspect(db.engine)
|
||||
tables = inspector.get_table_names()
|
||||
|
||||
required_tables = ['transcript_chunk', 'inquire_session']
|
||||
for table in required_tables:
|
||||
if table in tables:
|
||||
print(f"✅ Table '{table}' exists")
|
||||
else:
|
||||
print(f"❌ Table '{table}' missing")
|
||||
return False
|
||||
|
||||
# Test creating sample data
|
||||
try:
|
||||
# Create a test user (or get existing one)
|
||||
user = User.query.first()
|
||||
if not user:
|
||||
print("❌ No users found. Please create a user first.")
|
||||
return False
|
||||
|
||||
print(f"📝 Using test user: {user.username}")
|
||||
|
||||
# Create a test recording if none exist
|
||||
recording = Recording.query.filter_by(user_id=user.id).first()
|
||||
if not recording:
|
||||
print("❌ No recordings found. Please create a recording first.")
|
||||
return False
|
||||
|
||||
print(f"🎵 Using test recording: {recording.title}")
|
||||
|
||||
# Test TranscriptChunk creation
|
||||
chunk = TranscriptChunk(
|
||||
recording_id=recording.id,
|
||||
user_id=user.id,
|
||||
chunk_index=0,
|
||||
content="This is a test transcription chunk.",
|
||||
start_time=0.0,
|
||||
end_time=5.0,
|
||||
speaker_name="Test Speaker"
|
||||
)
|
||||
|
||||
db.session.add(chunk)
|
||||
|
||||
# Test InquireSession creation
|
||||
session = InquireSession(
|
||||
user_id=user.id,
|
||||
session_name="Test Session",
|
||||
filter_tags='[]',
|
||||
filter_speakers='["Test Speaker"]'
|
||||
)
|
||||
|
||||
db.session.add(session)
|
||||
db.session.commit()
|
||||
|
||||
print("✅ Successfully created test TranscriptChunk and InquireSession")
|
||||
|
||||
# Clean up test data
|
||||
db.session.delete(chunk)
|
||||
db.session.delete(session)
|
||||
db.session.commit()
|
||||
|
||||
print("✅ Test data cleaned up")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error testing models: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def test_chunking_functions():
|
||||
"""Test the chunking and embedding functions."""
|
||||
with app.app_context():
|
||||
print("🔧 Testing Chunking Functions...")
|
||||
|
||||
try:
|
||||
from src.app import chunk_transcription, generate_embeddings, serialize_embedding, deserialize_embedding
|
||||
|
||||
# Test chunking
|
||||
test_text = "This is a test sentence. This is another sentence for testing. And here's a third sentence to make sure chunking works properly with longer text that should be split into multiple chunks."
|
||||
chunks = chunk_transcription(test_text, max_chunk_length=100, overlap=20)
|
||||
|
||||
if len(chunks) > 1:
|
||||
print(f"✅ Chunking works: {len(chunks)} chunks created")
|
||||
else:
|
||||
print("✅ Text too short for chunking (expected behavior)")
|
||||
|
||||
# Test embeddings (will only work if sentence-transformers is installed)
|
||||
try:
|
||||
embeddings = generate_embeddings(["test sentence", "another test"])
|
||||
if len(embeddings) == 2:
|
||||
print("✅ Embedding generation works")
|
||||
|
||||
# Test serialization
|
||||
if embeddings[0] is not None:
|
||||
serialized = serialize_embedding(embeddings[0])
|
||||
deserialized = deserialize_embedding(serialized)
|
||||
if deserialized is not None and len(deserialized) > 0:
|
||||
print("✅ Embedding serialization/deserialization works")
|
||||
else:
|
||||
print("❌ Embedding serialization/deserialization failed")
|
||||
else:
|
||||
print("❌ Embedding generation returned wrong number of embeddings")
|
||||
|
||||
except Exception as e:
|
||||
print(f"⚠️ Embedding test skipped (sentence-transformers may not be installed): {e}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error testing chunking functions: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def test_api_imports():
|
||||
"""Test that all API endpoints can be imported."""
|
||||
print("🔌 Testing API Endpoint Imports...")
|
||||
|
||||
try:
|
||||
from src.app import (
|
||||
get_inquire_sessions, create_inquire_session, inquire_search,
|
||||
inquire_chat, get_available_filters, process_recording_chunks_endpoint
|
||||
)
|
||||
print("✅ All inquire mode API endpoints imported successfully")
|
||||
return True
|
||||
except ImportError as e:
|
||||
print(f"❌ Failed to import API endpoints: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
"""Run all tests."""
|
||||
print("🚀 Starting Inquire Mode Tests...\n")
|
||||
|
||||
tests = [
|
||||
("Database Models", test_database_models),
|
||||
("Chunking Functions", test_chunking_functions),
|
||||
("API Imports", test_api_imports)
|
||||
]
|
||||
|
||||
results = []
|
||||
for test_name, test_func in tests:
|
||||
print(f"\n--- {test_name} ---")
|
||||
try:
|
||||
success = test_func()
|
||||
results.append((test_name, success))
|
||||
except Exception as e:
|
||||
print(f"❌ {test_name} failed with exception: {e}")
|
||||
results.append((test_name, False))
|
||||
|
||||
print("\n" + "="*50)
|
||||
print("📊 Test Results Summary:")
|
||||
print("="*50)
|
||||
|
||||
all_passed = True
|
||||
for test_name, success in results:
|
||||
status = "✅ PASS" if success else "❌ FAIL"
|
||||
print(f"{status} - {test_name}")
|
||||
if not success:
|
||||
all_passed = False
|
||||
|
||||
print("\n" + "="*50)
|
||||
if all_passed:
|
||||
print("🎉 All tests passed! Inquire Mode is ready to use.")
|
||||
else:
|
||||
print("⚠️ Some tests failed. Please check the output above.")
|
||||
|
||||
return all_passed
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = main()
|
||||
sys.exit(0 if success else 1)
|
||||
Reference in New Issue
Block a user