PickServiceTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace Tests\Unit\Farm;
  3. use Tests\TestCase;
  4. use App\Module\Farm\Services\PickService;
  5. use App\Module\Farm\Models\FarmCrop;
  6. use App\Module\Farm\Models\FarmSeed;
  7. use App\Module\Farm\Models\FarmLand;
  8. use App\Module\Farm\Models\FarmUser;
  9. use App\Module\Farm\Enums\GROWTH_STAGE;
  10. use Illuminate\Foundation\Testing\RefreshDatabase;
  11. /**
  12. * 摘取服务测试
  13. */
  14. class PickServiceTest extends TestCase
  15. {
  16. use RefreshDatabase;
  17. /**
  18. * 测试获取摘取信息
  19. */
  20. public function test_get_pick_info()
  21. {
  22. // 创建测试数据
  23. $seed = FarmSeed::factory()->create([
  24. 'pick_enabled' => true,
  25. 'pick_max_ratio' => 0.3,
  26. 'pick_min_reserve_ratio' => 0.1,
  27. 'pick_cooldown_seconds' => 1800,
  28. ]);
  29. $land = FarmLand::factory()->create();
  30. $farmUser = FarmUser::factory()->create();
  31. $crop = FarmCrop::factory()->create([
  32. 'seed_id' => $seed->id,
  33. 'land_id' => $land->id,
  34. 'user_id' => $farmUser->user_id,
  35. 'growth_stage' => GROWTH_STAGE::MATURE,
  36. 'final_output_amount' => 100,
  37. 'picked_amount' => 0,
  38. 'min_reserve_amount' => 10,
  39. ]);
  40. // 测试获取摘取信息
  41. $pickInfo = PickService::getPickInfo($crop->id);
  42. $this->assertNotNull($pickInfo);
  43. $this->assertEquals($crop->id, $pickInfo->cropId);
  44. $this->assertEquals(90, $pickInfo->pickableAmount); // 100 - 0 - 10
  45. $this->assertTrue($pickInfo->canPick);
  46. }
  47. /**
  48. * 测试检查摘取条件
  49. */
  50. public function test_can_pick_crop()
  51. {
  52. // 创建成熟的作物
  53. $seed = FarmSeed::factory()->create(['pick_enabled' => true]);
  54. $land = FarmLand::factory()->create();
  55. $farmUser = FarmUser::factory()->create();
  56. $crop = FarmCrop::factory()->create([
  57. 'seed_id' => $seed->id,
  58. 'land_id' => $land->id,
  59. 'user_id' => $farmUser->user_id,
  60. 'growth_stage' => GROWTH_STAGE::MATURE,
  61. 'final_output_amount' => 100,
  62. 'picked_amount' => 0,
  63. 'min_reserve_amount' => 10,
  64. ]);
  65. // 测试可以摘取
  66. $result = PickService::canPickCrop($crop->id);
  67. $this->assertTrue($result['can_pick']);
  68. // 测试不成熟的作物
  69. $crop->growth_stage = GROWTH_STAGE::GROWTH;
  70. $crop->save();
  71. $result = PickService::canPickCrop($crop->id);
  72. $this->assertFalse($result['can_pick']);
  73. $this->assertStringContains('未成熟', $result['reason']);
  74. }
  75. /**
  76. * 测试摘取功能(需要模拟ItemService)
  77. */
  78. public function test_pick_crop_basic_validation()
  79. {
  80. // 测试基本验证
  81. $this->expectException(\Exception::class);
  82. // 尝试摘取不存在的作物
  83. PickService::pickCrop(1, 999999, 10, 'manual');
  84. }
  85. }