Release beta 2.0.4.1023
This commit is contained in:
+14
-13
@@ -40,6 +40,7 @@ class Release061Tests(unittest.TestCase):
|
||||
|
||||
def test_aliases_are_corresponding_and_case_insensitive(self):
|
||||
pairs = [("上下文", "Context"), ("摩拉", "wallet"), ("抽奖", "draw"),
|
||||
("许愿池", "draw"), ("许愿", "draw"),
|
||||
("买彩票", "lottery"), ("21点", "blackjack"),
|
||||
("人物列表", "people"), ("人物", "person"), ("游戏帮助", "games")]
|
||||
for chinese, english in pairs:
|
||||
@@ -84,46 +85,46 @@ class Release061Tests(unittest.TestCase):
|
||||
def test_initial_funds_aliases_groups_and_replay(self):
|
||||
self.assertIn("摩拉 1000", self.command("/wallet", event_id="wallet-1"))
|
||||
with mock.patch.object(self.local.players.rng, "randrange", return_value=99):
|
||||
first = self.command("/draw 10", event_id="draw-1")
|
||||
replay = self.command("/draw 10", sender="a1", event_id="draw-1")
|
||||
first = self.command("/draw 1000", event_id="draw-1")
|
||||
replay = self.command("/draw 1000", sender="a1", event_id="draw-1")
|
||||
self.assertEqual(first, replay)
|
||||
self.assertEqual(self.state("a1")["balance"], 990)
|
||||
self.assertIn("许愿池", first)
|
||||
self.assertEqual(self.state("a1")["balance"], 0)
|
||||
self.assertIn("摩拉 1000", self.command("/wallet", sender="Bob"))
|
||||
self.assertIn("摩拉 1000", self.command("/wallet", group="group-b"))
|
||||
self.engine.ledger.connection.close()
|
||||
self.engine = MODULE.EdgeApplication(config(self.root))
|
||||
self.local = self.engine.local
|
||||
self.assertIn("摩拉 990", self.command("/wallet", event_id="restart"))
|
||||
self.assertIn("摩拉 0", self.command("/wallet", event_id="restart"))
|
||||
|
||||
def test_concurrent_replay_debits_once_and_rolls_back_failure(self):
|
||||
replies = []
|
||||
with mock.patch.object(self.local.players.rng, "randrange", return_value=99):
|
||||
threads = [threading.Thread(target=lambda: replies.append(
|
||||
self.command("/draw 100", event_id="concurrent"))) for _ in range(8)]
|
||||
self.command("/draw 1000", event_id="concurrent"))) for _ in range(8)]
|
||||
for thread in threads:
|
||||
thread.start()
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
self.assertEqual(len(replies), 8)
|
||||
self.assertEqual(len(set(replies)), 1)
|
||||
self.assertEqual(self.state()["balance"], 900)
|
||||
self.assertEqual(self.state()["balance"], 0)
|
||||
def broken(state):
|
||||
state["balance"] = -1
|
||||
return "bad"
|
||||
with self.assertRaises(MODULE.LocalCommandError):
|
||||
self.engine.ledger.apply_player_action("group-a", "Alice", "broken", "test", broken)
|
||||
self.assertEqual(self.state()["balance"], 900)
|
||||
self.assertEqual(self.state()["balance"], 0)
|
||||
with self.assertRaises(MODULE.LocalCommandError):
|
||||
self.command("/draw 100", sender="Bob", event_id="concurrent")
|
||||
self.command("/draw 1000", sender="Bob", event_id="concurrent")
|
||||
|
||||
def test_invalid_bets_insufficient_funds_and_lottery(self):
|
||||
for question in ("/draw -1", "/draw 0", "/draw 101", "/lottery xyz",
|
||||
"/blackjack start -1", "/blackjack hit 10"):
|
||||
self.assertRegex(self.command(question), "用法|下注")
|
||||
self.assertRegex(self.command(question), "用法|投入|下注")
|
||||
with mock.patch.object(self.local.players.rng, "randrange", return_value=99):
|
||||
for _ in range(10):
|
||||
self.command("/draw 100")
|
||||
self.assertIn("摩拉不足", self.command("/draw 2"))
|
||||
self.command("/draw 1000")
|
||||
self.assertIn("摩拉不足", self.command("/draw 1000"))
|
||||
self.assertEqual(self.state()["balance"], 0)
|
||||
|
||||
def test_blackjack_is_private_persistent_and_settles_exactly_once(self):
|
||||
@@ -136,7 +137,7 @@ class Release061Tests(unittest.TestCase):
|
||||
self.assertIn("暗牌", start)
|
||||
self.assertEqual(self.state()["balance"], 950)
|
||||
self.assertIn("没有进行中", self.command("/blackjack status", sender="Bob"))
|
||||
self.assertIn("已有一局", self.command("/draw"))
|
||||
self.assertIn("已有一局", self.command("/draw 1000"))
|
||||
self.engine.ledger.connection.close()
|
||||
self.engine = MODULE.EdgeApplication(config(self.root))
|
||||
self.local = self.engine.local
|
||||
|
||||
Reference in New Issue
Block a user