| import os | |
| import sys | |
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src")) | |
| from ingestion import generate_data | |
| def test_generate_events_honors_requested_record_count(): | |
| generate_data.reset_seed(42) | |
| tenants = generate_data.generate_tenants(25) | |
| events = generate_data.generate_events(tenants, total_records=1000) | |
| assert len(events) == 1000 | |
| def test_synthetic_churn_mix_stays_demo_realistic(): | |
| generate_data.reset_seed(42) | |
| tenants = generate_data.generate_tenants(50) | |
| events = generate_data.generate_events(tenants, total_records=5000) | |
| cancellations = [ | |
| event for event in events | |
| if event["event_type"] == "subscription_cancelled" | |
| ] | |
| churn_event_ratio = len(cancellations) / len(events) | |
| assert 0.005 <= churn_event_ratio <= 0.05 | |