| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- namespace App\Module\OpenAPI\Tests;
- use App\Module\OpenAPI\Enums\SCOPE_TYPE;
- use App\Module\OpenAPI\Services\DeveloperAccountService;
- use App\Module\OpenAPI\Handlers\Fund\DiamondRechargeHandler;
- use App\Module\OpenAPI\Handlers\Fund\DiamondWithdrawHandler;
- use App\Module\OpenAPI\Validations\DiamondRechargeValidation;
- use App\Module\OpenAPI\Validations\DiamondWithdrawValidation;
- use App\Module\OpenAPI\Models\OpenApiApp;
- use PHPUnit\Framework\TestCase;
- /**
- * 钻石操作测试类
- *
- * 测试钻石充值和提取功能
- */
- class DiamondOperationTest extends TestCase
- {
- /**
- * 测试权限范围枚举扩展
- */
- public function testScopeTypeExtension()
- {
- // 测试新增的权限范围
- $this->assertTrue(SCOPE_TYPE::FUND_RECHARGE instanceof SCOPE_TYPE);
- $this->assertTrue(SCOPE_TYPE::FUND_WITHDRAW instanceof SCOPE_TYPE);
-
- // 测试权限范围的值
- $this->assertEquals('FUND_RECHARGE', SCOPE_TYPE::FUND_RECHARGE->value);
- $this->assertEquals('FUND_WITHDRAW', SCOPE_TYPE::FUND_WITHDRAW->value);
-
- // 测试权限范围的标签
- $this->assertEquals('钻石充值权限', SCOPE_TYPE::FUND_RECHARGE->getLabel());
- $this->assertEquals('钻石提取权限', SCOPE_TYPE::FUND_WITHDRAW->getLabel());
-
- // 测试权限范围的风险级别
- $this->assertEquals(4, SCOPE_TYPE::FUND_RECHARGE->getRiskLevel());
- $this->assertEquals(4, SCOPE_TYPE::FUND_WITHDRAW->getRiskLevel());
-
- // 测试权限范围的分类
- $this->assertEquals('资金管理', SCOPE_TYPE::FUND_RECHARGE->getCategory());
- $this->assertEquals('资金管理', SCOPE_TYPE::FUND_WITHDRAW->getCategory());
- }
- /**
- * 测试开发者账户服务
- */
- public function testDeveloperAccountService()
- {
- // 测试用户ID生成
- $appId = 123;
- $rechargeUserId = DeveloperAccountService::getRechargeUserId($appId);
- $withdrawUserId = DeveloperAccountService::getWithdrawUserId($appId);
-
- $this->assertEquals(100123, $rechargeUserId);
- $this->assertEquals(200123, $withdrawUserId);
-
- // 测试不同应用ID生成不同的用户ID
- $appId2 = 456;
- $rechargeUserId2 = DeveloperAccountService::getRechargeUserId($appId2);
- $withdrawUserId2 = DeveloperAccountService::getWithdrawUserId($appId2);
-
- $this->assertEquals(100456, $rechargeUserId2);
- $this->assertEquals(200456, $withdrawUserId2);
-
- $this->assertNotEquals($rechargeUserId, $rechargeUserId2);
- $this->assertNotEquals($withdrawUserId, $withdrawUserId2);
- }
- /**
- * 测试钻石充值验证
- */
- public function testDiamondRechargeValidation()
- {
- // 测试有效数据
- $validData = [
- 'user_id' => 12345,
- 'amount' => 100.5,
- 'order_id' => 'ORDER_001',
- 'remark' => '测试充值'
- ];
-
- $validation = new DiamondRechargeValidation($validData);
- // 注意:这里只是测试验证类的创建,实际验证需要数据库连接
- $this->assertInstanceOf(DiamondRechargeValidation::class, $validation);
-
- // 测试无效数据
- $invalidData = [
- 'user_id' => -1,
- 'amount' => -100,
- ];
-
- $validation2 = new DiamondRechargeValidation($invalidData);
- $this->assertInstanceOf(DiamondRechargeValidation::class, $validation2);
- }
- /**
- * 测试钻石提取验证
- */
- public function testDiamondWithdrawValidation()
- {
- // 测试有效数据
- $validData = [
- 'user_id' => 12345,
- 'amount' => 50.25,
- 'order_id' => 'WITHDRAW_001',
- 'remark' => '测试提取'
- ];
-
- $validation = new DiamondWithdrawValidation($validData);
- $this->assertInstanceOf(DiamondWithdrawValidation::class, $validation);
-
- // 测试字段标签
- $labels = $validation->attributeLabels();
- $this->assertEquals('源用户ID', $labels['user_id']);
- $this->assertEquals('提取金额', $labels['amount']);
- }
- /**
- * 测试Handler类的权限要求
- */
- public function testHandlerPermissions()
- {
- // 创建模拟的ScopeService
- $scopeService = $this->createMock(\App\Module\OpenAPI\Services\ScopeService::class);
-
- // 测试充值Handler
- $rechargeHandler = new DiamondRechargeHandler($scopeService);
- $requiredScopes = $rechargeHandler->getRequiredScopes();
- $this->assertContains(SCOPE_TYPE::FUND_RECHARGE, $requiredScopes);
-
- // 测试提取Handler
- $withdrawHandler = new DiamondWithdrawHandler($scopeService);
- $requiredScopes = $withdrawHandler->getRequiredScopes();
- $this->assertContains(SCOPE_TYPE::FUND_WITHDRAW, $requiredScopes);
- }
- /**
- * 测试数据验证规则
- */
- public function testValidationRules()
- {
- $rechargeValidation = new DiamondRechargeValidation([]);
- $rules = $rechargeValidation->rules();
-
- // 检查是否包含必要的验证规则
- $this->assertIsArray($rules);
- $this->assertNotEmpty($rules);
-
- $withdrawValidation = new DiamondWithdrawValidation([]);
- $rules = $withdrawValidation->rules();
-
- $this->assertIsArray($rules);
- $this->assertNotEmpty($rules);
- }
- /**
- * 测试金额精度处理
- */
- public function testAmountPrecision()
- {
- // 测试钻石的精度设置
- $precision = \App\Module\Fund\Enums\FUND_CURRENCY_TYPE::ZUANSHI->getPrecision();
- $this->assertEquals(10, $precision);
-
- // 测试金额格式化
- $amount = 123.123456789012345;
- $formattedAmount = number_format($amount, $precision, '.', '');
- $this->assertEquals('123.1234567890', $formattedAmount);
- }
- /**
- * 测试错误处理
- */
- public function testErrorHandling()
- {
- // 测试无效的应用ID
- $invalidAppId = -1;
- $rechargeUserId = DeveloperAccountService::getRechargeUserId($invalidAppId);
- $withdrawUserId = DeveloperAccountService::getWithdrawUserId($invalidAppId);
-
- // 即使应用ID无效,也应该返回计算后的用户ID
- $this->assertEquals(99999, $rechargeUserId);
- $this->assertEquals(199999, $withdrawUserId);
- }
- }
|