testing-patterns

Test Directory Structure

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "testing-patterns" with this command: npx skills add mgpowerlytics/nhlstats/mgpowerlytics-nhlstats-testing-patterns

Testing Patterns

Test Directory Structure

tests/ ├── conftest.py # Shared fixtures ├── test_elo_ratings.py # Elo implementation tests ├── test_kalshi_markets.py # API integration tests ├── test_data_validation.py # Data quality tests ├── test_dag_parsing.py # Airflow DAG tests └── test_{module}.py # Module-specific tests

Coverage Requirement

Maintain 85%+ code coverage.

Run with coverage

pytest --cov=plugins --cov-report=term-missing

Check specific module

pytest tests/test_nba_elo_rating.py --cov=plugins/nba_elo_rating.py

Common Fixtures (conftest.py)

import pytest from unittest.mock import MagicMock

@pytest.fixture def mock_db(): """Mock database manager.""" db = MagicMock() db.fetch_df.return_value = pd.DataFrame() return db

@pytest.fixture def sample_games(): """Sample game data for testing.""" return [ {"home_team": "Lakers", "away_team": "Celtics", "home_score": 110, "away_score": 105}, {"home_team": "Warriors", "away_team": "Suns", "home_score": 120, "away_score": 115}, ]

Mocking External APIs

from unittest.mock import patch, MagicMock

def test_fetch_markets(): with patch('kalshi_markets.MarketsApi') as mock_api: mock_api.return_value.get_markets.return_value = MagicMock( to_dict=lambda: {"markets": [{"ticker": "NBAWIN-250115-LAKBOS"}]} )

    result = fetch_nba_markets()
    assert len(result) == 1

Testing Elo Predictions

def test_elo_prediction_bounds(): elo = NBAEloRating() prob = elo.predict("Lakers", "Celtics")

assert 0.0 <= prob <= 1.0
assert prob != 0.5  # Should have home advantage

def test_elo_update_conservation(): elo = NBAEloRating() initial_sum = sum(elo.ratings.values()) if elo.ratings else 0

elo.update("Lakers", "Celtics", home_won=True)

# Ratings should be zero-sum
final_sum = sum(elo.ratings.values())
assert abs(final_sum - initial_sum - 3000) < 0.01  # 2 new teams at 1500

DAG Parsing Test

def test_dag_imports(): """Ensure DAG file parses without errors.""" from dags.multi_sport_betting_workflow import dag

assert dag is not None
assert len(dag.tasks) > 0

Data Validation Tests

def test_game_data_completeness(): from data_validation import validate_nba_data

report = validate_nba_data()

assert report.row_count > 1000
assert report.null_percentage < 5.0
assert len(report.missing_teams) == 0

Running Tests

All tests

pytest tests/ -v

Specific test file

pytest tests/test_nba_elo_rating.py -v

With coverage

pytest --cov=plugins --cov-report=html

Fast mode (stop on first failure)

pytest -x

Files to Reference

  • tests/conftest.py

  • Shared fixtures

  • tests/test_nba_elo_rating.py

  • Elo test examples

  • tests/test_kalshi_markets.py

  • API mocking examples

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

database-operations

No summary provided by upstream source.

Repository SourceNeeds Review
General

database-design

No summary provided by upstream source.

Repository SourceNeeds Review
General

testing-patterns

No summary provided by upstream source.

Repository SourceNeeds Review