SyncOrderPackageTest.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace Tests\Services\OrderPackageService\SyncOrderPackageTest;
  3. use App\Commodity;
  4. use App\OracleActAllocationDetails;
  5. use App\OracleBasSKU;
  6. use App\OracleDOCOrderHeader;
  7. use App\Order;
  8. use App\OrderPackage;
  9. use App\Owner;
  10. use App\Services\OracleDOCOrderHeaderService;
  11. use App\Services\OrderPackageService;
  12. use App\Services\OrderService;
  13. use Carbon\Carbon;
  14. use Illuminate\Foundation\Testing\RefreshDatabase;
  15. use Illuminate\Foundation\Testing\WithFaker;
  16. use Illuminate\Support\Str;
  17. use Tests\TestCase;
  18. class SyncOrderPackageTest extends TestCase
  19. {
  20. /**
  21. * @var OrderPackageService $service
  22. * @var OracleDOCOrderHeaderService $orderHeaderService
  23. * @var OrderService $orderService
  24. */
  25. public $service;
  26. public $orderService;
  27. public $orderHeaderService;
  28. private $data = [];
  29. public function setUp(): void
  30. {
  31. parent::setUp();
  32. $this->service = app('OrderPackageService');
  33. $this->orderService = app('OrderService');
  34. $this->orderHeaderService = app('OracleDocOrderHeaderService');
  35. $orderHeader = factory(OracleDOCOrderHeader::class)->make(['userdefine1' =>'TEST_OW' ]);
  36. $order = factory(Order::class)->create(['code'=>$orderHeader['orderno'],'owner_id'=>1]);
  37. $basSku = factory(OracleBasSKU::class)->make(['customerid' => 'TEST_OW']);
  38. $OracleActAllocationDetail1 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku,'checktime'=>now()]);
  39. $OracleActAllocationDetail2 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku,'checktime'=>now()]);
  40. $OracleActAllocationDetail3 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku,'checktime'=>now()]);
  41. $OracleActAllocationDetails = collect([$OracleActAllocationDetail1,$OracleActAllocationDetail2,$OracleActAllocationDetail3]);
  42. $orderHeader->setRelation('actAllocationDetails',$OracleActAllocationDetails);
  43. $owner = factory(Owner::class)->create(['code'=>'TEST_OW']);
  44. $commodity = factory(Commodity::class)->create(['sku'=>$basSku['sku'],'owner_id' => $owner]);
  45. $this->data = [
  46. 'owner' => $owner,
  47. 'commodity' => $commodity,
  48. 'order' => $order,
  49. 'orderHeader' => $orderHeader,
  50. 'sku' => $basSku,
  51. 'actAllocationDetails' => $OracleActAllocationDetails,
  52. ];
  53. }
  54. /**
  55. * @test
  56. */
  57. public function syncOrderPackage()
  58. {
  59. $orderHeaders = collect([$this->data['orderHeader']]);
  60. $this->service->syncOrderPackage($orderHeaders);
  61. $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
  62. $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
  63. }
  64. /**
  65. * @test
  66. */
  67. public function orderPackageUnnecessary()
  68. {
  69. OrderPackage::query()->create(['order_id'=>$this->data['order']['id'],'logistic_number'=>Str::uuid()]);
  70. OrderPackage::query()->create(['order_id'=>$this->data['order']['id'],'logistic_number'=>Str::uuid()]);
  71. $orderHeaders = collect([$this->data['orderHeader']]);
  72. $this->service->syncOrderPackage($orderHeaders);
  73. $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
  74. $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
  75. foreach($orderPackages as $orderPackage) {
  76. $this->assertEquals($orderPackage->owner_id,$this->data['order']['owner_id']);
  77. }
  78. }
  79. /**
  80. * @test
  81. */
  82. public function orderPackageSentAtUpdate() {
  83. $actAllocationDetails = $this->data['orderHeader']->actAllocationDetails;
  84. foreach ($actAllocationDetails as $actAllocationDetail) {
  85. $actAllocationDetail->checktime = null;
  86. }
  87. $orderHeaders = collect([$this->data['orderHeader']]);
  88. $this->service->syncOrderPackage($orderHeaders);
  89. $actAllocationDetails = $this->data['orderHeader']->actAllocationDetails;
  90. foreach ($actAllocationDetails as $actAllocationDetail) {
  91. $actAllocationDetail->checktime = '2020-11-01 00:00:00';
  92. }
  93. $this->service->syncOrderPackage($orderHeaders);
  94. $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
  95. $this->assertEquals('2020-11-01 00:00:00', $orderPackages->first()->sent_at);
  96. }
  97. /**
  98. * @test
  99. */
  100. public function actAllocationDetail_has_send_at_at_first_time()
  101. {
  102. $orderHeaders = collect([$this->data['orderHeader']]);
  103. $actAllocationDetails = $this->data['orderHeader']->actAllocationDetails;
  104. foreach ($actAllocationDetails as $actAllocationDetail) {
  105. $actAllocationDetail->checktime = '2020-11-01 00:00:00';
  106. }
  107. $this->service->syncOrderPackage($orderHeaders);
  108. $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
  109. $this->assertEquals('2020-11-01 00:00:00', $orderPackages->first()->sent_at);
  110. }
  111. /**
  112. * @test
  113. */
  114. public function orderPackagesLack()
  115. {
  116. $orderHeaders = collect([$this->data['orderHeader']]);
  117. $this->service->syncOrderPackage($orderHeaders);
  118. $actAllocationDetails = $this->data['actAllocationDetails']->random(2);
  119. $this->data['orderHeader']->setRelation('actAllocationDetails', $actAllocationDetails);
  120. $orderHeaders = collect([$this->data['orderHeader']]);
  121. $this->service->syncOrderPackage($orderHeaders);
  122. $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
  123. $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
  124. $this->assertOrderPackage($orderHeaders,$orderPackages);
  125. }
  126. public function assertOrderPackage($orderHeaders,$orderPackages)
  127. {
  128. foreach ($orderHeaders->first()->actAllocationDetails as $actAllocationDetail) {
  129. $orderPackage = $orderPackages->where('logistic_number',$actAllocationDetail->picktotraceid)->first();
  130. $this->assertNotEmpty($orderPackage);
  131. }
  132. }
  133. protected function tearDown(): void
  134. {
  135. $this->data['owner']->delete();
  136. $this->data['commodity']->delete();
  137. $this->data['order']->delete();
  138. parent::tearDown(); // TODO: Change the autogenerated stub
  139. }
  140. }