feat: 后端全量更新 - 含所有本次需求

- Contract.php: 返回合约账户余额(balance_contract)
- My.php: 地址管理增加BTC/ETH
- AppContract.php: 一键平仓(closeall)
- AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2)
- site.php: 手续费减半(0.018→0.009)
- agent_permission_setup.sql: 代理权限SQL
- crypto_news_crawler.py: 新闻自动采集脚本
This commit is contained in:
li
2026-03-30 20:16:32 +08:00
commit 1b24994e74
6721 changed files with 1308571 additions and 0 deletions
@@ -0,0 +1,43 @@
<?php
namespace Stichoza\GoogleTranslate\Tests;
use PHPUnit\Framework\TestCase;
use Stichoza\GoogleTranslate\GoogleTranslate;
class LanguageDetectionTest extends TestCase
{
public $tr;
public function setUp()
{
$this->tr = new GoogleTranslate();
}
public function testSingleWord()
{
$this->tr->translate('გამარჯობა');
$this->assertEquals($this->tr->getLastDetectedSource(), 'ka');
$this->tr->translate('Cześć');
$this->assertEquals($this->tr->getLastDetectedSource(), 'pl');
}
public function testSingleSentence()
{
$this->tr->translate('იყო არაბეთს როსტევან');
$this->assertEquals($this->tr->getLastDetectedSource(), 'ka');
$this->tr->translate('Путин хуйло');
$this->assertEquals($this->tr->getLastDetectedSource(), 'ru');
}
public function testMultipleSentence()
{
$this->tr->translate('ჩემი ხატია სამშობლო. სახატე - მთელი ქვეყანა. განათებული მთა-ბარი.');
$this->assertEquals($this->tr->getLastDetectedSource(), 'ka');
$this->tr->translate('Ще не вмерла Україна, И слава, и воля! Ще намъ, браття-молодці, Усміхнеться доля!');
$this->assertEquals($this->tr->getLastDetectedSource(), 'uk');
}
}
@@ -0,0 +1,47 @@
<?php
namespace Stichoza\GoogleTranslate\Tests;
use PHPUnit\Framework\TestCase;
use Stichoza\GoogleTranslate\GoogleTranslate;
class TranslationTest extends TestCase
{
public $tr;
public function setUp()
{
$this->tr = new GoogleTranslate();
}
public function testTranslationEquality()
{
try {
$resultOne = GoogleTranslate::trans('Hello', 'ka', 'en');
} catch (\ErrorException $e) {
$resultOne = null;
}
$resultTwo = $this->tr->setSource('en')->setTarget('ka')->translate('Hello');
$this->assertEquals($resultOne, $resultTwo, 'გამარჯობა');
}
public function testUTF16Translation()
{
try {
$resultOne = GoogleTranslate::trans('yes 👍🏽', 'de', 'en');
} catch (\ErrorException $e) {
$resultOne = null;
}
$resultTwo = $this->tr->setSource('en')->setTarget('de')->translate('yes 👍🏽');
$this->assertEquals($resultOne, $resultTwo, 'ja 👍🏽');
}
public function testRawResponse()
{
$rawResult = $this->tr->getResponse('cat');
$this->assertTrue(is_array($rawResult), 'Method getResponse() should return an array.');
}
}
@@ -0,0 +1,69 @@
<?php
namespace Stichoza\GoogleTranslate\Tests;
use ReflectionClass;
use PHPUnit\Framework\TestCase;
use Stichoza\GoogleTranslate\GoogleTranslate;
class UtilityTest extends TestCase
{
public $tr;
public $method;
public function setUp()
{
$this->tr = new GoogleTranslate();
$reflection = new ReflectionClass(get_class($this->tr));
$this->method = $reflection->getMethod('isValidLocale');
$this->method->setAccessible(true);
}
public function testIsValidLocale()
{
$m = $this->method;
$t = $this->tr;
$booleanAssertions = [
'ab' => true,
'ab-CD' => true,
'ab-CDE' => false,
'abc-DE' => false,
'abc-DEF' => false,
'abc' => false,
'ab-' => false,
'a' => false,
];
foreach ($booleanAssertions as $key => $value) {
$this->assertEquals($m->invokeArgs($t, [$key]), $value);
}
}
public function testSetOptions()
{
$res = fopen('php://memory', 'r+');
$this->tr->setOptions([
'debug' => $res,
'headers' => [
'User-Agent' => 'Foo',
],
])->translate('hello');
rewind($res);
$output = str_replace("\r", '', stream_get_contents($res));
$this->assertContains('User-Agent: Foo', $output);
GoogleTranslate::trans('world', 'en', null, [
'debug' => $res,
'headers' => [
'User-Agent' => 'Bar',
],
]);
rewind($res);
$output = str_replace("\r", '', stream_get_contents($res));
$this->assertContains('User-Agent: Bar', $output);
fclose($res);
}
}