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