Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions bitcoin_trading_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,19 @@ def countdown(quiet=False):
if args.no_color:
Colors.disable()

if args.days <= 0:
print(f"{Colors.FAIL}Error: --days must be a positive integer.{Colors.ENDC}")
sys.exit(1)
if args.initial_cash <= 0:
print(f"{Colors.FAIL}Error: --initial-cash must be positive.{Colors.ENDC}")
sys.exit(1)
if args.initial_price <= 0:
print(f"{Colors.FAIL}Error: --initial-price must be positive.{Colors.ENDC}")
sys.exit(1)
if args.volatility < 0:
print(f"{Colors.FAIL}Error: --volatility must be non-negative.{Colors.ENDC}")
sys.exit(1)

# Simulate prices
prices = simulate_bitcoin_prices(days=args.days, initial_price=args.initial_price, volatility=args.volatility)

Expand Down
49 changes: 49 additions & 0 deletions test_cli.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import subprocess
import pytest
import sys

def run_cli(args):
"""Runs the CLI script with given arguments."""
cmd = [sys.executable, "bitcoin_trading_simulation.py"] + args
result = subprocess.run(
cmd,
capture_output=True,
text=True
)
return result

def test_cli_negative_days():
result = run_cli(["--days", "-5"])
assert result.returncode == 1
assert "Error: --days must be a positive integer." in result.stdout

def test_cli_zero_days():
result = run_cli(["--days", "0"])
assert result.returncode == 1
assert "Error: --days must be a positive integer." in result.stdout

def test_cli_negative_cash():
result = run_cli(["--initial-cash", "-100"])
assert result.returncode == 1
assert "Error: --initial-cash must be positive." in result.stdout

def test_cli_zero_cash():
result = run_cli(["--initial-cash", "0"])
assert result.returncode == 1
assert "Error: --initial-cash must be positive." in result.stdout

def test_cli_negative_price():
result = run_cli(["--initial-price", "-500"])
assert result.returncode == 1
assert "Error: --initial-price must be positive." in result.stdout

def test_cli_negative_volatility():
result = run_cli(["--volatility", "-0.5"])
assert result.returncode == 1
assert "Error: --volatility must be non-negative." in result.stdout

def test_cli_valid_run():
# Run with a short duration and quiet mode for speed
result = run_cli(["--days", "5", "--quiet", "--no-color"])
assert result.returncode == 0
assert "Final Portfolio Performance" in result.stdout