MultiCurrencyTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. namespace App\Module\Mex\Tests;
  3. use App\Module\Mex\Logic\FundLogic;
  4. use App\Module\Mex\Logic\MexOrderLogic;
  5. use App\Module\Mex\Logic\MexAccountLogic;
  6. use App\Module\Fund\Enums\FUND_CURRENCY_TYPE;
  7. use App\Module\Fund\Enums\FUND_TYPE;
  8. /**
  9. * Mex模块多币种适配测试
  10. *
  11. * 测试多币种功能是否正常工作
  12. */
  13. class MultiCurrencyTest
  14. {
  15. /**
  16. * 测试FundLogic的币种映射功能
  17. */
  18. public static function testFundLogicMapping(): array
  19. {
  20. $results = [];
  21. // 测试默认币种
  22. $defaultCurrency = FundLogic::getDefaultCurrency();
  23. $results['default_currency'] = $defaultCurrency->value;
  24. $results['default_currency_name'] = $defaultCurrency->name;
  25. // 测试钻石币种映射
  26. $diamondMapping = FundLogic::get(FUND_CURRENCY_TYPE::ZUANSHI);
  27. $results['diamond_mapping'] = [
  28. 'available' => $diamondMapping[FundLogic::CAN]->value ?? null,
  29. 'frozen' => $diamondMapping[FundLogic::FREEZE]->value ?? null,
  30. ];
  31. // 测试金币币种映射
  32. $goldMapping = FundLogic::get(FUND_CURRENCY_TYPE::JINBI);
  33. $results['gold_mapping'] = [
  34. 'available' => $goldMapping[FundLogic::CAN]->value ?? null,
  35. 'frozen' => $goldMapping[FundLogic::FREEZE]->value ?? null,
  36. ];
  37. // 测试支持的币种列表
  38. $results['supported_currencies'] = FundLogic::getSupportedCurrencies();
  39. // 测试币种支持检查
  40. $results['currency_support'] = [
  41. 'diamond' => FundLogic::isCurrencySupported(FUND_CURRENCY_TYPE::ZUANSHI),
  42. 'gold' => FundLogic::isCurrencySupported(FUND_CURRENCY_TYPE::JINBI),
  43. ];
  44. return $results;
  45. }
  46. /**
  47. * 测试订单创建的币种支持
  48. */
  49. public static function testOrderCreationWithCurrency(): array
  50. {
  51. $results = [];
  52. // 模拟测试数据
  53. $userId = 1001;
  54. $itemId = 10001;
  55. $quantity = 10;
  56. $price = '2.50000';
  57. try {
  58. // 测试使用钻石币种创建卖出订单
  59. $diamondSellResult = MexOrderLogic::createSellOrder(
  60. $userId,
  61. $itemId,
  62. $quantity,
  63. $price,
  64. FUND_CURRENCY_TYPE::ZUANSHI
  65. );
  66. $results['diamond_sell_order'] = [
  67. 'success' => $diamondSellResult['success'] ?? false,
  68. 'message' => $diamondSellResult['message'] ?? 'Unknown error',
  69. 'order_id' => $diamondSellResult['order_id'] ?? null,
  70. ];
  71. } catch (\Exception $e) {
  72. $results['diamond_sell_order'] = [
  73. 'success' => false,
  74. 'message' => $e->getMessage(),
  75. 'order_id' => null,
  76. ];
  77. }
  78. try {
  79. // 测试使用金币币种创建买入订单
  80. $goldBuyResult = MexOrderLogic::createBuyOrder(
  81. $userId,
  82. $itemId,
  83. $quantity,
  84. $price,
  85. FUND_CURRENCY_TYPE::JINBI
  86. );
  87. $results['gold_buy_order'] = [
  88. 'success' => $goldBuyResult['success'] ?? false,
  89. 'message' => $goldBuyResult['message'] ?? 'Unknown error',
  90. 'order_id' => $goldBuyResult['order_id'] ?? null,
  91. ];
  92. } catch (\Exception $e) {
  93. $results['gold_buy_order'] = [
  94. 'success' => false,
  95. 'message' => $e->getMessage(),
  96. 'order_id' => null,
  97. ];
  98. }
  99. try {
  100. // 测试使用默认币种(钻石)创建订单
  101. $defaultCurrencyResult = MexOrderLogic::createSellOrder(
  102. $userId,
  103. $itemId,
  104. $quantity,
  105. $price
  106. );
  107. $results['default_currency_order'] = [
  108. 'success' => $defaultCurrencyResult['success'] ?? false,
  109. 'message' => $defaultCurrencyResult['message'] ?? 'Unknown error',
  110. 'order_id' => $defaultCurrencyResult['order_id'] ?? null,
  111. ];
  112. } catch (\Exception $e) {
  113. $results['default_currency_order'] = [
  114. 'success' => false,
  115. 'message' => $e->getMessage(),
  116. 'order_id' => null,
  117. ];
  118. }
  119. return $results;
  120. }
  121. /**
  122. * 测试账户余额查询的币种支持
  123. */
  124. public static function testAccountBalanceWithCurrency(): array
  125. {
  126. $results = [];
  127. try {
  128. // 测试钻石币种的仓库余额
  129. $diamondBalance = MexAccountLogic::getWarehouseFundBalance(FUND_CURRENCY_TYPE::ZUANSHI);
  130. $results['diamond_warehouse_balance'] = $diamondBalance;
  131. } catch (\Exception $e) {
  132. $results['diamond_warehouse_balance'] = 'Error: ' . $e->getMessage();
  133. }
  134. try {
  135. // 测试金币币种的仓库余额
  136. $goldBalance = MexAccountLogic::getWarehouseFundBalance(FUND_CURRENCY_TYPE::JINBI);
  137. $results['gold_warehouse_balance'] = $goldBalance;
  138. } catch (\Exception $e) {
  139. $results['gold_warehouse_balance'] = 'Error: ' . $e->getMessage();
  140. }
  141. try {
  142. // 测试默认币种的仓库余额
  143. $defaultBalance = MexAccountLogic::getWarehouseFundBalance();
  144. $results['default_warehouse_balance'] = $defaultBalance;
  145. } catch (\Exception $e) {
  146. $results['default_warehouse_balance'] = 'Error: ' . $e->getMessage();
  147. }
  148. return $results;
  149. }
  150. /**
  151. * 运行所有测试
  152. */
  153. public static function runAllTests(): array
  154. {
  155. return [
  156. 'fund_logic_mapping' => self::testFundLogicMapping(),
  157. 'order_creation' => self::testOrderCreationWithCurrency(),
  158. 'account_balance' => self::testAccountBalanceWithCurrency(),
  159. 'test_time' => date('Y-m-d H:i:s'),
  160. ];
  161. }
  162. }