Add unit tests for scheduled tasks

This commit is contained in:
Kijin Sung 2024-12-12 21:28:43 +09:00
parent 90fd5502ce
commit 50974a325e

View file

@ -20,4 +20,85 @@ class QueueTest extends \Codeception\Test\Unit
$output = Rhymix\Framework\Queue::getDriver('dummy')->getNextTask(); $output = Rhymix\Framework\Queue::getDriver('dummy')->getNextTask();
$this->assertNull($output); $this->assertNull($output);
} }
public function testScheduledTaskAt()
{
$timestamp = time() + 43200;
$handler = 'MyClass::myFunc';
$args = (object)['foo' => 'bar'];
$options = null;
$task_srl = Rhymix\Framework\Queue::addTaskAt($timestamp, $handler, $args, $options);
$this->assertGreaterThan(0, $task_srl);
$output = Rhymix\Framework\Queue::getScheduledTask($task_srl);
$this->assertTrue(is_object($output));
$this->assertEquals('once', $output->task_type);
$this->assertEquals(date('Y-m-d H:i:s', $timestamp), $output->first_run);
$this->assertEquals('MyClass::myFunc', $output->handler);
$this->assertEquals('bar', $output->args->foo);
$this->assertNull($output->options);
$output = Rhymix\Framework\Queue::cancelScheduledTask($task_srl);
$this->assertTrue($output);
}
public function testScheduledTaskAtInterval()
{
$interval = '30 9 1-15 */2 *';
$handler = 'MyClass::getInstance()->myMethod';
$args = (object)['foo' => 'bar'];
$options = null;
$task_srl = Rhymix\Framework\Queue::addTaskAtInterval($interval, $handler, $args, $options);
$this->assertGreaterThan(0, $task_srl);
$output = Rhymix\Framework\Queue::getScheduledTask($task_srl);
$this->assertTrue(is_object($output));
$this->assertEquals('interval', $output->task_type);
$this->assertEquals($interval, $output->run_interval);
$this->assertEquals('MyClass::getInstance()->myMethod', $output->handler);
$this->assertEquals('bar', $output->args->foo);
$this->assertNull($output->options);
$output = Rhymix\Framework\Queue::cancelScheduledTask($task_srl);
$this->assertTrue($output);
}
public function testCheckIntervalSyntax()
{
$this->assertTrue(Rhymix\Framework\Queue::checkIntervalSyntax('* * * * *'));
$this->assertTrue(Rhymix\Framework\Queue::checkIntervalSyntax('*/2 15 * * 0,3'));
$this->assertTrue(Rhymix\Framework\Queue::checkIntervalSyntax('10-19,40-49 * 1-12 * *'));
$this->assertTrue(Rhymix\Framework\Queue::checkIntervalSyntax('*/10 */4 * * *'));
$this->assertFalse(Rhymix\Framework\Queue::checkIntervalSyntax('* * * *'));
$this->assertFalse(Rhymix\Framework\Queue::checkIntervalSyntax('1 2 3 4 5,6 */7'));
$this->assertFalse(Rhymix\Framework\Queue::checkIntervalSyntax('@hourly'));
$this->assertFalse(Rhymix\Framework\Queue::checkIntervalSyntax('5/* 12h * * *'));
}
public function testParseInterval()
{
$interval = '* * * * *';
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-01-01 00:00:00')));
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-31 23:59:59')));
$interval = '*/2 15 * * 0,3';
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 15:00:00')));
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-04 15:30:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-02 15:00:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 03:00:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-04 15:31:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-11-30 15:44:00')));
$interval = '3-5,14-21,*/10 * * 12 *';
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 12:05:00')));
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 14:19:00')));
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 16:30:00')));
$this->assertTrue(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 18:00:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 09:01:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-12-01 11:13:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-01-02 06:20:00')));
$this->assertFalse(Rhymix\Framework\Queue::parseInterval($interval, strtotime('2024-11-30 18:50:00')));
}
} }