mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
import sys
|
|
import os
|
|
import asyncio
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'tools'))
|
|
|
|
from property_tracker import add_property, get_properties, analyze_equity_options
|
|
|
|
os.environ["ENABLE_REAL_ESTATE"] = "true"
|
|
|
|
|
|
def _add(address, purchase_price, current_value, mortgage_balance):
|
|
"""Helper: run async add_property and return the property dict."""
|
|
result = asyncio.run(add_property(
|
|
address=address,
|
|
purchase_price=purchase_price,
|
|
current_value=current_value,
|
|
mortgage_balance=mortgage_balance,
|
|
))
|
|
return result["result"]["property"]
|
|
|
|
|
|
def test_equity_three_options_returned():
|
|
prop = _add(
|
|
address="123 Equity Test St Austin TX",
|
|
purchase_price=400000,
|
|
current_value=520000,
|
|
mortgage_balance=380000,
|
|
)
|
|
result = analyze_equity_options(prop["id"])
|
|
assert "options" in result
|
|
assert "leave_untouched" in result["options"]
|
|
assert "cash_out_invest" in result["options"]
|
|
assert "rental_property" in result["options"]
|
|
assert result["current_equity"] == 140000
|
|
assert result["accessible_equity"] == 112000
|
|
|
|
|
|
def test_equity_math_correct():
|
|
prop = _add("Math Test Property", 300000, 450000, 200000)
|
|
result = analyze_equity_options(prop["id"])
|
|
assert result["current_equity"] == 250000
|
|
assert result["accessible_equity"] == 200000
|
|
|
|
|
|
def test_equity_recommendation_exists():
|
|
prop = _add("Rec Test", 350000, 480000, 320000)
|
|
result = analyze_equity_options(prop["id"])
|
|
assert "recommendation" in result
|
|
assert len(result["recommendation"]) > 20
|
|
assert "disclaimer" in result
|
|
|
|
|
|
def test_equity_bad_property_id():
|
|
result = analyze_equity_options("nonexistent-id-99999")
|
|
assert result is not None
|
|
assert "error" in result
|
|
|