| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace Tests\Unit\Farm;
- use Tests\TestCase;
- use App\Module\Farm\Services\PickService;
- use App\Module\Farm\Models\FarmCrop;
- use App\Module\Farm\Models\FarmSeed;
- use App\Module\Farm\Models\FarmLand;
- use App\Module\Farm\Models\FarmUser;
- use App\Module\Farm\Enums\GROWTH_STAGE;
- use Illuminate\Foundation\Testing\RefreshDatabase;
- /**
- * 摘取服务测试
- */
- class PickServiceTest extends TestCase
- {
- use RefreshDatabase;
- /**
- * 测试获取摘取信息
- */
- public function test_get_pick_info()
- {
- // 创建测试数据
- $seed = FarmSeed::factory()->create([
- 'pick_enabled' => true,
- 'pick_max_ratio' => 0.3,
- 'pick_min_reserve_ratio' => 0.1,
- 'pick_cooldown_seconds' => 1800,
- ]);
- $land = FarmLand::factory()->create();
- $farmUser = FarmUser::factory()->create();
- $crop = FarmCrop::factory()->create([
- 'seed_id' => $seed->id,
- 'land_id' => $land->id,
- 'user_id' => $farmUser->user_id,
- 'growth_stage' => GROWTH_STAGE::MATURE,
- 'final_output_amount' => 100,
- 'picked_amount' => 0,
- 'min_reserve_amount' => 10,
- ]);
- // 测试获取摘取信息
- $pickInfo = PickService::getPickInfo($crop->id);
- $this->assertNotNull($pickInfo);
- $this->assertEquals($crop->id, $pickInfo->cropId);
- $this->assertEquals(90, $pickInfo->pickableAmount); // 100 - 0 - 10
- $this->assertTrue($pickInfo->canPick);
- }
- /**
- * 测试检查摘取条件
- */
- public function test_can_pick_crop()
- {
- // 创建成熟的作物
- $seed = FarmSeed::factory()->create(['pick_enabled' => true]);
- $land = FarmLand::factory()->create();
- $farmUser = FarmUser::factory()->create();
- $crop = FarmCrop::factory()->create([
- 'seed_id' => $seed->id,
- 'land_id' => $land->id,
- 'user_id' => $farmUser->user_id,
- 'growth_stage' => GROWTH_STAGE::MATURE,
- 'final_output_amount' => 100,
- 'picked_amount' => 0,
- 'min_reserve_amount' => 10,
- ]);
- // 测试可以摘取
- $result = PickService::canPickCrop($crop->id);
- $this->assertTrue($result['can_pick']);
- // 测试不成熟的作物
- $crop->growth_stage = GROWTH_STAGE::GROWTH;
- $crop->save();
- $result = PickService::canPickCrop($crop->id);
- $this->assertFalse($result['can_pick']);
- $this->assertStringContains('未成熟', $result['reason']);
- }
- /**
- * 测试摘取功能(需要模拟ItemService)
- */
- public function test_pick_crop_basic_validation()
- {
- // 测试基本验证
- $this->expectException(\Exception::class);
-
- // 尝试摘取不存在的作物
- PickService::pickCrop(1, 999999, 10, 'manual');
- }
- }
|