SyncOrderPackageTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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'],]);
  37. $basSku = factory(OracleBasSKU::class)->make(['customerid' => 'TEST_OW']);
  38. $OracleActAllocationDetail1 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
  39. $OracleActAllocationDetail2 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
  40. $OracleActAllocationDetail3 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
  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. }
  76. /**
  77. * @test
  78. */
  79. public function orderPackagesLack()
  80. {
  81. $orderHeaders = collect([$this->data['orderHeader']]);
  82. $this->service->syncOrderPackage($orderHeaders);
  83. $actAllocationDetails = $this->data['actAllocationDetails']->random(2);
  84. $this->data['orderHeader']->setRelation('actAllocationDetails', $actAllocationDetails);
  85. $orderHeaders = collect([$this->data['orderHeader']]);
  86. $this->service->syncOrderPackage($orderHeaders);
  87. $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
  88. $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
  89. $this->assertOrderPackage($orderHeaders,$orderPackages);
  90. }
  91. public function assertOrderPackage($orderHeaders,$orderPackages)
  92. {
  93. foreach ($orderHeaders->first()->actAllocationDetails as $actAllocationDetail) {
  94. $orderPackage = $orderPackages->where('logistic_number',$actAllocationDetail->picktotraceid)->first();
  95. $this->assertNotEmpty($orderPackage);
  96. }
  97. }
  98. protected function tearDown(): void
  99. {
  100. $this->data['owner']->delete();
  101. $this->data['commodity']->delete();
  102. $this->data['order']->delete();
  103. parent::tearDown(); // TODO: Change the autogenerated stub
  104. }
  105. }