forked from retoor/devplacepy
pdate
This commit is contained in:
@@ -6,7 +6,7 @@ from datetime import datetime, timezone, timedelta
|
||||
import requests
|
||||
|
||||
from devplacepy.database import get_table, refresh_snapshot
|
||||
from devplacepy.services.game import store
|
||||
from devplacepy.services.game import economy, store
|
||||
from tests.conftest import BASE_URL
|
||||
|
||||
JSON = {"Accept": "application/json"}
|
||||
@@ -337,3 +337,91 @@ def test_steal_cooldown_blocks_second_raid(app_server, seeded_db):
|
||||
f"{BASE_URL}/game/farm/{owner}/steal", data={"slot": 0}, headers=JSON
|
||||
)
|
||||
assert second.status_code == 400
|
||||
|
||||
|
||||
def test_prestige_insufficient_coins_returns_400(app_server, seeded_db):
|
||||
session, name = _signup()
|
||||
_reset_farm(name, coins=100)
|
||||
_set_farm(name, xp=economy.xp_threshold(economy.PRESTIGE_MIN_LEVEL))
|
||||
r = session.post(f"{BASE_URL}/game/prestige", headers=JSON)
|
||||
assert r.status_code == 400
|
||||
assert "costs" in r.json()["error"]["message"]
|
||||
|
||||
|
||||
def test_prestige_charges_fee_and_carries_over(app_server, seeded_db):
|
||||
session, name = _signup()
|
||||
_reset_farm(name, coins=100000)
|
||||
_set_farm(name, xp=economy.xp_threshold(economy.PRESTIGE_MIN_LEVEL))
|
||||
fee = economy.refactor_cost(0, 100000)
|
||||
carried = economy.refactor_carryover(100000, fee, 0)
|
||||
r = session.post(f"{BASE_URL}/game/prestige", headers=JSON)
|
||||
assert r.status_code == 200
|
||||
farm = r.json()["farm"]
|
||||
assert farm["prestige"] == 1
|
||||
assert farm["coins"] == economy.STARTING_COINS + carried
|
||||
refresh_snapshot()
|
||||
assert store.treasury_balance() >= fee
|
||||
|
||||
|
||||
def test_state_exposes_refactor_and_grant_fields(app_server, seeded_db):
|
||||
session, name = _signup()
|
||||
_reset_farm(name)
|
||||
r = session.get(f"{BASE_URL}/game/state", headers=JSON)
|
||||
assert r.status_code == 200
|
||||
farm = r.json()["farm"]
|
||||
for key in (
|
||||
"refactor_cost",
|
||||
"refactor_affordable",
|
||||
"refactor_carryover_pct",
|
||||
"refactor_carryover_preview",
|
||||
"grant_available",
|
||||
"grant_amount",
|
||||
"grant_reason",
|
||||
"treasury_balance",
|
||||
):
|
||||
assert key in farm
|
||||
assert farm["refactor_cost"] == economy.refactor_cost(0, farm["coins"])
|
||||
|
||||
|
||||
def test_grant_requires_auth(app_server, seeded_db):
|
||||
r = requests.post(f"{BASE_URL}/game/grant", headers=JSON)
|
||||
assert r.status_code in (401, 303)
|
||||
|
||||
|
||||
def test_grant_claim_flow(app_server, seeded_db):
|
||||
session, name = _signup()
|
||||
_reset_farm(name, coins=100)
|
||||
refresh_snapshot()
|
||||
store.ensure_treasury()
|
||||
get_table("game_treasury").update(
|
||||
{"uid": "treasury-main", "balance": 100000}, ["uid"]
|
||||
)
|
||||
week = store._iso_week(store._now())
|
||||
_set_farm(
|
||||
name,
|
||||
harvests_week=economy.GRANT_MIN_WEEK_HARVESTS,
|
||||
harvests_week_start=week,
|
||||
)
|
||||
r = session.post(f"{BASE_URL}/game/grant", headers=JSON)
|
||||
assert r.status_code == 200
|
||||
assert r.json()["farm"]["coins"] == 100 + economy.GRANT_CAP
|
||||
second = session.post(f"{BASE_URL}/game/grant", headers=JSON)
|
||||
assert second.status_code == 400
|
||||
|
||||
|
||||
def test_grant_ineligible_when_rich_returns_400(app_server, seeded_db):
|
||||
session, name = _signup()
|
||||
_reset_farm(name, coins=economy.GRANT_WEALTH_CEILING + 1)
|
||||
refresh_snapshot()
|
||||
store.ensure_treasury()
|
||||
get_table("game_treasury").update(
|
||||
{"uid": "treasury-main", "balance": 100000}, ["uid"]
|
||||
)
|
||||
week = store._iso_week(store._now())
|
||||
_set_farm(
|
||||
name,
|
||||
harvests_week=economy.GRANT_MIN_WEEK_HARVESTS,
|
||||
harvests_week_start=week,
|
||||
)
|
||||
r = session.post(f"{BASE_URL}/game/grant", headers=JSON)
|
||||
assert r.status_code == 400
|
||||
|
||||
Reference in New Issue
Block a user