#!/usr/bin/env python3
"""
Test DashboardService with actual Chunk model.
This test validates that DashboardService correctly accesses fields
from the Chunk model without AttributeError.
"""
from pathlib import Path
from ytpipe.services.exporters import DashboardService
from ytpipe.core.models import VideoMetadata, Chunk
def test_dashboard_with_chunk_model():
"""Test that DashboardService works with actual Chunk model."""
# Create test metadata
metadata = VideoMetadata(
video_id="test123456",
url="https://youtube.com/watch?v=test123456",
title="Test Video - Dashboard Fix Validation",
duration=120,
upload_date="20260204",
channel="Test Channel",
view_count=1000,
like_count=50,
comment_count=10
)
# Create test chunks using actual Chunk model structure
chunks = [
Chunk(
id=0,
text="This is the first test chunk with some content to analyze.",
word_count=11,
start_char=0,
end_char=61,
quality_score=8.5,
timestamp_start="0:00",
timestamp_end="0:30"
),
Chunk(
id=1,
text="Second chunk has medium quality and different timestamps.",
word_count=9,
start_char=62,
end_char=120,
quality_score=6.5,
timestamp_start="0:30",
timestamp_end="1:00"
),
Chunk(
id=2,
text="Third chunk is low quality.",
word_count=5,
start_char=121,
end_char=148,
quality_score=4.0,
timestamp_start="1:00",
timestamp_end="1:30"
),
Chunk(
id=3,
text="Fourth chunk without timestamps.",
word_count=4,
start_char=149,
end_char=181,
quality_score=7.0,
timestamp_start=None,
timestamp_end=None
)
]
# Create DashboardService
service = DashboardService()
# Generate dashboard (this should not raise AttributeError)
output_dir = Path("./test_output")
output_dir.mkdir(exist_ok=True)
try:
dashboard_path = service.generate_dashboard(
metadata=metadata,
chunks=chunks,
output_dir=output_dir
)
print(f"✅ SUCCESS: Dashboard generated at {dashboard_path}")
print(f" - No AttributeError raised")
print(f" - All chunk fields accessed correctly")
print(f" - File size: {dashboard_path.stat().st_size} bytes")
# Verify file exists and has content
assert dashboard_path.exists(), "Dashboard file not created"
assert dashboard_path.stat().st_size > 1000, "Dashboard file too small"
# Read and validate HTML
html_content = dashboard_path.read_text()
assert "Test Video - Dashboard Fix Validation" in html_content
assert "Test Channel" in html_content
assert "11 words" in html_content # First chunk word count
assert "0:00 - 0:30" in html_content # First chunk timestamps
print("✅ HTML validation passed")
print(f" - Title found: ✓")
print(f" - Channel found: ✓")
print(f" - Word counts found: ✓")
print(f" - Timestamps found: ✓")
return True
except AttributeError as e:
print(f"❌ FAILED: AttributeError raised")
print(f" Error: {e}")
import traceback
traceback.print_exc()
return False
except Exception as e:
print(f"❌ FAILED: Unexpected error")
print(f" Error: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
print("Testing DashboardService with Chunk model fix...\n")
success = test_dashboard_with_chunk_model()
if success:
print("\n🎉 All tests passed! DashboardService is fixed.")
exit(0)
else:
print("\n💥 Tests failed. Check errors above.")
exit(1)