kalshi-csv/tests/test_parser.py
2026-07-18 13:34:47 -04:00

80 lines
2.1 KiB
Python

import pytest
from kalshi_csv import KalshiCSV
def test_parse_returns_self(sample_csv):
kalshi = KalshiCSV(sample_csv)
result = kalshi.parse()
assert result is kalshi
def test_trade_count(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert kalshi.summary["trade_count"] == 3
def test_total_fees(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert abs(kalshi.summary["total_fees"] - 0.07) < 1e-6
def test_total_pnl_without_fees(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert abs(kalshi.summary["total_pnl_without_fees"] - (-0.20)) < 1e-6
def test_total_pnl_with_fees(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert abs(kalshi.summary["total_pnl_with_fees"] - (-0.27)) < 1e-6
def test_total_tax_basis(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert abs(kalshi.summary["total_tax_basis"] - 1.64) < 1e-6
def test_total_tax_proceeds(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert abs(kalshi.summary["total_tax_proceeds"] - 1.37) < 1e-6
def test_trades_list_length(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
assert len(kalshi.trades) == 3
def test_first_trade_data(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
trade = kalshi.trades[0]
assert trade["ticker"] == "TESTMARKET-WIN"
assert trade["side"] == "YES"
assert trade["qty"] == 1.0
assert trade["entry"] == 0.50
assert trade["exit"] == 1.00
assert abs(trade["pnl_no_fees"] - 0.50) < 1e-6
assert abs(trade["pnl_with_fees"] - 0.47) < 1e-6
def test_irs_summary(sample_csv):
kalshi = KalshiCSV(sample_csv)
kalshi.parse()
irs = kalshi.irs_summary()
assert irs["box"] == "C"
assert irs["description"] == "Kalshi Event Contracts (Aggregate Summary)"
assert abs(irs["gross_proceeds"] - 1.37) < 1e-6
assert abs(irs["cost_basis"] - 1.64) < 1e-6
assert abs(irs["gain_or_loss"] - (-0.27)) < 1e-6
def test_file_not_found():
kalshi = KalshiCSV("/nonexistent/path.csv")
with pytest.raises(FileNotFoundError):
kalshi.parse()