TransfersToConditionsTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. $this->actingAs(factory(User::class)->create(['name' => 'yang']));
  22. $this->data['dates'] = [
  23. 'right'=>[
  24. ['startAt'=>Carbon::now()->subDays(2),'endAt'=>Carbon::now()->addDays(2)],
  25. ['startAt'=>Carbon::now()->subYears(1),'endAt'=>Carbon::now()->addYears(1)],
  26. ],
  27. 'wrong'=>[
  28. ['startAt'=>Carbon::now()->addDays(2),'endAt'=>Carbon::now()->subDays(2)],
  29. ['startAt'=>Carbon::now()->addYears(1),'endAt'=>Carbon::now()->subYears(1)],
  30. ]
  31. ];
  32. $this->data['units'] = ['year'=>'年','month'=>'月','week'=>'周','day'=>'日'];
  33. $this->data['owners']=factory(Owner::class)->times(2)->create();
  34. }
  35. protected function tearDown(): void
  36. {
  37. cache()->flush();
  38. Owner::destroy(data_get($this->data['owners'],'*.id'));
  39. parent::tearDown(); // TODO: Change the autogenerated stub
  40. }
  41. public function test_transfersToConditions_format()
  42. {
  43. foreach($this->data['units'] as $unit){
  44. foreach($this->data['dates']['right'] as $date){
  45. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  46. $this->assertIsArray($result);
  47. }
  48. foreach($this->data['dates']['wrong'] as $date){
  49. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  50. $this->assertIsArray($result);
  51. }
  52. }
  53. }
  54. public function test_transfersToConditions_ifEmpty()
  55. {
  56. foreach($this->data['units'] as $unit){
  57. foreach($this->data['dates']['right'] as $date){
  58. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  59. $this->assertNotEmpty($result);
  60. }
  61. foreach($this->data['dates']['wrong'] as $date){
  62. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  63. $this->assertEmpty($result['data']);
  64. $this->assertNotEmpty($result['unit']);
  65. }
  66. }
  67. }
  68. public function test_transfersToConditions_ifDatesMatches()
  69. {
  70. foreach($this->data['units'] as $unit){
  71. foreach($this->data['dates']['right'] as $date){
  72. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  73. $datesExpected=[];
  74. switch ($unit){
  75. case '年': $datesExpected=collect($date['startAt']->yearsUntil($date['endAt'], 1)->toArray())
  76. ->map(function(Carbon $date){
  77. return $date->firstOfYear();
  78. })->toArray();
  79. break;
  80. case '月': $datesExpected=collect($date['startAt']->monthsUntil($date['endAt'], 1)->toArray())
  81. ->map(function(Carbon $date){
  82. return $date->firstOfMonth();
  83. })->toArray();break;
  84. case '日': $datesExpected=collect($date['startAt']->daysUntil($date['endAt'], 1)->toArray())
  85. ->map(function(Carbon $date){
  86. return $date->startOfDay();
  87. })->toArray();break;
  88. }
  89. $datesExpected=array_map(function($date){
  90. return $date->toDateString();
  91. },$datesExpected);
  92. $actualDays = array_keys($result['data']);
  93. $this->assertEquals($datesExpected, $actualDays);
  94. }
  95. }
  96. }
  97. public function test_transfersToConditions_ifOwnerIdMatches()
  98. {
  99. foreach($this->data['units'] as $unit){
  100. foreach($this->data['dates']['right'] as $date){
  101. $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
  102. $ownerIdsExpected=data_get($this->data['owners'],'*.id');
  103. $isMatch=true;
  104. foreach($result['data'] as $date=>$ownerIds){
  105. if(json_encode($ownerIdsExpected)!=json_encode($ownerIds)){
  106. $isMatch=false; break;
  107. }
  108. }
  109. $this->assertTrue($isMatch);
  110. }
  111. }
  112. }
  113. }