| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <?php
- namespace NewOrderCountingRecordService;
- use App\Order;
- use App\OrderCountingRecord;
- use App\Owner;
- use App\Services\NewOrderCountingRecordService;
- use App\User;
- use Carbon\Carbon;
- use Illuminate\Foundation\Testing\RefreshDatabase;
- use Illuminate\Support\Arr;
- use Tests\TestCase;
- class TransfersToConditionsTest extends TestCase
- {
- protected $newOrderCountingRecordService;
- protected $data;
- protected function setUp(): void
- {
- parent::setUp(); // TODO: Change the autogenerated stub
- cache()->flush();
- $this->newOrderCountingRecordService = new NewOrderCountingRecordService();
- $this->actingAs(factory(User::class)->create(['name' => 'yang']));
- $this->data['dates'] = [
- 'right'=>[
- ['startAt'=>Carbon::now()->subDays(2),'endAt'=>Carbon::now()->addDays(2)],
- ['startAt'=>Carbon::now()->subYears(1),'endAt'=>Carbon::now()->addYears(1)],
- ],
- 'wrong'=>[
- ['startAt'=>Carbon::now()->addDays(2),'endAt'=>Carbon::now()->subDays(2)],
- ['startAt'=>Carbon::now()->addYears(1),'endAt'=>Carbon::now()->subYears(1)],
- ]
- ];
- $this->data['units'] = ['year'=>'年','month'=>'月','week'=>'周','day'=>'日'];
- $this->data['owners']=factory(Owner::class)->times(2)->create();
- }
- protected function tearDown(): void
- {
- cache()->flush();
- Owner::destroy(data_get($this->data['owners'],'*.id'));
- parent::tearDown(); // TODO: Change the autogenerated stub
- }
- public function test_transfersToConditions_format()
- {
- foreach($this->data['units'] as $unit){
- foreach($this->data['dates']['right'] as $date){
- $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
- $this->assertIsArray($result);
- }
- foreach($this->data['dates']['wrong'] as $date){
- $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
- $this->assertIsArray($result);
- }
- }
- }
- public function test_transfersToConditions_ifEmpty()
- {
- foreach($this->data['units'] as $unit){
- foreach($this->data['dates']['right'] as $date){
- $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
- $this->assertNotEmpty($result);
- }
- foreach($this->data['dates']['wrong'] as $date){
- $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
- $this->assertEmpty($result['data']);
- $this->assertNotEmpty($result['unit']);
- }
- }
- }
- public function test_transfersToConditions_ifDatesMatches()
- {
- foreach($this->data['units'] as $unit){
- foreach($this->data['dates']['right'] as $date){
- $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
- $datesExpected=[];
- switch ($unit){
- case '年': $datesExpected=collect($date['startAt']->yearsUntil($date['endAt'], 1)->toArray())
- ->map(function(Carbon $date){
- return $date->firstOfYear();
- })->toArray();
- break;
- case '月': $datesExpected=collect($date['startAt']->monthsUntil($date['endAt'], 1)->toArray())
- ->map(function(Carbon $date){
- return $date->firstOfMonth();
- })->toArray();break;
- case '周': $datesExpected=collect($date['startAt']->weeksUntil($date['endAt'], 1)->toArray())
- ->map(function(Carbon $date){
- return $date->startOfWeek();
- })->toArray();break;
- case '日': $datesExpected=collect($date['startAt']->daysUntil($date['endAt'], 1)->toArray())
- ->map(function(Carbon $date){
- return $date->startOfDay();
- })->toArray();break;
- }
- $datesExpected=array_map(function($date){
- return $date->toDateString();
- },$datesExpected);
- $actualDays = array_keys($result['data']);
- $this->assertEquals($datesExpected, $actualDays);
- }
- }
- }
- public function test_transfersToConditions_ifOwnerIdMatches()
- {
- foreach($this->data['units'] as $unit){
- foreach($this->data['dates']['right'] as $date){
- $result=$this->newOrderCountingRecordService->transfersToCondition($date['startAt'],$date['endAt'],$unit,data_get($this->data['owners'],'*.id'));
- $ownerIdsExpected=data_get($this->data['owners'],'*.id');
- $isMatch=true;
- foreach($result['data'] as $date=>$ownerIds){
- if(json_encode($ownerIdsExpected)!=json_encode($ownerIds)){
- $isMatch=false; break;
- }
- }
- $this->assertTrue($isMatch);
- }
- }
- }
- }
|