CreateByBatchTest.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. namespace Tests\Services\StationTaskCommodityService;
  3. use App\Batch;
  4. use App\Order;
  5. use App\OrderBin;
  6. use App\OrderCommodity;
  7. use App\Services\StationRuleBatchService;
  8. use App\Services\StationTaskCommodityService;
  9. use App\Services\StationTypeService;
  10. use Tests\TestCase;
  11. use App\StationTaskCommodity;
  12. class CreateByBatchTest extends TestCase
  13. {
  14. /** @var StationTaskCommodityService $service */
  15. public $service;
  16. private $data;
  17. private $batchAmount=1;
  18. private $orderAmount=4;
  19. private $orderCommodityAmount=8;
  20. function setUp(): void
  21. {
  22. parent::setUp();
  23. $this->service = app('StationTaskCommodityService');
  24. $this->data['batches'] =
  25. factory(Batch::class,
  26. $this->batchAmount)
  27. ->create([
  28. 'status'=>'未处理',
  29. ]);
  30. $this->data['orders'] =
  31. factory(Order::class,
  32. $this->orderAmount)
  33. ->create([
  34. 'status'=>'未处理',
  35. 'batch_id'=>(function(){
  36. if(!isset($this->data['temBatchId_orders'])){
  37. $this->data['temBatchId_orders']=$this->batchAmount;
  38. }
  39. $this->data['temBatchId_orders']++;
  40. if($this->data['temBatchId_orders']>=$this->batchAmount)$this->data['temBatchId_orders']=0;
  41. return $this->data['batches'][$this->data['temBatchId_orders']];
  42. })(),
  43. ]);
  44. $this->data['orderBins'] =
  45. factory(OrderBin::class,
  46. $this->orderAmount)
  47. ->create([
  48. 'order_id'=>(function(){
  49. if(!isset($this->data['temOrderId_ordersBins'])){
  50. $this->data['temOrderId_ordersBins']=-1;
  51. }
  52. $this->data['temOrderId_ordersBins']++;
  53. return $this->data['orders'][$this->data['temOrderId_ordersBins']];
  54. })(),
  55. 'number'=>(function(){
  56. if(!isset($this->data['temNumber_ordersBins'])){
  57. $this->data['temNumber_ordersBins']=-1;
  58. }
  59. $this->data['temNumber_ordersBins']++;
  60. return $this->data['temNumber_ordersBins'];
  61. })(),
  62. ]);
  63. $this->data['orderCommodities'] =
  64. factory(OrderCommodity::class,
  65. $this->orderCommodityAmount)
  66. ->create([
  67. 'order_id'=>(function(){
  68. if(!isset($this->data['temOrderId_orderCommodities'])){
  69. $this->data['temOrderId_orderCommodities']=$this->orderAmount;
  70. }
  71. $this->data['temOrderId_orderCommodities']++;
  72. if($this->data['temOrderId_orderCommodities']>=$this->orderAmount)$this->data['temOrderId_orderCommodities']=0;
  73. return $this->data['orders'][$this->data['temOrderId_orderCommodities']];
  74. })(),
  75. ]);
  76. }
  77. function subMock(array $serviceDefinition){
  78. $mockingService=$this->createPartialMock(
  79. $serviceDefinition['class'],
  80. array_keys($serviceDefinition['methods'])
  81. );
  82. foreach ($serviceDefinition['methods'] as $mName=>$mVal){
  83. $mockingService->method($mName)->willReturn($mVal);
  84. }
  85. foreach ($serviceDefinition['subServices'] as $subService){
  86. $mockingService->instant(
  87. $subService['serviceName'],
  88. ($subServiceMock=function()use($subService){
  89. $subServiceMock=$this->createPartialMock(
  90. $subService['class'],
  91. array_keys($subService['methods'])
  92. );
  93. foreach ($subService['methods'] as $methodName=>$methodVal){
  94. $subServiceMock->method($methodName)->willReturn($methodVal);
  95. }
  96. return $subServiceMock;
  97. })()
  98. );
  99. }
  100. return $mockingService;
  101. }
  102. public function testReturned()
  103. {
  104. $stationTypeServiceMock=$this->subMock([
  105. 'class'=>StationTypeService::class,
  106. 'methods'=>[
  107. // 'getByBatch'=>111,
  108. ],
  109. 'subServices'=>[
  110. [
  111. 'serviceName'=>'stationRuleBatchService',
  112. 'class'=>stationRuleBatchService::class,
  113. 'methods'=>[
  114. 'getByBatch'=>4242,
  115. 'aaa'=>222,
  116. ],
  117. ],
  118. ]
  119. ]);
  120. dd($stationTypeServiceMock->getByBatch(new Batch()));
  121. // $stationTypeServiceMock=( function (){
  122. // $stationTypeServiceMock=$this->createPartialMock(
  123. // StationTypeService::class,
  124. // ['aaa']
  125. // );
  126. // $stationRuleBatchServiceStr = 'stationRuleBatchService';
  127. // $stationTypeServiceMock->instant(
  128. // $stationRuleBatchServiceStr,
  129. // ($stationRuleBatchServiceMock=function(){
  130. // $mock=$this->createPartialMock(
  131. // StationRuleBatchService::class,
  132. // ['getByBatch']
  133. // );
  134. // $mock->method('getByBatch')->willReturn('ddd');
  135. // return $mock;
  136. // })()
  137. // );
  138. // return $stationTypeServiceMock;
  139. // })();
  140. $this->data['stationTaskCommodities']
  141. =(function(){
  142. if(!isset($this->data['stationTaskCommodities']))
  143. $this->data['stationTaskCommodities'] = collect();
  144. foreach($this->data['batches'] as $batch){
  145. $this->data['stationTaskCommodities']
  146. =$this->data['stationTaskCommodities']->merge(
  147. $this->service->createByBatch($batch)//<<---testing it
  148. );
  149. }
  150. return $this->data['stationTaskCommodities'];
  151. })();
  152. $this->assertEquals($this->orderCommodityAmount, $this->data['stationTaskCommodities']->count());
  153. }
  154. function tearDown(): void
  155. {
  156. StationTaskCommodity::query()
  157. ->whereIn('id',data_get($this->data['stationTaskCommodities'],'*.id')??[])
  158. ->delete();
  159. Batch::query()
  160. ->whereIn('id',data_get($this->data['batches'],'*.id')??[])
  161. ->delete();
  162. Order::query()
  163. ->whereIn('id',data_get($this->data['orders'],'*.id')??[])
  164. ->delete();
  165. OrderBin::query()
  166. ->whereIn('id',data_get($this->data['orderBins'],'*.id')??[])
  167. ->delete();
  168. OrderCommodity::query()
  169. ->whereIn('id',data_get($this->data['orderCommodities'],'*.id')??[])
  170. ->delete();
  171. parent::tearDown();
  172. }
  173. }