| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- namespace Tests\Services\OwnerPriceOperationService;
- use App\Commodity;
- use App\Owner;
- use App\OwnerInStorageRule;
- use App\OwnerOutStorageRule;
- use App\OwnerPriceOperation;
- use App\Services\FeatureService;
- use App\Services\OwnerPriceOperationService;
- use App\Unit;
- use Mockery\Mock;
- use Tests\TestCase;
- class OwnerPriceOperationServiceTest extends TestCase
- {
- /** @var OwnerPriceOperationService */
- public $service;
- public $data;
- protected function setUp(): void
- {
- parent::setUp();
- $this->service = app(OwnerPriceOperationService::class);
- $this->data["units"] = [];
- $pieces = Unit::query()->where("name","件")->first();
- $box = Unit::query()->where("name","箱")->first();
- $single = Unit::query()->where("name","单")->first();
- if (!$pieces){
- $pieces = factory(Unit::class)->create(["name"=>"件"]);
- $this->data["units"][] = $pieces->toArray();
- }
- if (!$box){
- $box = factory(Unit::class)->create(["name"=>"箱"]);
- $this->data["units"][] = $box->toArray();
- }
- if (!$single){
- $single = factory(Unit::class)->create(["name"=>"单"]);
- $this->data["units"][] = $single->toArray();
- }
- $model1 = factory(OwnerPriceOperation::class)->create([
- "operation_type"=>"入库", //操作类型
- "strategy" =>"默认", //策略
- ]);
- $model2 = factory(OwnerPriceOperation::class)->create([
- "operation_type"=>"入库", //操作类型
- "strategy" =>"特征", //策略
- ]);
- $model3 = factory(OwnerPriceOperation::class)->create([
- "operation_type"=>"出库", //操作类型
- "strategy" =>"默认", //策略
- ]);
- $model4 = factory(OwnerPriceOperation::class)->create([
- "operation_type"=>"出库", //操作类型
- "strategy" =>"特征", //策略
- ]);
- $this->data["models"] = [$model1->toArray(),$model2->toArray(),$model3->toArray(),$model4->toArray()];
- $in1 = factory(OwnerInStorageRule::class)->create([
- "owner_price_operation_id" => $model1->id, //作业计费ID
- "amount" => 5, //计量
- "unit_id" => $pieces->id,//单位ID
- "unit_price" => 2.22, //单价
- ]);
- $in2 = factory(OwnerInStorageRule::class)->create([
- "owner_price_operation_id" => $model2->id, //作业计费ID
- "amount" => 5, //计量
- "unit_id" => $box->id,//单位ID
- "unit_price" => 3.22, //单价
- ]);
- $out1 = factory(OwnerOutStorageRule::class)->create([
- "owner_price_operation_id" => $model3->id,
- "strategy" =>"起步",
- "amount" =>6,
- "unit_id" => $pieces->id,
- "unit_price" => 2.22,
- ]);
- $out4 = factory(OwnerOutStorageRule::class)->create([
- "owner_price_operation_id" => $model3->id,
- "strategy" => "默认",
- "amount" => 6,
- "unit_id" => $box->id,
- "unit_price" => 3.22,
- ]);
- $out5 = factory(OwnerOutStorageRule::class)->create([
- "owner_price_operation_id" => $model3->id,
- "strategy" =>"特征",
- "amount" => 6,
- "unit_id" => $single->id,
- "unit_price" => 4.22,
- ]);
- $out6 = factory(OwnerOutStorageRule::class)->create([
- "owner_price_operation_id" => $model4->id,
- "strategy" =>"起步",
- "amount" => 6,
- "unit_id" => $pieces->id,
- "unit_price" => 5.1,
- ]);
- $out7 = factory(OwnerOutStorageRule::class)->create([
- "owner_price_operation_id" => $model4->id,
- "strategy" => "默认",
- "amount" => 6,
- "unit_id" => $pieces->id,
- "unit_price" => 5.2,
- ]);
- $out8 = factory(OwnerOutStorageRule::class)->create([
- "owner_price_operation_id" => $model4->id,
- "strategy" =>"特征",
- "amount" => 6,
- "unit_id" => $box->id,
- "unit_price" => 5.3,
- ]);
- $this->data["in"] = [$in1->toArray(),$in2->toArray()];
- $this->data["out"] = [$out1->toArray(),$out4->toArray(),$out5->toArray(),$out6->toArray(),$out7->toArray(),$out8->toArray()];
- $owner = factory(Owner::class)->create([
- "user_owner_group_id" => 1,
- ]);
- $model1->ownerPriceOperationOwners()->sync([$owner->id]);
- $model2->ownerPriceOperationOwners()->sync([$owner->id]);
- $model3->ownerPriceOperationOwners()->sync([$owner->id]);
- $model4->ownerPriceOperationOwners()->sync([$owner->id]);
- $this->data["owners"] = [$owner->toArray()];
- $this->data["commodities"] = [];
- $commodity = factory(Commodity::class)->create([
- 'sku' => md5(date('Ymd').\Illuminate\Support\Str::random(3)),
- 'owner_id' => $owner->id,
- "pack_spec" => 3
- ]);
- $this->data["commodities"][] = $commodity->toArray();
- }
- /**
- * @group customer
- */
- public function testMatchRule()
- {
- $this->partialMock(FeatureService::class,function ($mock){
- /** @var Mock $mock */
- $mock->shouldReceive("matchFeature")->andReturn(true);
- });
- $result = $this->service->matchRule(55,[],[],$this->data["owners"][0]["id"],$this->data["commodities"][0]["sku"],"入库");
- $this->assertEquals(12.88,$result);
- $result = $this->service->matchRule(56,[],[],$this->data["owners"][0]["id"],null,"入库");
- $this->assertEquals(26.64,$result);
- $result = $this->service->matchRule(57,[],[],$this->data["owners"][0]["id"],$this->data["commodities"][0]["sku"],"出库");
- $this->assertEquals(46.5,$result);
- $result = $this->service->matchRule(58,[],[],$this->data["owners"][0]["id"],null,"出库");
- $this->assertEquals(77.4,$result);
- }
- public function tearDown(): void
- {
- Unit::destroy(array_column($this->data["units"],"id"));
- OwnerPriceOperation::destroy(array_column($this->data["models"],"id"));
- foreach ($this->data["models"] as $d){
- $model = new OwnerPriceOperation();
- $model->id = $d["id"];
- $model->ownerPriceOperationOwners()->sync([]);
- }
- OwnerInStorageRule::destroy(array_column($this->data["in"],"id"));
- OwnerOutStorageRule::destroy(array_column($this->data["out"],"id"));
- Owner::destroy(array_column($this->data["owners"],"id"));
- Commodity::destroy(array_column($this->data["commodities"],"id"));
- parent::tearDown();
- }
- }
|