Work orders: crafting orders claimed by one crafter, open materials requests, escrow, refunds
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
89fd9b3c40
commit
d03f0035eb
7 changed files with 538 additions and 8 deletions
|
|
@ -1518,3 +1518,65 @@ class CombatReworkMigrationTest(unittest.TestCase):
|
|||
def test_homesteaders_tailor(self):
|
||||
self.assertIn("tailoring", game.CLASSES["homesteader"]["fast"])
|
||||
self.assertIn("tailoring", game.CLASSES["homesteader"]["craft"])
|
||||
|
||||
|
||||
class WorkOrderTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.world = world_with(("mike", "ranger"), ("fred", "miner"), ("dave", "builder"))
|
||||
self.mike, self.fred, self.dave = (self.world["players"][uid] for uid in ("mike", "fred", "dave"))
|
||||
self.fred["xp"]["smithing"] = game.XP_TABLE[25]
|
||||
self.dave["xp"]["smithing"] = game.XP_TABLE[25]
|
||||
self.world["city"]["buildings"]["smithy"]["level"] = 1
|
||||
|
||||
def post_hammer(self):
|
||||
self.mike["gold"] = 200
|
||||
self.mike["bank"] = {"iron_bar": 3, "clay_core": 3}
|
||||
return game.post_order(self.world, self.mike, "craft", "iron_warhammer", 1, ["iron_bar", "clay_core"], 140, T0)
|
||||
|
||||
def test_posting_holds_the_reagents_and_reward(self):
|
||||
self.assertIsNone(self.post_hammer())
|
||||
order = self.world["orders"][0]
|
||||
self.assertEqual(order["provided"], {"iron_bar": 3, "clay_core": 3})
|
||||
self.assertEqual(self.mike["bank"], {})
|
||||
self.assertEqual(self.mike["gold"], 60)
|
||||
|
||||
def test_a_claimed_order_is_crafted_and_sent_to_the_requester(self):
|
||||
self.post_hammer()
|
||||
order = self.world["orders"][0]
|
||||
self.fred["bank"] = {"oak_plank": 1}
|
||||
self.assertIsNone(game.work_order(self.world, self.fred, order["id"], T0))
|
||||
self.assertEqual(game.claim_order(self.world, self.dave, order["id"]), "Someone else has it")
|
||||
game.process_player(self.world, self.fred, T0 + 600, random.Random(1))
|
||||
self.assertEqual(self.mike["bank"].get("iron_warhammer"), 1)
|
||||
self.assertEqual(self.fred["gold"], 140)
|
||||
self.assertEqual(order["status"], "done")
|
||||
self.assertNotIn("oak_plank", self.fred["bank"]) # the crafter brings what wasn't provided
|
||||
self.assertIsNone(self.fred["action"])
|
||||
|
||||
def test_cancelling_refunds_what_is_left(self):
|
||||
self.post_hammer()
|
||||
order = self.world["orders"][0]
|
||||
self.assertEqual(game.claim_order(self.world, self.mike, order["id"]), "That's your own order")
|
||||
self.assertIsNone(game.cancel_order(self.world, self.mike, order["id"], T0))
|
||||
self.assertEqual(self.mike["bank"], {"iron_bar": 3, "clay_core": 3})
|
||||
self.assertEqual(self.mike["gold"], 200)
|
||||
|
||||
def test_materials_requests_are_open_and_pay_per_item(self):
|
||||
self.mike["gold"] = 400
|
||||
self.assertIsNone(game.post_order(self.world, self.mike, "gather", "oak_logs", 200, None, 2, T0))
|
||||
order = self.world["orders"][0]
|
||||
self.fred["bank"] = {"oak_logs": 40}
|
||||
self.dave["bank"] = {"oak_logs": 500}
|
||||
self.assertIsNone(game.deliver_order(self.world, self.fred, order["id"], T0))
|
||||
self.assertIsNone(game.deliver_order(self.world, self.dave, order["id"], T0))
|
||||
self.assertEqual(self.fred["gold"], 80)
|
||||
self.assertEqual(self.dave["gold"], 320)
|
||||
self.assertEqual(self.dave["bank"]["oak_logs"], 340)
|
||||
self.assertEqual(self.mike["bank"]["oak_logs"], 200)
|
||||
self.assertEqual(order["status"], "done")
|
||||
|
||||
def test_orders_expire_and_refund(self):
|
||||
self.post_hammer()
|
||||
game.expire_orders(self.world, T0 + 4 * game.DAY)
|
||||
self.assertEqual(self.mike["gold"], 200)
|
||||
self.assertEqual(self.mike["bank"]["iron_bar"], 3)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue