View source
<?php
namespace Drupal\Tests\webform_scheduled_tasks\Kernel;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\webform\Entity\Webform;
use Drupal\webform_scheduled_tasks\Entity\WebformScheduledTask;
use Drupal\webform_scheduled_tasks\Entity\WebformScheduledTaskInterface;
class TaskRunnerTest extends KernelTestBase {
public static $modules = [
'system',
'user',
'webform',
'webform_scheduled_tasks',
'webform_scheduled_tasks_test_types',
];
protected $testWebform;
protected $taskRunner;
protected function setUp() {
parent::setUp();
$this
->installSchema('webform', [
'webform',
]);
$this
->installEntitySchema('webform_submission');
$this
->installEntitySchema('user');
$time = $this
->prophesize(TimeInterface::class);
$time
->getRequestTime()
->willReturn(1000);
$this->container
->set('datetime.time', $time
->reveal());
$this->testWebform = Webform::create([
'id' => 'scheduled_webform',
]);
$this->testWebform
->save();
$this->taskRunner = $this->container
->get('webform_scheduled_tasks.task_runner');
}
public function testGetPendingTasks() {
$expected_not_pending_tasks = [];
$expected_pending_tasks = [];
$expected_not_pending_tasks[] = $this
->createTestTask();
$expected_not_pending_tasks[] = $this
->createTestTask([
'interval' => [
'amount' => 1,
'multiplier' => 60,
],
])
->setNextTaskRunDate(1005);
$expected_not_pending_tasks[] = $this
->createTestTask()
->setNextTaskRunDate(995);
$expected_not_pending_tasks[] = $this
->createTestTask([
'interval' => [
'amount' => 1,
'multiplier' => 60,
],
]);
$expected_not_pending_tasks[] = $this
->createTestTask([
'interval' => [
'amount' => 1,
'multiplier' => 60,
],
])
->setNextTaskRunDate(995)
->halt('Something was wrong!');
$expected_pending_tasks[] = $this
->createTestTask([
'interval' => [
'amount' => 1,
'multiplier' => 60,
],
])
->setNextTaskRunDate(995);
$pending_tasks = $this->taskRunner
->getPendingTasks();
$id = function (WebformScheduledTaskInterface $task) {
return $task
->id();
};
$this
->assertEquals(array_map($id, $expected_pending_tasks), array_map($id, $pending_tasks));
}
protected function createTestTask($values = []) {
$schedule = WebformScheduledTask::create($values + [
'id' => strtolower($this
->randomMachineName()),
'webform' => $this->testWebform
->id(),
'result_set_type' => 'all_submissions',
'task_type' => 'test_task',
]);
$schedule
->save();
return $schedule;
}
}