Release beta 1.1.0 scan and duplicate fixes
This commit is contained in:
@@ -698,6 +698,42 @@ class LedgerAndApplicationTests(unittest.TestCase):
|
||||
).fetchone()[0]
|
||||
self.assertEqual(count, 1)
|
||||
|
||||
def test_resource_mutation_semantic_duplicate_uses_longer_window(self):
|
||||
first = self.application.accept(
|
||||
{
|
||||
**event("event-1", "@JWeBot /原石祈愿"),
|
||||
"source": "rapidocr-local",
|
||||
}
|
||||
)
|
||||
old_timestamp = (
|
||||
MODULE.datetime.now(MODULE.timezone.utc)
|
||||
- MODULE.timedelta(seconds=30)
|
||||
).isoformat(timespec="milliseconds")
|
||||
with self.application.ledger.lock, self.application.ledger.connection:
|
||||
self.application.ledger.connection.execute(
|
||||
"""
|
||||
UPDATE events
|
||||
SET created_at = ?, updated_at = ?
|
||||
WHERE event_id = ?
|
||||
""",
|
||||
(old_timestamp, old_timestamp, "event-1"),
|
||||
)
|
||||
duplicate = self.application.accept(
|
||||
{
|
||||
**event("event-2", "@JWeBot /原石祈愿"),
|
||||
"source": "rapidocr-local",
|
||||
}
|
||||
)
|
||||
|
||||
self.assertEqual(first["status"], "reply")
|
||||
self.assertEqual(duplicate["status"], "ignored")
|
||||
self.assertTrue(duplicate["duplicate"])
|
||||
with self.application.ledger.lock:
|
||||
count = self.application.ledger.connection.execute(
|
||||
"SELECT COUNT(*) FROM events"
|
||||
).fetchone()[0]
|
||||
self.assertEqual(count, 1)
|
||||
|
||||
def test_failed_fast_ack_never_delivers_the_generated_reply(self):
|
||||
self.application.deepseek.complete = mock.Mock(return_value="最终回复喵")
|
||||
self.application.deliver = mock.Mock()
|
||||
@@ -888,9 +924,9 @@ class LedgerAndApplicationTests(unittest.TestCase):
|
||||
self.assertEqual(version["route"], "local")
|
||||
self.assertIn("JWeBot 版本", version["text"])
|
||||
self.assertIn("kernel", version["text"])
|
||||
self.assertIn("最新版本:beta 1.0.5.1016", version["text"])
|
||||
self.assertIn("更新时间:2026-10-16 16:30:44", version["text"])
|
||||
self.assertIn("更新摘要:新增原石系统", version["text"])
|
||||
self.assertIn("最新版本:beta 1.1.0.1016", version["text"])
|
||||
self.assertIn("更新时间:2026-10-16 17:04:25", version["text"])
|
||||
self.assertIn("更新摘要:修复 OCR 偶发重复识别", version["text"])
|
||||
self.assertEqual(debug["route"], "local")
|
||||
self.assertIn("调试埋点", debug["text"])
|
||||
self.assertEqual(balance["route"], "local")
|
||||
@@ -1155,6 +1191,12 @@ class LedgerAndApplicationTests(unittest.TestCase):
|
||||
self.assertEqual(response["route"], "local")
|
||||
self.assertIn("北京时间今日扫码排行", response["text"])
|
||||
self.assertIn("bob 1 次", response["text"])
|
||||
self.assertIn("alice 0 次", response["text"])
|
||||
self.assertIn("carol 0 次", response["text"])
|
||||
self.assertIn("下一小时扫码权重:", response["text"])
|
||||
self.assertIn("alice 1", response["text"])
|
||||
self.assertIn("bob 1", response["text"])
|
||||
self.assertIn("carol 1", response["text"])
|
||||
|
||||
def test_repeat_ranking_tracks_origin_and_later_repeats_by_display_id(self):
|
||||
ledger = self.application.ledger
|
||||
|
||||
@@ -270,11 +270,17 @@ class Release063GameTests(unittest.TestCase):
|
||||
sender="Bob",
|
||||
event_id="wallet-after-transfer-b",
|
||||
)
|
||||
self.assertIn("alice:当前摩拉 750;原石 0 个;无贷款;", alice_wallet)
|
||||
self.assertIn(
|
||||
"alice:当前摩拉 750;原石 0 个;扫码概率券 0 张;无贷款;",
|
||||
alice_wallet,
|
||||
)
|
||||
self.assertIn("最近10次账户变动:", alice_wallet)
|
||||
self.assertIn("-250:转账给 bob", alice_wallet)
|
||||
self.assertIn("+1000:首次初始化", alice_wallet)
|
||||
self.assertIn("bob:当前摩拉 1250;原石 0 个;无贷款;", bob_wallet)
|
||||
self.assertIn(
|
||||
"bob:当前摩拉 1250;原石 0 个;扫码概率券 0 张;无贷款;",
|
||||
bob_wallet,
|
||||
)
|
||||
self.assertIn("+250:转账 来自 alice", bob_wallet)
|
||||
|
||||
def test_transfer_rejects_invalid_self_and_insufficient_cases(self):
|
||||
|
||||
@@ -130,6 +130,9 @@ class Release105PrimogemTests(unittest.TestCase):
|
||||
boost_targets = self.engine.ledger.active_scan_boost_targets("group-a")
|
||||
bob_key = self.engine.ledger.resolve_person("group-a", "Bob")["person_key"]
|
||||
self.assertIn(bob_key, boost_targets)
|
||||
ranking = self.command("/扫码榜", event_id="scan-ranking-after-boost")
|
||||
self.assertIn("下一小时扫码权重:", ranking)
|
||||
self.assertIn("bob 5", ranking)
|
||||
|
||||
speech = self.command("/Taffy发话 今天也要加班吗")
|
||||
self.assertEqual(speech, "Taffy:今天也要加班吗喵")
|
||||
|
||||
@@ -20,7 +20,7 @@ SPEC.loader.exec_module(MODULE)
|
||||
|
||||
|
||||
class ReleaseUpdateTests(unittest.TestCase):
|
||||
release = "beta 1.0.5.1016"
|
||||
release = "beta 1.1.0.1016"
|
||||
|
||||
def setUp(self):
|
||||
self.temporary = tempfile.TemporaryDirectory()
|
||||
@@ -114,8 +114,14 @@ class ReleaseUpdateTests(unittest.TestCase):
|
||||
self.assertIn("更新补偿:摩拉 x200,原石 x1", announcement)
|
||||
self.assertNotIn("第二条", announcement)
|
||||
|
||||
def test_policy_release_announces_primogem(self):
|
||||
release = "beta 1.0.5.1016"
|
||||
self.assertEqual(MODULE.primogem_compensation_amount(release), 1)
|
||||
announcement = MODULE.build_announcement(release, "原石系统上线。")
|
||||
self.assertIn("更新补偿:摩拉 x200,原石 x1", announcement)
|
||||
|
||||
def test_patch_release_without_policy_does_not_announce_primogem(self):
|
||||
release = "beta 1.0.6.1016"
|
||||
release = "beta 1.1.1.1016"
|
||||
self.assertEqual(MODULE.primogem_compensation_amount(release), 0)
|
||||
announcement = MODULE.build_announcement(release, "普通小版本更新。")
|
||||
self.assertIn("更新补偿:摩拉 x200", announcement)
|
||||
|
||||
Reference in New Issue
Block a user