OwnerPriceOperationServiceTest.php 7.5 KB

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