Files

85 lines
2.5 KiB
Python
Raw Permalink Normal View History

"""Tests for setup wizard functionality."""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / "scripts"))
import pytest
import json
from unittest.mock import patch
from setup import load_sources, save_sources, get_default_sources, setup_language, setup_markets
def test_load_sources_missing_file(tmp_path, monkeypatch):
"""Test loading non-existent sources returns defaults."""
sources_file = tmp_path / "sources.json"
# Patch both path constants to use temp file
monkeypatch.setattr("setup.SOURCES_FILE", sources_file)
# File doesn't exist, so load_sources should call get_default_sources
sources = load_sources()
assert isinstance(sources, dict)
assert "rss_feeds" in sources # Default structure has rss_feeds
def test_save_sources(tmp_path, monkeypatch):
"""Test saving sources to JSON."""
sources_file = tmp_path / "sources.json"
monkeypatch.setattr("setup.SOURCES_FILE", sources_file)
sources = {
"rss_feeds": {
"test_source": {
"name": "Test",
"enabled": True,
"top": "https://example.com/rss"
}
}
}
save_sources(sources)
assert sources_file.exists()
with open(sources_file) as f:
saved = json.load(f)
assert saved["rss_feeds"]["test_source"]["enabled"] is True
def test_get_default_sources():
"""Test default sources structure."""
sources = get_default_sources()
assert isinstance(sources, dict)
assert "rss_feeds" in sources
# Should have common sources like wsj, barrons, cnbc
feeds = sources["rss_feeds"]
assert any("wsj" in k.lower() or "barrons" in k.lower() or "cnbc" in k.lower()
for k in feeds.keys())
@patch("setup.prompt", side_effect=["en"])
@patch("setup.save_sources")
def test_setup_language(mock_save, mock_prompt):
"""Test language setup function."""
sources = {"language": {"supported": ["en", "de"], "default": "de"}}
setup_language(sources)
# Should have called prompt
mock_prompt.assert_called()
# Language should be updated
assert sources["language"]["default"] == "en"
@patch("setup.prompt_bool", side_effect=[True, False])
@patch("setup.save_sources")
def test_setup_markets(mock_save, mock_prompt):
"""Test markets setup function."""
sources = {"markets": {"us": {"enabled": False}, "eu": {"enabled": False}}}
setup_markets(sources)
# Should have prompted (at least once for US)
assert mock_prompt.called