updated quality for ore
This commit is contained in:
@@ -7,6 +7,7 @@ PASSWORD = "correct horse battery staple"
|
||||
CARROCK = "ANVL_Carrack"
|
||||
RIFLE = "BEHR_Rifle_Ballistic_01"
|
||||
IRON_ORE = "Carryable_TBO_FL_1SCU_Commodity_Metal_Ore_Iron"
|
||||
CONSTRUCTION = "Carryable_TBO_FL_1SCU_Commodity_ProcessedGoods_ConstructionMaterials"
|
||||
|
||||
|
||||
def authed_client(username: str) -> TestClient:
|
||||
@@ -18,11 +19,17 @@ def authed_client(username: str) -> TestClient:
|
||||
return client
|
||||
|
||||
|
||||
def add(client: TestClient, class_name: str, quantity: int = 1, notes: str = ""):
|
||||
resp = client.post(
|
||||
"/api/v1/me/inventory",
|
||||
json={"class_name": class_name, "quantity": quantity, "notes": notes},
|
||||
)
|
||||
def add(
|
||||
client: TestClient,
|
||||
class_name: str,
|
||||
quantity: int = 1,
|
||||
notes: str = "",
|
||||
quality: int | None = None,
|
||||
):
|
||||
payload = {"class_name": class_name, "quantity": quantity, "notes": notes}
|
||||
if quality is not None:
|
||||
payload["quality"] = quality
|
||||
resp = client.post("/api/v1/me/inventory", json=payload)
|
||||
assert resp.status_code in (200, 201), resp.text
|
||||
return resp
|
||||
|
||||
@@ -128,3 +135,22 @@ def test_commodity_offers_are_listed_with_owner():
|
||||
assert item["category"] == "commodities"
|
||||
assert item["quantity"] == 12
|
||||
assert item["username"] == "alice"
|
||||
|
||||
|
||||
def test_commodity_quality_is_listed_publicly():
|
||||
alice = authed_client("alice")
|
||||
offer(alice, IRON_ORE, quantity=12)
|
||||
add(alice, IRON_ORE, quality=875)
|
||||
|
||||
item = public_items()["items"][0]
|
||||
assert item["quality"] == 875
|
||||
assert item["quality_applicable"] is True
|
||||
|
||||
|
||||
def test_non_quality_commodity_is_listed_without_quality():
|
||||
alice = authed_client("alice")
|
||||
offer(alice, CONSTRUCTION)
|
||||
|
||||
item = public_items()["items"][0]
|
||||
assert item["quality"] is None
|
||||
assert item["quality_applicable"] is False
|
||||
|
||||
@@ -7,6 +7,8 @@ PASSWORD = "correct horse battery staple"
|
||||
CARROCK = "ANVL_Carrack"
|
||||
RIFLE = "BEHR_Rifle_Ballistic_01"
|
||||
IRON_ORE = "Carryable_TBO_FL_1SCU_Commodity_Metal_Ore_Iron"
|
||||
IRON = "Carryable_TBO_FL_1SCU_Commodity_Metal_Iron"
|
||||
CONSTRUCTION = "Carryable_TBO_FL_1SCU_Commodity_ProcessedGoods_ConstructionMaterials"
|
||||
|
||||
|
||||
def authed_client(username: str = "alice") -> TestClient:
|
||||
@@ -18,11 +20,17 @@ def authed_client(username: str = "alice") -> TestClient:
|
||||
return client
|
||||
|
||||
|
||||
def add(client: TestClient, class_name: str, quantity: int = 1, notes: str = ""):
|
||||
return client.post(
|
||||
"/api/v1/me/inventory",
|
||||
json={"class_name": class_name, "quantity": quantity, "notes": notes},
|
||||
)
|
||||
def add(
|
||||
client: TestClient,
|
||||
class_name: str,
|
||||
quantity: int = 1,
|
||||
notes: str = "",
|
||||
quality: int | None = None,
|
||||
):
|
||||
payload = {"class_name": class_name, "quantity": quantity, "notes": notes}
|
||||
if quality is not None:
|
||||
payload["quality"] = quality
|
||||
return client.post("/api/v1/me/inventory", json=payload)
|
||||
|
||||
|
||||
def test_new_account_starts_with_empty_inventory():
|
||||
@@ -264,3 +272,85 @@ def test_add_commodity_uses_catalog_name_and_quantity():
|
||||
assert entry["quantity"] == 12
|
||||
assert entry["available"] is True
|
||||
assert entry["visibility"] == "private"
|
||||
|
||||
|
||||
def test_catalog_marks_only_mineable_commodities_as_quality_applicable():
|
||||
client = TestClient(app)
|
||||
items = client.get(
|
||||
"/api/v1/items", params={"category": "commodities", "page_size": 100}
|
||||
).json()["items"]
|
||||
flags = {item["class_name"]: item["quality_applicable"] for item in items}
|
||||
assert flags[IRON] is True
|
||||
assert flags[IRON_ORE] is True
|
||||
assert flags[CONSTRUCTION] is False
|
||||
assert flags["Carryable_TBO_FL_1SCU_Commodity_Metal_RMC"] is False
|
||||
|
||||
ships = client.get("/api/v1/items", params={"category": "ships"}).json()["items"]
|
||||
assert all(item["quality_applicable"] is False for item in ships)
|
||||
|
||||
|
||||
def test_quality_can_be_set_and_cleared_on_a_quality_commodity():
|
||||
client = authed_client()
|
||||
assert add(client, IRON_ORE).status_code == 201
|
||||
|
||||
resp = client.patch(f"/api/v1/me/inventory/{IRON_ORE}", json={"quality": 750})
|
||||
assert resp.status_code == 200
|
||||
body = resp.json()
|
||||
assert body["quality"] == 750
|
||||
assert body["quality_applicable"] is True
|
||||
|
||||
cleared = client.patch(
|
||||
f"/api/v1/me/inventory/{IRON_ORE}", json={"quality": None}
|
||||
)
|
||||
assert cleared.status_code == 200
|
||||
assert cleared.json()["quality"] is None
|
||||
|
||||
|
||||
def test_add_persists_quality_and_keeps_it_when_quantity_is_incremented():
|
||||
client = authed_client()
|
||||
first = add(client, IRON, quality=900)
|
||||
assert first.status_code == 201
|
||||
assert first.json()["entry"]["quality"] == 900
|
||||
|
||||
second = add(client, IRON, quantity=2)
|
||||
assert second.status_code == 200
|
||||
entry = second.json()["entry"]
|
||||
assert entry["quality"] == 900
|
||||
assert entry["quantity"] == 3
|
||||
|
||||
replaced = add(client, IRON, quality=400)
|
||||
assert replaced.json()["entry"]["quality"] == 400
|
||||
|
||||
|
||||
def test_quality_is_rejected_for_non_mineable_commodities():
|
||||
client = authed_client()
|
||||
assert add(client, CONSTRUCTION).status_code == 201
|
||||
|
||||
resp = client.patch(
|
||||
f"/api/v1/me/inventory/{CONSTRUCTION}", json={"quality": 500}
|
||||
)
|
||||
assert resp.status_code == 422
|
||||
assert "does not apply" in resp.json()["detail"]
|
||||
|
||||
add_resp = add(client, CONSTRUCTION, quality=500)
|
||||
assert add_resp.status_code == 422
|
||||
|
||||
|
||||
def test_quality_is_rejected_for_ships():
|
||||
client = authed_client()
|
||||
assert add(client, CARROCK).status_code == 201
|
||||
resp = client.patch(f"/api/v1/me/inventory/{CARROCK}", json={"quality": 100})
|
||||
assert resp.status_code == 422
|
||||
|
||||
|
||||
def test_quality_range_is_enforced():
|
||||
client = authed_client()
|
||||
assert add(client, IRON_ORE, quality=1).status_code == 201
|
||||
assert add(client, IRON, quality=1000).status_code == 201
|
||||
assert add(client, IRON_ORE, quality=0).status_code == 422
|
||||
assert add(client, IRON_ORE, quality=1001).status_code == 422
|
||||
|
||||
assert add(client, IRON, quantity=1).status_code == 200
|
||||
assert client.patch(
|
||||
f"/api/v1/me/inventory/{IRON}", json={"quality": 1001}
|
||||
).status_code == 422
|
||||
|
||||
Reference in New Issue
Block a user