copper-mind / tests /conftest.py
ifieryarrows's picture
Sync from GitHub
f64b002 verified
"""
Pytest configuration and fixtures.
"""
import os
import sys
import pytest
from datetime import datetime, timezone
# Add app to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@pytest.fixture
def sample_articles():
"""Sample news articles for testing."""
return [
{
"title": "Copper prices surge amid supply concerns",
"description": "Global copper prices rose 3% today...",
"url": "https://example.com/news/copper-surge",
"source": "Financial Times",
"published_at": datetime(2026, 1, 1, 10, 0, tzinfo=timezone.utc),
},
{
"title": "Mining output drops in Chile",
"description": "Chile's copper production fell...",
"url": "https://example.com/news/chile-mining",
"source": "Reuters",
"published_at": datetime(2026, 1, 1, 14, 0, tzinfo=timezone.utc),
},
{
"title": "Copper prices rise on supply concerns", # Similar to first
"description": "Copper prices increased today...",
"url": "https://example.com/news/copper-rise",
"source": "Bloomberg",
"published_at": datetime(2026, 1, 1, 15, 0, tzinfo=timezone.utc),
},
]
@pytest.fixture
def sample_sentiment_scores():
"""Sample sentiment scores for aggregation testing."""
return [
{
"score": 0.5,
"published_at": datetime(2026, 1, 1, 9, 0, tzinfo=timezone.utc),
},
{
"score": -0.2,
"published_at": datetime(2026, 1, 1, 14, 0, tzinfo=timezone.utc),
},
{
"score": 0.3,
"published_at": datetime(2026, 1, 1, 16, 0, tzinfo=timezone.utc),
},
]
@pytest.fixture
def sample_price_data():
"""Sample price data for feature testing."""
import pandas as pd
import numpy as np
dates = pd.date_range(start="2025-01-01", periods=30, freq="D")
# Generate realistic price series
np.random.seed(42)
base_price = 4.0
returns = np.random.normal(0, 0.02, len(dates))
prices = base_price * np.exp(np.cumsum(returns))
df = pd.DataFrame({
"date": dates,
"open": prices * (1 + np.random.uniform(-0.01, 0.01, len(dates))),
"high": prices * (1 + np.random.uniform(0, 0.02, len(dates))),
"low": prices * (1 - np.random.uniform(0, 0.02, len(dates))),
"close": prices,
"volume": np.random.randint(10000, 100000, len(dates)),
})
df = df.set_index("date")
return df