Add CI and shadow calibration reporting

This commit is contained in:
2569718930@qq.com
2026-03-20 20:59:30 +08:00
parent 25ab512371
commit 1c84893bed
39 changed files with 149223 additions and 3277 deletions
+12 -21
View File
@@ -2,15 +2,6 @@ from types import SimpleNamespace
from unittest.mock import Mock
from src.bot.command_guard import CommandGuard
from src.bot.services.entitlement_service import BotEntitlementService
class _FakeDB:
def __init__(self, user):
self._user = user
def get_user(self, _user_id):
return self._user
def _message():
@@ -20,11 +11,13 @@ def _message():
)
def test_guard_blocks_non_premium_when_entitlement_enabled():
fake_bot = SimpleNamespace(reply_to=Mock())
def test_guard_blocks_non_member_before_points_charge():
fake_bot = SimpleNamespace(
reply_to=Mock(),
get_chat_member=Mock(return_value=SimpleNamespace(status="left")),
)
io_layer = SimpleNamespace(bot=fake_bot, ensure_query_points=Mock(return_value=True))
entitlement = BotEntitlementService(db=_FakeDB(user=None), enabled=True)
guard = CommandGuard(io_layer=io_layer, entitlement_service=entitlement)
guard = CommandGuard(io_layer=io_layer, group_chat_id="-100123")
ok = guard.ensure_access_and_points(_message(), 1, "/city")
@@ -33,18 +26,16 @@ def test_guard_blocks_non_premium_when_entitlement_enabled():
assert fake_bot.reply_to.call_count == 1
def test_guard_allows_premium_then_charges_points():
fake_bot = SimpleNamespace(reply_to=Mock())
io_layer = SimpleNamespace(bot=fake_bot, ensure_query_points=Mock(return_value=True))
entitlement = BotEntitlementService(
db=_FakeDB(user={"is_web_premium": 1, "is_group_premium": 0}),
enabled=True,
def test_guard_allows_member_then_charges_points():
fake_bot = SimpleNamespace(
reply_to=Mock(),
get_chat_member=Mock(return_value=SimpleNamespace(status="member")),
)
guard = CommandGuard(io_layer=io_layer, entitlement_service=entitlement)
io_layer = SimpleNamespace(bot=fake_bot, ensure_query_points=Mock(return_value=True))
guard = CommandGuard(io_layer=io_layer, group_chat_id="-100123")
ok = guard.ensure_access_and_points(_message(), 1, "/city")
assert ok is True
assert io_layer.ensure_query_points.call_count == 1
assert fake_bot.reply_to.call_count == 0