CreateByBatchTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace Tests\Services\StationTaskCommodityService;
  3. use App\Batch;
  4. use App\MaterialBox;
  5. use App\Order;
  6. use App\OrderBin;
  7. use App\OrderCommodity;
  8. use App\Services\MaterialBoxService;
  9. use App\Services\StationRuleBatchService;
  10. use App\Services\StationTaskCommodityService;
  11. use App\Services\StationTypeService;
  12. use Tests\TestCase;
  13. use App\StationTaskCommodity;
  14. use App\Traits\TestMockSubServices;
  15. class CreateByBatchTest extends TestCase
  16. {
  17. use TestMockSubServices;
  18. /** @var StationTaskCommodityService $service */
  19. public $service;
  20. private $data;
  21. private $batchAmount=1;
  22. private $orderAmount=4;
  23. private $orderCommodityAmount=8;
  24. function setUp(): void
  25. {
  26. parent::setUp();
  27. $this->service = app('StationTaskCommodityService');
  28. $this->data['batches'] =
  29. factory(Batch::class,
  30. $this->batchAmount)
  31. ->create([
  32. 'status'=>'未处理',
  33. ]);
  34. $this->data['orders'] =
  35. factory(Order::class,
  36. $this->orderAmount)
  37. ->create([
  38. 'status'=>'未处理',
  39. 'batch_id'=>(function(){
  40. if(!isset($this->data['temBatchId_orders'])){
  41. $this->data['temBatchId_orders']=$this->batchAmount;
  42. }
  43. $this->data['temBatchId_orders']++;
  44. if($this->data['temBatchId_orders']>=$this->batchAmount)$this->data['temBatchId_orders']=0;
  45. return $this->data['batches'][$this->data['temBatchId_orders']]['id'];
  46. })(),
  47. ]);
  48. $this->data['orderBins'] =
  49. factory(OrderBin::class,
  50. $this->orderAmount)
  51. ->create([
  52. 'order_id'=>(function(){
  53. if(!isset($this->data['temOrderId_ordersBins'])){
  54. $this->data['temOrderId_ordersBins']=-1;
  55. }
  56. $this->data['temOrderId_ordersBins']++;
  57. return $this->data['orders'][$this->data['temOrderId_ordersBins']]['id'];
  58. })(),
  59. 'number'=>(function(){
  60. if(!isset($this->data['temNumber_ordersBins'])){
  61. $this->data['temNumber_ordersBins']=-1;
  62. }
  63. $this->data['temNumber_ordersBins']++;
  64. return $this->data['temNumber_ordersBins'];
  65. })(),
  66. ]);
  67. $this->data['orderCommodities'] =
  68. factory(OrderCommodity::class,
  69. $this->orderCommodityAmount)
  70. ->create([
  71. 'order_id'=>(function(){
  72. if(!isset($this->data['temOrderId_orderCommodities'])){
  73. $this->data['temOrderId_orderCommodities']=$this->orderAmount;
  74. }
  75. $this->data['temOrderId_orderCommodities']++;
  76. if($this->data['temOrderId_orderCommodities']>=$this->orderAmount)$this->data['temOrderId_orderCommodities']=0;
  77. return $this->data['orders'][$this->data['temOrderId_orderCommodities']];
  78. })(),
  79. ]);
  80. }
  81. public function testReturned()
  82. {
  83. $this->service=$this->subMock([
  84. 'class'=>StationTaskCommodityService::class,
  85. 'subServices'=>[
  86. [
  87. 'serviceName'=>'materialBoxService',
  88. 'class'=>MaterialBoxService::class,
  89. 'methods'=>[
  90. 'firstOrCreate'=>new MaterialBox(['id'=>1]),
  91. ],
  92. ],
  93. ]
  94. ]);
  95. $this->data['stationTaskCommodities']
  96. =(function(){
  97. if(!isset($this->data['stationTaskCommodities']))
  98. $this->data['stationTaskCommodities'] = collect();
  99. foreach($this->data['batches'] as $batch){
  100. $this->data['stationTaskCommodities']
  101. =$this->data['stationTaskCommodities']->merge(
  102. $this->service->createByBatch($batch)
  103. );
  104. }
  105. return $this->data['stationTaskCommodities'];
  106. })();
  107. $this->assertEquals($this->orderCommodityAmount, $this->data['stationTaskCommodities']->count());
  108. }
  109. function tearDown(): void
  110. {
  111. StationTaskCommodity::query()
  112. ->whereIn('id',data_get($this->data['stationTaskCommodities'],'*.id')??[])
  113. ->delete();
  114. Batch::query()
  115. ->whereIn('id',data_get($this->data['batches'],'*.id')??[])
  116. ->delete();
  117. Order::query()
  118. ->whereIn('id',data_get($this->data['orders'],'*.id')??[])
  119. ->delete();
  120. OrderBin::query()
  121. ->whereIn('id',data_get($this->data['orderBins'],'*.id')??[])
  122. ->delete();
  123. OrderCommodity::query()
  124. ->whereIn('id',data_get($this->data['orderCommodities'],'*.id')??[])
  125. ->delete();
  126. parent::tearDown();
  127. }
  128. }