peregrine/tests/test_demo_toolbar.py

63 lines
2.3 KiB
Python

"""Tests for app/components/demo_toolbar.py."""
import sys, os
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).parent.parent))
# Ensure DEMO_MODE is set so the module initialises correctly
os.environ["DEMO_MODE"] = "true"
def test_set_simulated_tier_updates_session_state(monkeypatch):
"""set_simulated_tier writes to st.session_state.simulated_tier."""
session = {}
injected = []
monkeypatch.setattr("streamlit.components.v1.html", lambda h, height=0: injected.append(h))
monkeypatch.setattr("streamlit.session_state", session, raising=False)
monkeypatch.setattr("streamlit.rerun", lambda: None)
from unittest.mock import patch
with patch('app.components.demo_toolbar._DEMO_MODE', True):
from importlib import reload
import app.components.demo_toolbar as m
reload(m)
m.set_simulated_tier("premium")
assert session.get("simulated_tier") == "premium"
assert any("prgn_demo_tier=premium" in h for h in injected)
def test_set_simulated_tier_invalid_ignored(monkeypatch):
"""Invalid tier strings are rejected."""
session = {}
monkeypatch.setattr("streamlit.components.v1.html", lambda h, height=0: None)
monkeypatch.setattr("streamlit.session_state", session, raising=False)
monkeypatch.setattr("streamlit.rerun", lambda: None)
from unittest.mock import patch
with patch('app.components.demo_toolbar._DEMO_MODE', True):
from importlib import reload
import app.components.demo_toolbar as m
reload(m)
m.set_simulated_tier("ultramax")
assert "simulated_tier" not in session
def test_get_simulated_tier_defaults_to_paid(monkeypatch):
"""Returns 'paid' when no tier is set yet."""
monkeypatch.setattr("streamlit.session_state", {}, raising=False)
monkeypatch.setattr("streamlit.query_params", {}, raising=False)
from app.components.demo_toolbar import get_simulated_tier
assert get_simulated_tier() == "paid"
def test_get_simulated_tier_reads_session(monkeypatch):
"""Returns tier from st.session_state when set."""
monkeypatch.setattr("streamlit.session_state", {"simulated_tier": "free"}, raising=False)
monkeypatch.setattr("streamlit.query_params", {}, raising=False)
from app.components.demo_toolbar import get_simulated_tier
assert get_simulated_tier() == "free"