feat(realestate): 매물 DB 4테이블(listings/market_deals/matches/criteria)+헬퍼
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqCYBhvTcdeCTUDX3RhWx9
This commit is contained in:
40
realestate-lab/tests/test_listing_db.py
Normal file
40
realestate-lab/tests/test_listing_db.py
Normal file
@@ -0,0 +1,40 @@
|
||||
def test_listing_criteria_seed_and_update():
|
||||
from app import db
|
||||
c = db.get_listing_criteria()
|
||||
assert c["id"] == 1 and "신대방동" in c["dongs"] and c["max_deposit"] == 32000
|
||||
db.update_listing_criteria({"max_deposit": 30000, "equity": 15000})
|
||||
assert db.get_listing_criteria()["max_deposit"] == 30000
|
||||
assert db.get_listing_criteria()["equity"] == 15000
|
||||
|
||||
def test_upsert_listing_idempotent_and_is_new():
|
||||
from app import db
|
||||
row = {"article_no": "A1", "source": "naver", "deal_type": "전세", "deposit": 29000,
|
||||
"area_exclusive": 42.0, "complex_name": "OO", "dong": "신대방동", "dong_code": "11590"}
|
||||
_, is_new = db.upsert_listing(row)
|
||||
assert is_new is True
|
||||
_, is_new2 = db.upsert_listing({**row, "deposit": 28000})
|
||||
assert is_new2 is False
|
||||
ls = db.get_listings()
|
||||
assert len(ls) == 1 and ls[0]["deposit"] == 28000
|
||||
|
||||
def test_market_deals_dedup_and_query():
|
||||
from app import db
|
||||
base = {"house_type": "아파트", "dong_code": "11590", "dong": "신대방동",
|
||||
"complex_name": "OO", "area": 42.0, "deal_type": "전세",
|
||||
"deposit": 43000, "sale_amount": None, "deal_ym": "202605", "floor": "5", "source": "molit"}
|
||||
db.upsert_market_deal(base)
|
||||
db.upsert_market_deal(base) # 동일 → dedup
|
||||
deals = db.get_market_deals_for("11590", "OO", 42.0, "전세", months=120)
|
||||
assert len(deals) == 1
|
||||
|
||||
def test_unnotified_listing_match_and_mark():
|
||||
from app import db
|
||||
lid, _ = db.upsert_listing({"article_no": "A2", "source": "naver", "deal_type": "전세",
|
||||
"deposit": 29000, "area_exclusive": 42.0, "dong": "신대방동"})
|
||||
db.upsert_listing_match({"listing_id": lid[0] if isinstance(lid, tuple) else lid["id"],
|
||||
"category": "임차", "passed": 1, "match_score": 90,
|
||||
"safety_tier": "안전", "sample_size": 7, "reasons": ["ok"], "is_new": 1})
|
||||
un = db.get_unnotified_listing_matches()
|
||||
assert len(un) == 1
|
||||
db.mark_listings_notified([un[0]["id"]])
|
||||
assert db.get_unnotified_listing_matches() == []
|
||||
Reference in New Issue
Block a user