OwnerPriceOperationServiceTest.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace Tests\Services\OwnerPriceOperationService;
  3. use App\Commodity;
  4. use App\Owner;
  5. use App\OwnerPriceOperation;
  6. use App\OwnerPriceOperationItem;
  7. use App\Services\FeatureService;
  8. use App\Services\OwnerPriceOperationService;
  9. use App\Unit;
  10. use Mockery\Mock;
  11. use Tests\TestCase;
  12. class OwnerPriceOperationServiceTest extends TestCase
  13. {
  14. /** @var OwnerPriceOperationService */
  15. public $service;
  16. public $data;
  17. protected function setUp(): void
  18. {
  19. parent::setUp();
  20. $this->service = app(OwnerPriceOperationService::class);
  21. $this->data["units"] = [];
  22. $pieces = Unit::query()->where("name","件")->first();
  23. $box = Unit::query()->where("name","箱")->first();
  24. $single = Unit::query()->where("name","单")->first();
  25. if (!$pieces){
  26. $pieces = factory(Unit::class)->create(["name"=>"件"]);
  27. $this->data["units"][] = $pieces->toArray();
  28. }
  29. if (!$box){
  30. $box = factory(Unit::class)->create(["name"=>"箱"]);
  31. $this->data["units"][] = $box->toArray();
  32. }
  33. if (!$single){
  34. $single = factory(Unit::class)->create(["name"=>"单"]);
  35. $this->data["units"][] = $single->toArray();
  36. }
  37. $model1 = factory(OwnerPriceOperation::class)->create([
  38. "operation_type"=>"入库", //操作类型
  39. "strategy" =>"默认", //策略
  40. ]);
  41. $model2 = factory(OwnerPriceOperation::class)->create([
  42. "operation_type"=>"入库", //操作类型
  43. "strategy" =>"特征", //策略
  44. ]);
  45. $model3 = factory(OwnerPriceOperation::class)->create([
  46. "operation_type"=>"出库", //操作类型
  47. "strategy" =>"默认", //策略
  48. ]);
  49. $model4 = factory(OwnerPriceOperation::class)->create([
  50. "operation_type"=>"出库", //操作类型
  51. "strategy" =>"特征", //策略
  52. ]);
  53. $this->data["models"] = [$model1->toArray(),$model2->toArray(),$model3->toArray(),$model4->toArray()];
  54. $item1 = factory(OwnerPriceOperationItem::class)->create([
  55. "owner_price_operation_id" => $model1->id,
  56. "strategy" => "默认",
  57. "amount" => 6,
  58. "unit_id" => $box->id,
  59. "unit_price" => 2.22,
  60. ]);
  61. $item2 = factory(OwnerPriceOperationItem::class)->create([
  62. "owner_price_operation_id" => $model3->id,
  63. "strategy" => "特征",
  64. "amount" => 6,
  65. "unit_id" => $box->id,
  66. "unit_price" => 3.22,
  67. ]);
  68. $item3 = factory(OwnerPriceOperationItem::class)->create([
  69. "owner_price_operation_id" => $model2->id,
  70. "strategy" =>"默认",
  71. "amount" => 6,
  72. "unit_id" => $box->id,
  73. "unit_price" => 4.22,
  74. ]);
  75. $item4 = factory(OwnerPriceOperationItem::class)->create([
  76. "owner_price_operation_id" => $model2->id,
  77. "strategy" =>"特征",
  78. "amount" => 6,
  79. "unit_id" => $box->id,
  80. "unit_price" => 5.1,
  81. ]);
  82. $item5 = factory(OwnerPriceOperationItem::class)->create([
  83. "owner_price_operation_id" => $model3->id,
  84. "strategy" => "起步",
  85. "amount" => 6,
  86. "unit_id" => $box->id,
  87. "unit_price" => 5.2,
  88. ]);
  89. $item6 = factory(OwnerPriceOperationItem::class)->create([
  90. "owner_price_operation_id" => $model3->id,
  91. "strategy" =>"默认",
  92. "amount" => 6,
  93. "unit_id" => $box->id,
  94. "unit_price" => 5.3,
  95. ]);
  96. $item7 = factory(OwnerPriceOperationItem::class)->create([
  97. "owner_price_operation_id" => $model3->id,
  98. "strategy" =>"特征",
  99. "amount" => 6,
  100. "unit_id" => $box->id,
  101. "unit_price" => 5.4,
  102. ]);
  103. $item8 = factory(OwnerPriceOperationItem::class)->create([
  104. "owner_price_operation_id" => $model4->id,
  105. "strategy" => "起步",
  106. "amount" => 6,
  107. "unit_id" => $box->id,
  108. "unit_price" => 5.5,
  109. ]);
  110. $item9 = factory(OwnerPriceOperationItem::class)->create([
  111. "owner_price_operation_id" => $model4->id,
  112. "strategy" =>"默认",
  113. "amount" => 6,
  114. "unit_id" => $box->id,
  115. "unit_price" => 5.6,
  116. ]);
  117. $item10 = factory(OwnerPriceOperationItem::class)->create([
  118. "owner_price_operation_id" => $model4->id,
  119. "strategy" =>"特征",
  120. "amount" => 6,
  121. "unit_id" => $box->id,
  122. "unit_price" => 5.7,
  123. ]);
  124. $this->data["item"] = [$item1->toArray(),
  125. $item2->toArray(),
  126. $item3->toArray(),
  127. $item4->toArray(),
  128. $item5->toArray(),
  129. $item6->toArray(),
  130. $item7->toArray(),
  131. $item8->toArray(),
  132. $item9->toArray(),
  133. $item10->toArray()];
  134. $owner = factory(Owner::class)->create([
  135. "user_owner_group_id" => 1,
  136. ]);
  137. $model1->ownerPriceOperationOwners()->sync([$owner->id]);
  138. $model2->ownerPriceOperationOwners()->sync([$owner->id]);
  139. $model3->ownerPriceOperationOwners()->sync([$owner->id]);
  140. $model4->ownerPriceOperationOwners()->sync([$owner->id]);
  141. $this->data["owners"] = [$owner->toArray()];
  142. $this->data["commodities"] = [];
  143. $commodity = factory(Commodity::class)->create([
  144. 'sku' => md5(date('Ymd').\Illuminate\Support\Str::random(3)),
  145. 'owner_id' => $owner->id,
  146. "pack_spec" => 3
  147. ]);
  148. $this->data["commodities"][] = $commodity->toArray();
  149. }
  150. /**
  151. * @group customer
  152. */
  153. public function testMatching()
  154. {
  155. $this->partialMock(FeatureService::class,function ($mock){
  156. /** @var Mock $mock */
  157. $mock->shouldReceive("matchFeature")->andReturn(true);
  158. });
  159. $result = $this->service->matching(["packages"=>[["commodity"=>"测试","amount"=>55,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"入库");
  160. $this->assertEquals(96.9,$result);
  161. $result = $this->service->matching(["packages"=>[["commodity"=>"测试","amount"=>57,"sku"=>$this->data["commodities"][0]["sku"]]]],[],$this->data["owners"][0]["id"],"出库");
  162. $this->assertEquals(79.60000000000001,$result);
  163. }
  164. public function tearDown(): void
  165. {
  166. Unit::destroy(array_column($this->data["units"],"id"));
  167. OwnerPriceOperation::destroy(array_column($this->data["models"],"id"));
  168. foreach ($this->data["models"] as $d){
  169. $model = new OwnerPriceOperation();
  170. $model->id = $d["id"];
  171. $model->ownerPriceOperationOwners()->sync([]);
  172. }
  173. OwnerPriceOperationItem::destroy(array_column($this->data["item"],"id"));
  174. Owner::destroy(array_column($this->data["owners"],"id"));
  175. Commodity::destroy(array_column($this->data["commodities"],"id"));
  176. parent::tearDown();
  177. }
  178. }