| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- namespace App\Module\Mex\Tests;
- use App\Module\AppGame\Validations\MatchexchangeAddValidation;
- use App\Module\Mex\Validators\MexOrderValidator;
- use App\Module\Fund\Enums\FUND_CURRENCY_TYPE;
- use App\Module\Mex\Logic\FundLogic;
- use Uraus\Kku\Common\MEX_DIRECTION;
- /**
- * AddHandler多币种资金验证测试
- *
- * 测试修正后的AddHandler资金验证是否正确支持多币种
- */
- class AddHandlerMultiCurrencyTest
- {
- /**
- * 测试FundLogic的默认币种设置
- */
- public static function testDefaultCurrency(): array
- {
- $results = [];
-
- try {
- $defaultCurrency = FundLogic::getDefaultCurrency();
- $results['default_currency'] = [
- 'value' => $defaultCurrency->value,
- 'name' => $defaultCurrency->name,
- 'success' => true
- ];
-
- // 测试默认币种的账户映射
- $availableAccount = FundLogic::getAvailableAccountType($defaultCurrency);
- $frozenAccount = FundLogic::getFrozenAccountType($defaultCurrency);
-
- $results['default_currency_mapping'] = [
- 'available_account' => $availableAccount?->value,
- 'frozen_account' => $frozenAccount?->value,
- 'success' => true
- ];
-
- } catch (\Exception $e) {
- $results['default_currency'] = [
- 'success' => false,
- 'error' => $e->getMessage()
- ];
- }
-
- return $results;
- }
-
- /**
- * 测试MexOrderValidator的币种支持
- */
- public static function testMexOrderValidator(): array
- {
- $results = [];
- try {
- // 模拟验证数据
- $testData = [
- 'user_id' => 1001,
- 'itemId' => 10001,
- 'num' => 10,
- 'price' => 2.5,
- 'currency_type' => FUND_CURRENCY_TYPE::ZUANSHI->value, // 钻石币种
- ];
- // 注意:我们不能直接实例化MexOrderValidator,因为它需要ValidationCore实例
- // 我们只测试相关的逻辑
- $results['validator_creation'] = [
- 'success' => true,
- 'message' => 'MexOrderValidator逻辑测试(无需实例化)'
- ];
- // 测试币种解析逻辑
- $currencyType = FUND_CURRENCY_TYPE::tryFrom($testData['currency_type']);
- $results['currency_parsing'] = [
- 'input_value' => $testData['currency_type'],
- 'parsed_currency' => $currencyType?->name,
- 'success' => $currencyType !== null
- ];
- // 测试账户类型获取逻辑
- if ($currencyType) {
- $availableAccountType = FundLogic::getAvailableAccountType($currencyType);
- $frozenAccountType = FundLogic::getFrozenAccountType($currencyType);
- $results['account_type_mapping'] = [
- 'currency' => $currencyType->name,
- 'available_account' => $availableAccountType?->value,
- 'frozen_account' => $frozenAccountType?->value,
- 'success' => $availableAccountType !== null && $frozenAccountType !== null
- ];
- }
- } catch (\Exception $e) {
- $results['validator_test'] = [
- 'success' => false,
- 'error' => $e->getMessage()
- ];
- }
- return $results;
- }
-
- /**
- * 测试MatchexchangeAddValidation的币种预处理
- */
- public static function testValidationPreprocessing(): array
- {
- $results = [];
-
- try {
- // 模拟protobuf请求数据
- $mockData = [
- 'user_id' => 1001,
- 'itemId' => 10001,
- 'price' => 2.5,
- 'num' => 10,
- 'direction' => 'BUY' // 字符串格式的枚举
- ];
-
- // 创建验证对象(模拟)
- // 注意:这里我们不能直接实例化Validation类,因为它需要特定的上下文
- // 我们只测试相关的逻辑
-
- // 测试direction转换逻辑
- $direction = $mockData['direction'];
- $directionValue = match(strtoupper($direction)) {
- 'SELL' => MEX_DIRECTION::SELL,
- 'BUY' => MEX_DIRECTION::BUY,
- 'DIRECTION_NONE' => MEX_DIRECTION::DIRECTION_NONE,
- default => $direction
- };
-
- $results['direction_conversion'] = [
- 'input' => $direction,
- 'output' => $directionValue,
- 'success' => is_int($directionValue)
- ];
-
- // 测试默认币种添加逻辑
- $defaultCurrency = FundLogic::getDefaultCurrency();
- $results['default_currency_addition'] = [
- 'currency_value' => $defaultCurrency->value,
- 'currency_name' => $defaultCurrency->name,
- 'success' => true
- ];
-
- } catch (\Exception $e) {
- $results['validation_preprocessing'] = [
- 'success' => false,
- 'error' => $e->getMessage()
- ];
- }
-
- return $results;
- }
-
- /**
- * 测试资金验证逻辑的币种适配
- */
- public static function testFundValidationLogic(): array
- {
- $results = [];
-
- try {
- // 测试不同币种的精度处理
- $currencies = [
- FUND_CURRENCY_TYPE::JINBI, // 金币
- FUND_CURRENCY_TYPE::ZUANSHI, // 钻石
- ];
-
- foreach ($currencies as $currency) {
- $precision = $currency->getPrecision();
- $testAmount = 100.5;
- $storageAmount = (int)bcmul($testAmount, bcpow('10', $precision), 0);
- $displayAmount = bcdiv($storageAmount, bcpow('10', $precision), $precision);
-
- $results['currency_precision'][$currency->name] = [
- 'precision' => $precision,
- 'test_amount' => $testAmount,
- 'storage_amount' => $storageAmount,
- 'display_amount' => $displayAmount,
- 'conversion_correct' => bccomp($displayAmount, $testAmount, $precision) === 0
- ];
- }
-
- } catch (\Exception $e) {
- $results['fund_validation_logic'] = [
- 'success' => false,
- 'error' => $e->getMessage()
- ];
- }
-
- return $results;
- }
-
- /**
- * 运行所有测试
- */
- public static function runAllTests(): array
- {
- return [
- 'default_currency' => self::testDefaultCurrency(),
- 'validator_test' => self::testMexOrderValidator(),
- 'validation_preprocessing' => self::testValidationPreprocessing(),
- 'fund_validation_logic' => self::testFundValidationLogic(),
- 'test_time' => date('Y-m-d H:i:s'),
- ];
- }
- }
|