entityManager = $this->createMock(EntityManager::class); } public function testSchedule1(): void { $scheduler = new JobScheduler($this->entityManager); $jobEntity = $this->createMock(JobEntity::class); $time = new DateTimeImmutable(); $delay = DateInterval::createFromDateString('1 minute'); $this->entityManager ->expects($this->once()) ->method('createEntity') ->with( JobEntity::ENTITY_TYPE, [ 'name' => TestJob::class, 'className' => TestJob::class, 'queue' => QueueName::Q0, 'group' => null, 'data' => (object) [ 'test' => '1', ], 'executeTime' => $time->modify('+1 minute')->format(DateTime::SYSTEM_DATE_TIME_FORMAT), 'targetId' => null, 'targetType' => null, ] ) ->willReturn($jobEntity); $jobEntityReturned = $scheduler ->setClassName(TestJob::class) ->setQueue(QueueName::Q0) ->setData([ 'test' => '1', ]) ->setTime($time) ->setDelay($delay) ->schedule(); $this->assertSame($jobEntityReturned, $jobEntity); } public function testSchedule2(): void { $scheduler = new JobScheduler($this->entityManager); $jobEntity = $this->createMock(JobEntity::class); $time = new DateTimeImmutable(); $this->entityManager ->expects($this->once()) ->method('createEntity') ->with( JobEntity::ENTITY_TYPE, [ 'name' => TestJob::class, 'className' => TestJob::class, 'queue' => null, 'group' => 'g-1', 'data' => (object) [ 'test' => '1', ], 'executeTime' => $time->format(DateTime::SYSTEM_DATE_TIME_FORMAT), 'targetId' => 'test-id', 'targetType' => 'TestType', ] ) ->willReturn($jobEntity); $data = Data ::create([ 'test' => '1', ]) ->withTargetId('test-id') ->withTargetType('TestType'); $jobEntityReturned = $scheduler ->setClassName(TestJob::class) ->setGroup('g-1') ->setData($data) ->setTime($time) ->schedule(); $this->assertSame($jobEntityReturned, $jobEntity); } public function testSchedule3(): void { $scheduler = new JobScheduler($this->entityManager); $jobEntity = $this->createMock(JobEntity::class); $this->entityManager ->expects($this->once()) ->method('createEntity') ->with( JobEntity::ENTITY_TYPE, $this->callback( function (array $data): bool { return is_string($data['executeTime']); } ) ) ->willReturn($jobEntity); $jobEntityReturned = $scheduler ->setClassName(TestJob::class) ->schedule(); $this->assertSame($jobEntityReturned, $jobEntity); } }