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); } }