| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- namespace Tests\Unit\Pet;
- use App\Module\AppGame\Handler\Pet\VegetealHandler;
- use App\Module\Pet\Dtos\StealResultDto;
- use App\Module\Pet\Services\PetStealService;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Mockery;
- use Tests\TestCase;
- use UCore\Exception\LogicException;
- use Uraus\Kku\Request\RequestPetVegeteal;
- use Uraus\Kku\Response;
- /**
- * 测试偷菜被防御时的Handler行为
- */
- class VegetealHandlerDefendedTest extends TestCase
- {
- protected function setUp(): void
- {
- parent::setUp();
-
- // Mock Log facade
- Log::shouldReceive('info')->andReturn(true);
- Log::shouldReceive('warning')->andReturn(true);
- }
- protected function tearDown(): void
- {
- Mockery::close();
- parent::tearDown();
- }
- /**
- * 测试偷菜被防御时抛出异常
- */
- public function test_steal_defended_throws_exception()
- {
- // Mock DB transaction
- DB::shouldReceive('transaction')->andReturnUsing(function ($callback) {
- return $callback();
- });
- // Mock PetStealService 返回被防御的结果
- $defendedResult = StealResultDto::defended(123, 45, 46);
-
- $mockService = Mockery::mock('alias:' . PetStealService::class);
- $mockService->shouldReceive('stealCrop')
- ->once()
- ->with(39186, 39170, 14984, 45)
- ->andReturn($defendedResult);
- // 创建请求对象
- $request = new RequestPetVegeteal();
- $request->setUserId(39170);
- $request->setPetId(45);
- $request->setPlantId(14984);
- // 创建Handler实例
- $response = new Response();
- $handler = new VegetealHandler($response);
- $handler->user_id = 39186;
- // 期望抛出LogicException
- $this->expectException(LogicException::class);
- $this->expectExceptionMessage('偷菜被防御,偷菜失败');
- // 执行测试
- $handler->handle($request);
- }
- /**
- * 测试偷菜失败时抛出异常
- */
- public function test_steal_failed_throws_exception()
- {
- // Mock DB transaction
- DB::shouldReceive('transaction')->andReturnUsing(function ($callback) {
- return $callback();
- });
- // Mock PetStealService 返回失败的结果
- $failedResult = StealResultDto::failed('作物不存在', 124, 45, null);
-
- $mockService = Mockery::mock('alias:' . PetStealService::class);
- $mockService->shouldReceive('stealCrop')
- ->once()
- ->with(39186, 39170, 14984, 45)
- ->andReturn($failedResult);
- // 创建请求对象
- $request = new RequestPetVegeteal();
- $request->setUserId(39170);
- $request->setPetId(45);
- $request->setPlantId(14984);
- // 创建Handler实例
- $response = new Response();
- $handler = new VegetealHandler($response);
- $handler->user_id = 39186;
- // 期望抛出LogicException
- $this->expectException(LogicException::class);
- $this->expectExceptionMessage('作物不存在');
- // 执行测试
- $handler->handle($request);
- }
- /**
- * 测试偷菜成功时正常返回
- */
- public function test_steal_success_returns_normally()
- {
- // Mock DB transaction
- DB::shouldReceive('transaction')->andReturnUsing(function ($callback) {
- return $callback();
- });
- // Mock PetStealService 返回成功的结果
- $successResult = StealResultDto::success(8, 3, 0, 125, 45, 46);
-
- $mockService = Mockery::mock('alias:' . PetStealService::class);
- $mockService->shouldReceive('stealCrop')
- ->once()
- ->with(39186, 39170, 14984, 45)
- ->andReturn($successResult);
- // 创建请求对象
- $request = new RequestPetVegeteal();
- $request->setUserId(39170);
- $request->setPetId(45);
- $request->setPlantId(14984);
- // 创建Handler实例
- $response = new Response();
- $handler = new VegetealHandler($response);
- $handler->user_id = 39186;
- // 执行测试 - 应该正常返回,不抛出异常
- $result = $handler->handle($request);
- // 验证结果
- $this->assertInstanceOf(\Uraus\Kku\Response\ResponsePetVegeteal::class, $result);
- }
- }
|