TransfersToConditionsTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace NewOrderCountingRecordService;
  3. use App\Order;
  4. use App\OrderCountingRecord;
  5. use App\Owner;
  6. use App\Services\NewOrderCountingRecordService;
  7. use App\User;
  8. use Carbon\Carbon;
  9. use Illuminate\Foundation\Testing\RefreshDatabase;
  10. use Illuminate\Support\Arr;
  11. use Tests\TestCase;
  12. class TransfersToConditionsTest extends TestCase
  13. {
  14. protected $newOrderCountingRecordService;
  15. protected $data;
  16. protected function setUp(): void
  17. {
  18. parent::setUp(); // TODO: Change the autogenerated stub
  19. cache()->flush();
  20. $this->newOrderCountingRecordService = new NewOrderCountingRecordService();
  21. $user = User::query()->where('name', 'yang')->first();
  22. $this->actingAs($user);
  23. $this->data['dates'] = [
  24. 'right'=>[
  25. ['startAt'=>Carbon::now()->subDays(2),'endAt'=>Carbon::now()->addDays(2)],
  26. ['startAt'=>Carbon::now()->subYears(1),'endAt'=>Carbon::now()->addYears(1)],
  27. ],
  28. 'wrong'=>[
  29. ['startAt'=>Carbon::now()->addDays(2),'endAt'=>Carbon::now()->subDays(2)],
  30. ['startAt'=>Carbon::now()->addYears(1),'endAt'=>Carbon::now()->subYears(1)],
  31. ]
  32. ];
  33. $this->data['units'] = ['year'=>'年','month'=>'月','week'=>'周','day'=>'日'];
  34. $this->data['owners']=factory(Owner::class)->times(2)->create();
  35. }
  36. protected function tearDown(): void
  37. {
  38. cache()->flush();
  39. Owner::destroy(data_get($this->data['owners'],'*.id'));
  40. parent::tearDown(); // TODO: Change the autogenerated stub
  41. }
  42. public function test_transfersToConditions_format()
  43. {
  44. foreach($this->data['units'] as $unit){
  45. foreach($this->data['dates']['right'] as $date){
  46. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  47. $this->assertIsArray($result);
  48. }
  49. foreach($this->data['dates']['wrong'] as $date){
  50. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  51. $this->assertIsArray($result);
  52. }
  53. }
  54. }
  55. public function test_transfersToConditions_ifEmpty()
  56. {
  57. foreach($this->data['units'] as $unit){
  58. foreach($this->data['dates']['right'] as $date){
  59. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  60. $this->assertNotEmpty($result);
  61. }
  62. foreach($this->data['dates']['wrong'] as $date){
  63. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  64. $this->assertEmpty($result['data']);
  65. $this->assertNotEmpty($result['unit']);
  66. }
  67. }
  68. }
  69. public function test_transfersToConditions_ifDatesMatches()
  70. {
  71. foreach($this->data['units'] as $unit){
  72. foreach($this->data['dates']['right'] as $date){
  73. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  74. $datesExpected=[];
  75. switch ($unit){
  76. case '年': $datesExpected=collect($date['startAt']->yearsUntil($date['endAt'], 1)->toArray())
  77. ->map(function(Carbon $date){
  78. return $date->firstOfYear();
  79. })->toArray();
  80. break;
  81. case '月': $datesExpected=collect($date['startAt']->monthsUntil($date['endAt'], 1)->toArray())
  82. ->map(function(Carbon $date){
  83. return $date->firstOfMonth();
  84. })->toArray();break;
  85. case '日': $datesExpected=collect($date['startAt']->daysUntil($date['endAt'], 1)->toArray())
  86. ->map(function(Carbon $date){
  87. return $date->startOfDay();
  88. })->toArray();break;
  89. }
  90. $datesExpected=array_map(function($date){
  91. return $date->toDateString();
  92. },$datesExpected);
  93. $actualDays = array_keys($result['data']);
  94. $this->assertEquals($datesExpected, $actualDays);
  95. }
  96. }
  97. }
  98. public function test_transfersToConditions_ifOwnerIdMatches()
  99. {
  100. foreach($this->data['units'] as $unit){
  101. foreach($this->data['dates']['right'] as $date){
  102. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  103. $ownerIdsExpected=data_get($this->data['owners'],'*.id');
  104. $isMatch=true;
  105. foreach($result['data'] as $date=>$ownerIds){
  106. if(json_encode($ownerIdsExpected)!=json_encode($ownerIds)){
  107. $isMatch=false; break;
  108. }
  109. }
  110. $this->assertTrue($isMatch);
  111. }
  112. }
  113. }
  114. }