Files
LEDMatrix/test/test_of_the_day.py
2025-07-22 20:39:09 -05:00

138 lines
4.7 KiB
Python

#!/usr/bin/env python3
import sys
import os
import json
from datetime import date
# Add the project root to the path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src.of_the_day_manager import OfTheDayManager
from src.display_manager import DisplayManager
from src.config_manager import ConfigManager
def test_of_the_day_manager():
"""Test the OfTheDayManager functionality."""
print("Testing OfTheDayManager...")
# Load config
config_manager = ConfigManager()
config = config_manager.load_config()
# Create a mock display manager (we won't actually display)
display_manager = DisplayManager(config)
# Create the OfTheDayManager
of_the_day = OfTheDayManager(display_manager, config)
print(f"OfTheDayManager enabled: {of_the_day.enabled}")
print(f"Categories loaded: {list(of_the_day.categories.keys())}")
print(f"Data files loaded: {list(of_the_day.data_files.keys())}")
# Test loading today's items
today = date.today()
day_of_year = today.timetuple().tm_yday
print(f"Today is day {day_of_year} of the year")
of_the_day._load_todays_items()
print(f"Today's items: {list(of_the_day.current_items.keys())}")
# Test data file loading
for category_name, data in of_the_day.data_files.items():
print(f"Category '{category_name}': {len(data)} items loaded")
if str(day_of_year) in data:
item = data[str(day_of_year)]
print(f" Today's item: {item.get('title', 'No title')}")
else:
print(f" No item found for day {day_of_year}")
# Test text wrapping
test_text = "This is a very long text that should be wrapped to fit on the LED matrix display"
wrapped = of_the_day._wrap_text(test_text, 60, display_manager.extra_small_font, max_lines=3)
print(f"Text wrapping test: {wrapped}")
print("OfTheDayManager test completed successfully!")
def test_data_files():
"""Test that all data files are valid JSON."""
print("\nTesting data files...")
data_dir = "of_the_day"
if not os.path.exists(data_dir):
print(f"Data directory {data_dir} not found!")
return
for filename in os.listdir(data_dir):
if filename.endswith('.json'):
filepath = os.path.join(data_dir, filename)
try:
with open(filepath, 'r', encoding='utf-8') as f:
data = json.load(f)
print(f"{filename}: {len(data)} items")
# Check for today's entry
today = date.today()
day_of_year = today.timetuple().tm_yday
if str(day_of_year) in data:
item = data[str(day_of_year)]
print(f" Today's item: {item.get('title', 'No title')}")
else:
print(f" No item for day {day_of_year}")
except Exception as e:
print(f"{filename}: Error - {e}")
print("Data files test completed!")
def test_config():
"""Test the configuration is valid."""
print("\nTesting configuration...")
config_manager = ConfigManager()
config = config_manager.load_config()
of_the_day_config = config.get('of_the_day', {})
if not of_the_day_config:
print("✗ No 'of_the_day' configuration found in config.json")
return
print(f"✓ OfTheDay configuration found")
print(f" Enabled: {of_the_day_config.get('enabled', False)}")
print(f" Update interval: {of_the_day_config.get('update_interval', 'Not set')}")
categories = of_the_day_config.get('categories', {})
print(f" Categories: {list(categories.keys())}")
for category_name, category_config in categories.items():
enabled = category_config.get('enabled', False)
data_file = category_config.get('data_file', 'Not set')
print(f" {category_name}: enabled={enabled}, data_file={data_file}")
# Check display duration
display_durations = config.get('display', {}).get('display_durations', {})
of_the_day_duration = display_durations.get('of_the_day', 'Not set')
print(f" Display duration: {of_the_day_duration} seconds")
print("Configuration test completed!")
if __name__ == "__main__":
print("=== OfTheDay System Test ===\n")
try:
test_config()
test_data_files()
test_of_the_day_manager()
print("\n=== All tests completed successfully! ===")
print("\nTo test the display on the Raspberry Pi, run:")
print("python3 run.py")
except Exception as e:
print(f"\n✗ Test failed with error: {e}")
import traceback
traceback.print_exc()